движущаяся платформа
|
|
pretty_mouse | Дата: Четверг, 23 Декабря 2010, 14:15 | Сообщение # 1 |
частый гость
Сейчас нет на сайте
| Здравствуйте, подскажите как кодом установить определенное расстояние которое должна пройти платформа и затем начать двигаться обратно и так бесконечно?
|
|
| |
AGDMFG | Дата: Четверг, 23 Декабря 2010, 14:21 | Сообщение # 2 |
участник
Сейчас нет на сайте
| А нужно ли делать проверку расстоянием - ведь можно сделать условие "каждые сколько то там секунд" менять направление. http://zalil.ru/30207518 В этом примере реализовано перемещение вертикальных платформ через Alarm'ы и перемещение горизонтальных - через проверку коллизии с блоками.
Первая доделанная игра: Putin V.S. Humanity
|
|
| |
Lorderon | Дата: Четверг, 23 Декабря 2010, 14:21 | Сообщение # 3 |
старожил
Сейчас нет на сайте
| 1. Можно установить "путём". 2. Можно задать координаты двух отсчётных точек. 3. Можно сделать два объекта (невидимых), при прикосновении к одному платформа должна повернуть налево, при прикосновении с другим объектом, платформа должна повернуть на право. 4. Задать алармом. 5... --------------------------------------------------------- Советую сделать третьим и четвёртый способом. ---------------------------------------------------------
|
|
| |
BaHu3aTop | Дата: Четверг, 23 Декабря 2010, 14:24 | Сообщение # 4 |
постоянный участник
Сейчас нет на сайте
| Мой пример.В самом нужно задать время, через которое он двигается
|
|
| |
Dva_Kota | Дата: Четверг, 23 Декабря 2010, 14:30 | Сообщение # 5 |
заслуженный участник
Сейчас нет на сайте
| Я думаю можно сделать так (Пример для движения платформы горизонтально): В событии создания задаешь переменную (например start_x) и присваиваешь ей значение x потом задаешь еще одну переменную (например dist), и в нее записываешь расстояние, которое должна проходить платформа, например 100 потом задаешь направление движения и скорость Code direction=0; speed=4; в шаге делаешь проверку: Code if (x<start_x) { direction=0; } else { if (x>(start_x+dist)) { direction=180; } } Расстояние можно задавать для каждого экземпляра объекта "платформа" отдельно Вроде бы все. p.s.: я этот способ не проверял еще.
Новый пример инвентаря! /20.06.2012/
Energy Wars
Сообщение отредактировал Dva_Kota - Четверг, 23 Декабря 2010, 14:32 |
|
| |
pretty_mouse | Дата: Четверг, 23 Декабря 2010, 14:54 | Сообщение # 6 |
частый гость
Сейчас нет на сайте
| Ой, ой, спасибо большое, парни! Dva_Kota, работает идеально! Спасибки всем!
|
|
| |
Dva_Kota | Дата: Четверг, 23 Декабря 2010, 15:02 | Сообщение # 7 |
заслуженный участник
Сейчас нет на сайте
| Тебе спасибо, я теперь хоть знаю как это делается (никогда платформеры не делал)
Новый пример инвентаря! /20.06.2012/
Energy Wars
|
|
| |
pretty_mouse | Дата: Четверг, 23 Декабря 2010, 15:07 | Сообщение # 8 |
частый гость
Сейчас нет на сайте
| Ну вот, выпущу свою библиотеку для реактивного создания платформера, тогда попробуешь) Обязательно напишу твое имя в благодарнастях Добавлено (23.12.2010, 15:07) --------------------------------------------- Dva_Kota, ойойойойой!!! Помоги пожалуйсто, а как для вертикальной код изменить?
|
|
| |
Dva_Kota | Дата: Четверг, 23 Декабря 2010, 15:43 | Сообщение # 9 |
заслуженный участник
Сейчас нет на сайте
| Для вертикальных точно так же. Только вместо x везде ставь y. Добавлено (23.12.2010, 15:40) --------------------------------------------- Можно двигать и по диагонали, и вообще под любым углом. Для этого делаешь как по горизонтали, только в степе direction увеличь на столько градусов, на сколько нужно изменить движение. Добавлено (23.12.2010, 15:42) --------------------------------------------- Но такой способ не самый хороший. Через alarm будет рациональнее (не будет лишних проверок каждый шаг) и тоже можно задавать расстояние. Если нужно распишу как именно. Добавлено (23.12.2010, 15:43) --------------------------------------------- А, забыл, для вертикальной еще нужно direction изменить: вместо 0 и 180 нужно 90 и 270 соответственно.
Новый пример инвентаря! /20.06.2012/
Energy Wars
|
|
| |
pretty_mouse | Дата: Четверг, 23 Декабря 2010, 15:47 | Сообщение # 10 |
частый гость
Сейчас нет на сайте
| Уррра!!! Сделала! Вот, в Create: Code start_y=y; dist=100; direction=90; speed=4; В Step: Code if (y<start_y) { direction=270; } else { if (y>(start_y+dist)) { direction=90; } } Эх, жалко себе плюсик в карму положить нельзя
Сообщение отредактировал pretty_mouse - Четверг, 23 Декабря 2010, 15:48 |
|
| |
Dva_Kota | Дата: Четверг, 23 Декабря 2010, 16:02 | Сообщение # 11 |
заслуженный участник
Сейчас нет на сайте
| Через аларм можно, оказывается, сделать на много проще чем то что я писал выше: В создании Code al=100; direction=0; speed=4; alarm[0]=1; Событие alarm0 Code direction+=180; alarm[0]=al*speed; Переменная al будет отвечать за расстояние , которое будет проходить платформа. Попробуй сделать этим кодом (его я тоже еще не проверял) Производительность с таким кодом будет на много выше.
Новый пример инвентаря! /20.06.2012/
Energy Wars
Сообщение отредактировал Dva_Kota - Четверг, 23 Декабря 2010, 16:03 |
|
| |
pretty_mouse | Дата: Четверг, 23 Декабря 2010, 16:17 | Сообщение # 12 |
частый гость
Сейчас нет на сайте
| А можно одним кодом реализовать интересно? Просто я хотела бы свою кнопку для созданияэтого действия сделать и использовать лишь один код?
|
|
| |
Dva_Kota | Дата: Четверг, 23 Декабря 2010, 16:53 | Сообщение # 13 |
заслуженный участник
Сейчас нет на сайте
| Ну, вообще для горизонтальной платформы можно в создании не писать direction=0; speed=4; можно перенести в аларм (пусть каждый раз задает) Но аларм этот все равно нужно как-то запускать, по этому alarm[0]=1; в событии создания все равно ставить нужно. А вот расстояние al=100; можно, наверное, тоже поставить в аларм. В итоге получаем код, который нужно ставить в событие alarm0: Code al=100; speed=4; direction+=180; alarm[0]=al*speed; А в событии создание просто задаешь через сколько шагов после старта комнаты начнется движение платформы например Кстати, можно даже круче сделать! Можно не в создании задавать, а в любом событии при любом условии. Например у тебя есть яма. Через нее не пройти без движущейся платформы, а она на другом конце ямы стоит и не двигается.... Чтобы ее запустить нужно найти ключ. Находишь ключ, и при столкновении игрока с ключом (когда он его берет) запускаешь для платформы alarm[0]=1; и она начинает двигаться! Ну в общем тут уже куча всяких возможностей. Добавлено (23.12.2010, 16:53) --------------------------------------------- а вот для Вертикального движения нужно все равно в создании объекта писать
Новый пример инвентаря! /20.06.2012/
Energy Wars
Сообщение отредактировал Dva_Kota - Четверг, 23 Декабря 2010, 16:38 |
|
| |
TheApKoT | Дата: Четверг, 23 Декабря 2010, 17:57 | Сообщение # 14 |
GML ProgrammeR
Сейчас нет на сайте
| Dva_Kota, раз уж тут разговор про движущиеся платформы пошел, то не мог бы ты сказать, как написать, чтобы если объект стоит на платформе, то движется он вместе с ней?
Посоветуйте, где скачать VB6 :C
Сообщение отредактировал Apelsinoviy_kot - Четверг, 23 Декабря 2010, 17:57 |
|
| |
Dva_Kota | Дата: Четверг, 23 Декабря 2010, 18:05 | Сообщение # 15 |
заслуженный участник
Сейчас нет на сайте
| ну я думаю что нужно проверять "есть ли под игроком платформа (например функцией place_meeting()) и если есть - добавлять к его скорости скорость платформы. А если платформа движется с постоянной скоростью, как в том примере что я описывал, нужно дополнительно проверять direction платформы и в зависимости от этого умножать скорость на -1 или не умножать. Так же нужно учитывать каким образом сделано движение игрока его скорость и направление движения (вдруг ты захочешь походить по платформе). Можно сделать чтобы игрок не мог ходить по платформе. Тогда еще проще: проверяешь стоит ли игрок на платформе и если стоит - привязывай его к координатам платформы. p.s.: повторюсь, я платформеры никогда не делал - это все только теория.
Новый пример инвентаря! /20.06.2012/
Energy Wars
Сообщение отредактировал Dva_Kota - Четверг, 23 Декабря 2010, 18:06 |
|
| |
TheApKoT | Дата: Четверг, 23 Декабря 2010, 18:11 | Сообщение # 16 |
GML ProgrammeR
Сейчас нет на сайте
| Dva_Kota, можно код? Так будет понятней.
Посоветуйте, где скачать VB6 :C
|
|
| |
Dva_Kota | Дата: Четверг, 23 Декабря 2010, 18:19 | Сообщение # 17 |
заслуженный участник
Сейчас нет на сайте
| Я код не стал писать по тому что не уверен правильный ли он будет. По этому просто расписал все как я это представляю. Ок. попробую сделать код: Code if place_meeting(x,y+1,obj_platforma) { speed+=instance_nearest(x,y,obj_platforma).speed; } Здесь просто добавление к скорости игрока скорости платформы (если делать платформу как я выше писал, то для изменения направления движения нужно менять не direction, а speed). Все остальные параметры, о которых я выше писал, нужно добавлять и экспериментировать с ними. На это у меня времени сейчас нет. Но если ты попробуешь что-то из выше перечисленного добавить - будет очень хорошо. Если что-то получится, выкладывай, пожалуйста.
Новый пример инвентаря! /20.06.2012/
Energy Wars
|
|
| |
TheApKoT | Дата: Четверг, 23 Декабря 2010, 18:22 | Сообщение # 18 |
GML ProgrammeR
Сейчас нет на сайте
| Quote (Dva_Kota) Если что-то получится, выкладывай, пожалуйста. Да нет, я не хочу эксперементировать, просто давеча я задавал такой вопрос, и внятно почти никто не ответил.
Посоветуйте, где скачать VB6 :C
|
|
| |