Пятница, 19 Апреля 2024, 23:24

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Форум игроделов » Конструкторы игр и лёгкие в освоении системы разработки игр » Game Maker » Единичное произведение действия при нажатии клавиши (нужна помощь, никак не могу реализовать)
Единичное произведение действия при нажатии клавиши
DARE32Дата: Четверг, 30 Мая 2013, 14:39 | Сообщение # 1
Faceless Games Lead Designer
Сейчас нет на сайте
Доброе время суток, форумчане, делая свою игру столкнулся с проблемой, которую своими знаниями решить, к сожалению, не могу, посему прошу вашей помощи)
Мне необходимо сделать так, чтобы при нажатии клавиши действие было произведено только один раз, это похоже на стрельбу с перерывами, но мне нужно, чтобы пока кнопка нажата действие не повторялось больше одного раза.
Заранее благодарен за любую помощь.


Ограниченные ресурсы заставляют нас быть более изобретательными в их использовании.


Блог игры "Unwrittens"
Тема на форуме
Raven84Дата: Четверг, 30 Мая 2013, 15:09 | Сообщение # 2
старожил
Сейчас нет на сайте
А в чем проблема-то? Там все очень просто. Есть 2 действия: просто Keyboard и Key press.Если действие вставить в событие Keyboard,то оно будет выполняться постоянно,пока нажата клавиша.Если же то же действие вставить в событие Key Press,то действие выполнится единожды при нажатии клавиши и для того,чтобы оно повторилось нужно будет отжать клавишу и нажать ее еще раз.Вот и все. smile

Super Knight Story (в разработке)
Idolzzz - игра доступна в Steam и Play Market
Oliver's Adventures in the Fairyland
laggertДата: Четверг, 30 Мая 2013, 15:14 | Сообщение # 3
почетный гость
Сейчас нет на сайте
Это действительно просто! Если используешь keyboard_check или mouse_check_button, то добавь припиши в конце команды _pressed, т.е. keyboard_check_pressed


Я здесь, чтобы распространять ЛАГИ!!!
DARE32Дата: Четверг, 30 Мая 2013, 16:11 | Сообщение # 4
Faceless Games Lead Designer
Сейчас нет на сайте
так у меня не получается
например, мне нужно, чтобы по нажатию клавиши персонаж совершил рывок в определенную точку
Код

move_towards_point(x,y+50,30)

проблема в том, что даже при keyboard_check_pressed он делает этот рывок до тех пор, пока я держу клавишу, что не совсем то, что мне нужно...


Ограниченные ресурсы заставляют нас быть более изобретательными в их использовании.


Блог игры "Unwrittens"
Тема на форуме
XDominatorДата: Пятница, 31 Мая 2013, 11:38 | Сообщение # 5
постоянный участник
Сейчас нет на сайте
Потому что ты используешь не ту функцию. В данном случае, тебе достаточно писать не move_towards_point(x,y+50,30), a
y += 50(или, в твоем случае, y += 30, т.к. последний аргумент, вроде, скорость, и ты ее ставишь 30, а значит, за один шаг твой объект сдвинется на 30 точек вправо)

Если же отойти от твоих x,y и считать их не личными координатами объекта, а некими абстрактными ххх, ууу, то тогда тебе нужен более сложный алгоритм.

во первых тебе нужно узнать направление будущего движения:

Код

my_direction = point_direction(x, y, xxx, yyy)

- вернет тебе направление к точке xxx, yyy от личных координат объекта x, y.

и в итоге имеем что то вроде этого(на сколько мы хотим сместить объект, будем хранить в переменной my_speed(у тебя сейчас - 30)):
Код

if keyboard_check_pressed(key)
{
x += my_speed*cos(my_direction)
y -= my_speed*sin(my_direction)
}

Этот код сместит твой объект в сторону точки xxx,yyy на 30 точек. Возможно что то напутал со знаками, т.к. сам код не тестил, сижу на работе smile Удачи)


Ghaarp

The soul lighter(Android, logic)

Zzzzombie RAGE!!!(For android)


