Воскресенье, 22 Декабря 2024, 13:05

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
движущаяся платформа
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
Code
start_x=x;

потом задаешь еще одну переменную (например dist), и в нее записываешь расстояние, которое должна проходить платформа, например 100
Code
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
заслуженный участник
Сейчас нет на сайте
Тебе спасибо, я теперь хоть знаю как это делается (никогда платформеры не делал) biggrin

Новый пример инвентаря! /20.06.2012/

Energy Wars
pretty_mouseДата: Четверг, 23 Декабря 2010, 15:07 | Сообщение # 8
частый гость
Сейчас нет на сайте
Ну вот, выпущу свою библиотеку для реактивного happy создания платформера, тогда попробуешь) Обязательно напишу твое имя в благодарнастях biggrin

Добавлено (23.12.2010, 15:07)
---------------------------------------------
Dva_Kota, ойойойойой!!! Помоги пожалуйсто, а как для вертикальной код изменить?


Dva_KotaДата: Четверг, 23 Декабря 2010, 15:43 | Сообщение # 9
заслуженный участник
Сейчас нет на сайте
Для вертикальных точно так же. Только вместо x везде ставь y. biggrin

Добавлено (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;   
            }   
        }

Эх, жалко себе плюсик в карму положить нельзя happy




Сообщение отредактировал 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 будет отвечать за расстояние , которое будет проходить платформа.
Попробуй сделать этим кодом (его я тоже еще не проверял)
Производительность с таким кодом будет на много выше. smile


Новый пример инвентаря! /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;

А в событии создание просто задаешь через сколько шагов после старта комнаты начнется движение платформы например

Code
alarm[0]=1;

Кстати, можно даже круче сделать! Можно не в создании задавать, а в любом событии при любом условии. Например у тебя есть яма. Через нее не пройти без движущейся платформы, а она на другом конце ямы стоит и не двигается.... Чтобы ее запустить нужно найти ключ. Находишь ключ, и при столкновении игрока с ключом (когда он его берет) запускаешь для платформы alarm[0]=1; и она начинает двигаться! Ну в общем тут уже куча всяких возможностей. biggrin

Добавлено (23.12.2010, 16:53)
---------------------------------------------
а вот для Вертикального движения нужно все равно в создании объекта писать

Code
direction=90;


Новый пример инвентаря! /20.06.2012/

Energy Wars


Сообщение отредактировал Dva_Kota - Четверг, 23 Декабря 2010, 16:38
TheApKoTДата: Четверг, 23 Декабря 2010, 17:57 | Сообщение # 14
GML ProgrammeR
Сейчас нет на сайте
Dva_Kota, раз уж тут разговор про движущиеся платформы пошел, то не мог бы ты сказать, как написать, чтобы если объект стоит на платформе, то движется он вместе с ней? happy

Посоветуйте, где скачать 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
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг