SFML и C++ Уроки \ Разработка игр › Форумы › SFML System, Window и другие вопросы › Корректировка (выход героя за пределы карты при одной картинке)
В этой теме 5 ответов, 2 участника, последнее обновление Sanya 8 года/лет, 5 мес. назад.
-
АвторСообщения
-
Ребят, помогите!!!Не работает запрет на движение влево и вверх. Сама картинка(карта) одна цельная 500х500. И хочу сделать, чтоб герой не выходил за пределы окна-картинки:
for (int i = y / 485; i < (y + h) / 485; i++)
for (int j = x / 485; j<(x + w) / 485; j++){
if (TileMap[i][j] ==! ‘0’)
{
if (dy>0)
{
y = i * 485 – h;
}
if (dy<0)
{
y = i * 485 + 485;
}
if (dx>0)
{
x = j * 485 – w;
}
if (dx < 0)
{
x = j * 485 + 485;
}
}}
}для вставки кода используй кнопку “вставить код” )
а почему такие тайлы огромные? а размер карты какой? не глючит от таких огромных тайлов? их ведь наверняка много..
C++1if (TileMap[i][j] ==! ‘0’)это проверка на стену? должно же быть ==’0′ тогда, разве нет?
Всего тайл один, ну тоесть как одна целая картинка-фон.(Ибо не знаю, как еще поставить фон)
А проверка с “!” т.к если тайл(фон) заканчивается, то человечек упирается, ибо это уже будет конец окна. Просто учусь по урокам, и не нашла , где написано про один общий фон, не состоящий из множества спрайтов)а ты сделай символ ‘0’ концом карты, оберни это всё как в уроке и можешь посередине единый фон сделать – один спрайт, а по бокам можно и не грузить спрайты. суть в том, что тогда тебе подойдёт проверка из уроков , и тайлы эти сделай 32*32.
то есть у тебя будет прямоугольник , состоящий из бордюра карты (символы ‘0’), а центр карты – твоя большая картинка.
ну или можно просто сделать проверку на координаты – если x<0 , то это конец карты, надо дать скорость ноль при ходьбе влево, чтобы дальше не зашёл, если y<0, то скорость 0 при ходьбе вверх. для определения нижней и верхней границ карты – считай подбором или по размеру картинки, тайлов.
и ещё – если картинка одна и помещается полностью в окно, то проверку на выход за пределы окна можно сделать как проверку условия if (player.x>window.getSize()x) && (и при этом игрок идёт вправо){player.speed=0;}
что то типа того. это более логичное решение, не нужно городить массив и тд
Ой, спасибо огромное) Все заработало!!)
-
АвторСообщения
Для ответа в этой теме необходимо авторизоваться.