Сообщение отредактировал XDominator - Пятница, 31 Мая 2013, 11:39
DARE32Дата: Пятница, 31 Мая 2013, 12:20 | Сообщение # 6
Faceless Games Lead Designer
Сейчас нет на сайте
XDominator, хм, довольно интересно, я попробую разобраться с этим. Это довольно интересный подход, я попробую его, но проблема в том, что это, ггрубо говоря, скачок в точку, как у nightcrawler из xmen, а мне нужен именно dash, рывок на определенное расстояние.

Ограниченные ресурсы заставляют нас быть более изобретательными в их использовании.


Блог игры "Unwrittens"
Тема на форуме
XDominatorДата: Пятница, 31 Мая 2013, 12:33 | Сообщение # 7
постоянный участник
Сейчас нет на сайте
Рывок у тебя не получится в любом случае, потому что для того чтобы отрисовать рывок как движение из точки а в точку Б, нужно несколько кадров, а key_pressed позволяет использовать только один. Тебе в таком случае нужен принципиально другой алгоритм, т.е. назначить некую ответственную переменную. Скажем, так:
В create:
Код

a = 0

Наша ответственная переменная

В степ:
Код

if keyboard_check_pressed(key) and a = 0
  {  
     a = 5
  }

т.е. наш "рывок" будет разбить на 5 шагов. далее там же в степе дописываем:
Код

if a>0  
{
    a-= 1
    x += my_speed*cos(my_direction)  
    y -= my_speed*sin(my_direction)
}

таким способом получаем движение к точке в течении a шагов. Соответственно изменишь my_speed до нужного значения(ну, в данном случае my_speed/5, например)

Ну и конечно нужно следить, чтобы во время выполнения нашего "скрипта" были запрещены для любого изменения my_direction, my_speed, a, иначе будут траблы и баги. Ну и конечно нужно проверять близость точки, например последний кусок можно заменить на
Код

if a>0  
{
    if distance_to_point(x,y,xxx,yyy) >= my_speed
    {
       a-= 1
       x += my_speed*cos(my_direction)  
       y -= my_speed*sin(my_direction)
    }
    else
    {
       a = 0
       x = xxx
       y = yyy
    }
}

т.е. скрипт закончится раньше времени если мы близко к конечной точке.


Ghaarp

The soul lighter(Android, logic)

Zzzzombie RAGE!!!(For android)
DARE32Дата: Пятница, 31 Мая 2013, 13:24 | Сообщение # 8
Faceless Games Lead Designer
Сейчас нет на сайте
XDominator, ого, спасибо огромное, пошел тестировать.

Ограниченные ресурсы заставляют нас быть более изобретательными в их использовании.


Блог игры "Unwrittens"
Тема на форуме
XDominatorДата: Пятница, 31 Мая 2013, 13:30 | Сообщение # 9
постоянный участник
Сейчас нет на сайте
Отпиши потом что получилось)

Ghaarp

The soul lighter(Android, logic)

Zzzzombie RAGE!!!(For android)
DARE32Дата: Пятница, 31 Мая 2013, 13:32 | Сообщение # 10
Faceless Games Lead Designer
Сейчас нет на сайте
XDominator, окей)
я просто перед этим пробовал контрольную переменную делать из разряда "если а=0 - делать рывок, если нет- нет", и менял ее в теле кода нажатия, что не имело никакого эффекта...


Ограниченные ресурсы заставляют нас быть более изобретательными в их использовании.


Блог игры "Unwrittens"
Тема на форуме
XDominatorДата: Пятница, 31 Мая 2013, 17:43 | Сообщение # 11
постоянный участник
Сейчас нет на сайте
таки шо?

Ghaarp

The soul lighter(Android, logic)

Zzzzombie RAGE!!!(For android)
DARE32Дата: Вторник, 04 Июня 2013, 09:27 | Сообщение # 12
Faceless Games Lead Designer
Сейчас нет на сайте
XDominator, еще не проверял, сейчас другим занят)
проверю-обязательно отпишусь)


Ограниченные ресурсы заставляют нас быть более изобретательными в их использовании.


Блог игры "Unwrittens"
Тема на форуме
Форум игроделов » Конструкторы игр и лёгкие в освоении системы разработки игр » Game Maker » Единичное произведение действия при нажатии клавиши (нужна помощь, никак не могу реализовать)
  • Страница 1 из 1
  • 1
Поиск:

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