SFML и C++ Уроки \ Разработка игр › Форумы › SFML Graphics › Движение объектов
В этой теме 35 ответов, 4 участника, последнее обновление Heisenberg 7 года/лет, 12 мес. назад.
-
АвторСообщения
-
Здравствуйте Павел. У меня возникла проблема с заданием движения объектов.Дело в том что мне нужно написать курсовую. Тема игра в стиле Башенная Защита. я прописал карту но не могу задать движение объекта по нужному пути самому без нажатия стрелок. помогите пожалуйста
Привет. Поправочка – на форуме отвечает не только Павел, но и другие участники:) в том числе отвечающим другим, впоследствии, можете стать вы. ))
Вам нужно посмотреть урок 18 – там движется объект к курсору. Суть та же – объект (в уроке это игрок) это ваш враг, а курсор – башня. Если башен слева много и враги должны идти прямо, то просто dx=-0.5, например. Посмотрите уроки, они не такие длинные =)
Движения врагов мы так же делали в уроке 21,22,23.
я смотрел все уроки. просто со временем беда. завтра препод последний раз принимает потом в отпск после уже не известно когда он будет. курсач допуск. 2 день на кофе сижу уже так сказать творческий кризис когда в голове каша мне можно учитывая 11 урок показать что и как поменять. а к вам обращаюсь так как ваш форум и уроки ваши
можете приложить код и спросить что не получается. будем вместе со всеми пытаться объяснить и помочь решить проблемки. за вас делать курсач не смогу, у меня тоже есть препод, сессия, работа, семья и тд. и я тоже сижу на кофе, только подольше)
что именно не получается сделать? у вас башня одна ? она где находится? разместите целый замок в левой части экрана и врагов идущих прямо справа налево (как в игре plants vs zombies), тогда движение врага будет постоянно типа dx=-0.5; и всё.
нет суть в том что должно быть несколько типов башен
которые надо строить но меня пока что интересует другое
как мне прописать мобов которые будут идти по карте такого типа( по 1)
00000000000
0 11111111111 0
0 1 0
0 11111111111 0
и тд
моб должен идти по 1? урок 11 про взаимодействие с картой поможет. проверяешь символ и если он с этой стороны 1 – даёшь соответствующее направление.
Вот если брать по 11 уроку
C++12345678910for (int i = y / 32; i < (y + h) / 32; i++)for (int j = x / 32; j<(x + w) / 32; j++){if (TileMap[i][j] == '1')//если встретили символ 1{if (dy>0)//и при этом шли вниз{dy=0.5;//дальше идем вниз, попадая тем самым на этот символ}//аналогично для трех других направленийпри это надо запомнить , чтобы он не вернулся назад по этой дорожке- нужно сделать проверку , которая скажет ” был ли твой моб на этом месте” и если не был, то идет туда.
это первое что пришло в голову
давай на ты.
второй вариант реш-я задачи – можешь сделать не слитную дорожку из единичек.
а например:
00000000000000
0 1 1
0
0
0 1……и здесь положим старт моба правая верхняя единичка. и он идет влево пока не встретит единичку. если он её встретит, то уже идет вниз, потом если опять встретит – идёт вправо. и так сделать маршрут.
допустим у тебя в маршрутке будет 4 единички и тебе нужно будет сделать переменную, которая считает каждый шаг. то есть встретил единичку – плюс один.встретил – опять плюс один. и так в зависимости от цифры(значения) этой переменной давай различные направления в операторе switch , а если переменная =4, то дать последнее направление и занулить её. Таким образом можно будет зациклить движение моба и дать ему вейпоинт.
Еще раз всем привет
это все понятно что при столкновении менять направление
я не могу задать автоматическое движение персонажа
без всяких кликов и нажатий
возможен только один клик что то типа следующая волна
помогите пож
нужно что бы появился пошел
вы ответили не мне а abwrts
у меня совершенно другая суть
мне нужно прописать простое движение от тайла до тайла
А, у тебя даже проще. Если спрайт2 движется к спрайт1:
Создаем 2 переменные векторов:
float vecX, vecY;
Школьная формула, находим координаты векторов:
vecX = спрайт1.getPosition().x – спрайт2.getPosition().x;
vecX = спрайт1.getPosition().y – спрайт2.getPosition().y;
(если спрайт1, за которым движется спрайт2 тоже в движении, тогда эти две строки вставь в главный цикл на обновление, если нет – тогда вектора 1 раз только нужно найти)
Движение:
x += vecX*0.1*time;
y += vecY*0.1*time;
спрайт2.setPosition(x,y);
0.1 – скорость движения
time – привязка ко времениЭто все было в уроках.
В последствии прошу создавать новые темы, чтобы не было такой неразберихи. Перенесу сообщение про бильярд в новую тему
Паша привет! Надеюсь что ты знаешь что делать.По твоим урокам все делаю на 20 уроке вышла ошибка при запуске
Вложения:
You must be logged in to view attached files.ой на 21
Выход за пределы массива (наверное карта). Создавай новую тему для этой проблемы, прикладывай код (с помощью кнопки вставки кода) и желательно ссылку на проект.
-
АвторСообщения
Для ответа в этой теме необходимо авторизоваться.