Пятница, 29 Марта 2024, 02:26

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Форум игроделов » Конструкторы игр и лёгкие в освоении системы разработки игр » Game Maker » Проблема с передвижением танка. (Движение по диагонали.)
Проблема с передвижением танка.
MinskiiДата: Понедельник, 16 Мая 2016, 20:17 | Сообщение # 1
участник
Сейчас нет на сайте
Я делаю игру,код ещё сырой,но есть проблема которую я не могу решить.
Мне надо исключить движение по диагонали! wacko
Код движения такой(знаю туповатенький)
var i;
if keyboard_check(vk_left) // Åñëè èãðîê íàæàë ñòðåëêó âëåâî
x-=3
if keyboard_check(vk_left)
direction=90
if keyboard_check(vk_right) // Åñëè èãðîê íàæàë ñòðåëêó âïðàâî
x+=3
if keyboard_check(vk_right)
direction=-90
if keyboard_check(vk_up) // Åñëè èãðîê íàæàë ñòðåëêó ââåðõ
y-=3
if keyboard_check(vk_up)
direction=180
if keyboard_check(vk_down) // Åñëè èãðîê íàæàë ñòðåëêó âíèç
y+=3
if keyboard_check(vk_down)
direction=0
Нужно исключить движение по диагонали,что бы танк ездил только вправо,и влево.
Знаю что можно к каждой кнопке чекать нажатие других кнопок и не давать ему двигатся в две стороны.
Но это тоже не вариант.
Через кнопки(кей прессед,кей релисэд) очень сильно лагает.


Один терранозавр - это 1024 гиганозавра, или 1048576 меганозавров.
Java/Kotlin, C#, C++.
Android разработчик. Инженер-программист программного обеспечения информационной безопасности мобильных систем.
TLTДата: Понедельник, 16 Мая 2016, 20:36 | Сообщение # 2
Сейчас нет на сайте
Переписать и сделать на выбор 4 кейса.

Нажал на кнопку вверх - выбран кейс 1, в котором прописано движение вверх, и т.д. Так не будет возможности выбрать сразу несколько кейсов, и игрок не будет двигаться по сумарным данным.


Дао, выраженное словами, не есть истинное Дао.
URGINSANДата: Понедельник, 16 Мая 2016, 22:53 | Сообщение # 3
почти ветеран
Сейчас нет на сайте
Minskii, как вариант что то типа:
Код

if (keyboard_check(vk_left)){
y = y_previous;
x-=3;
}
if (keyboard_check(vk_up)){
x = x_previous;
y-=3;
}

Попробуй, думаю идея ясна. Просто при нажатии кнопки делай так, чтобы двигаться по другой оси танк не мог.

Либо, второй вариант использовать переменную заглушку.

Код

if (keyboard_check(vk_left)){
can_move = 1;
x-=3;
}
if (keyboard_check_released(vk_left)){
can_move = 0;
}
if (keyboard_check(vk_up) && can_move == 0){
y-=3;
}

То есть, есть переменная запрещающая двигаться не туда, когда у нас нажата не та кнопка. Грубо говоря так.


Я на драйве

Сообщение отредактировал URGINSAN - Понедельник, 16 Мая 2016, 23:06
TLTДата: Вторник, 17 Мая 2016, 16:36 | Сообщение # 4
Сейчас нет на сайте
Цитата
А как вобщем-то кейсы делать то? Нигде не нашёл инфы такой


не знаю как там на GML, но суть такова:

Делаешь функцию, например ControlEngine. Далее делаешь кейс с вариантами положений. Примерно так (условный код на Байсике привожу):

Код
'если выбран кейс 0 (он по умолчанию выбран)
if ControlEngine=0 then
Сдвиг спрайта=СТОП.
если нажал ВНИЗ то ControlEngine=1
если нажал ВВЕРХ то ControlEngine=2
если нажал ВЛЕВО то ControlEngine=3
если нажал ВПРАВО то ControlEngine=4
end if

'если выбран кейс 1
if ControlEngine=1 then
Сдвиг спрайта=ВНИЗ.
если нажал ВНИЗ то ControlEngine=1
если нажал ВВЕРХ то ControlEngine=2
если нажал ВЛЕВО то ControlEngine=3
если нажал ВПРАВО то ControlEngine=4
end if

'если выбран кейс 2
if ControlEngine=2 then
Сдвиг спрайта=ВВЕРХ.
если нажал ВНИЗ то ControlEngine=1
если нажал ВВЕРХ то ControlEngine=2
если нажал ВЛЕВО то ControlEngine=3
если нажал ВПРАВО то ControlEngine=4
end if

'если выбран кейс 3
if ControlEngine=3 then
Сдвиг спрайта=ВЛЕВО.
если нажал ВНИЗ то ControlEngine=1
если нажал ВВЕРХ то ControlEngine=2
если нажал ВЛЕВО то ControlEngine=3
если нажал ВПРАВО то ControlEngine=4
end if

'если выбран кейс 4
if ControlEngine=4 then
Сдвиг спрайта=ВПРАВО.
если нажал ВНИЗ то ControlEngine=1
если нажал ВВЕРХ то ControlEngine=2
если нажал ВЛЕВО то ControlEngine=3
если нажал ВПРАВО то ControlEngine=4
end if


Код
    Select Case 5
  Case 0:
   locate 1,15: print "0"
  Exit Select
  Case 1:
   locate 1,15: print "1"
  Exit Select
  Case 2:
   locate 1,12: print "2"
  Exit Select
  Case 3:
   locate 1,15: print "3"
  Exit Select
  Case 4:
   locate 1,15: print "4"
  Exit Select
  Case 5:
   locate 1,15: print "5"
  Exit Select
    End Select


Дао, выраженное словами, не есть истинное Дао.
MinskiiДата: Вторник, 17 Мая 2016, 16:53 | Сообщение # 5
участник
Сейчас нет на сайте
TLT, Ммм,вроде понял,а вот GM коды мои не понимает)))Как вводится команда "здвиг спрайта=стоп"
Can_move=0?Или как?

if ControlEngine=0 then
can_move=0
if (keyboard_check(vk_left)) ControlEngine=1
if (keyboard_check(vk_up)) ControlEngine=2
if (keyboard_check(vk_right)) ControlEngine=3
if (keyboard_check(vk_down)) ControlEngine=4
end if

ошибка чё то в "end if"


Один терранозавр - это 1024 гиганозавра, или 1048576 меганозавров.
Java/Kotlin, C#, C++.
Android разработчик. Инженер-программист программного обеспечения информационной безопасности мобильных систем.


Сообщение отредактировал Minskii - Вторник, 17 Мая 2016, 16:54
TLTДата: Вторник, 17 Мая 2016, 20:12 | Сообщение # 6
Сейчас нет на сайте
Цитата Minskii ()
Ммм,вроде понял,а вот GM коды мои не понимает)))Как вводится команда "здвиг спрайта=стоп"Can_move=0?Или как?


В первом же посте есть этот код, типа:

Цитата
x-=3


См. свой код - там же уже реализовал смещение по координатам, как понимаю. Это твой код?

Я не спец по GML, я просто немного разбираюсь в программировании. Скинь мне свой шаблон для GM с имеющимся кодом движения, я гляну или кто-то ещё глянет, что там как сделать.

У тебя GM8 или GMS?


Дао, выраженное словами, не есть истинное Дао.
MinskiiДата: Среда, 18 Мая 2016, 15:36 | Сообщение # 7
участник
Сейчас нет на сайте
TLT, У меня gm8.1
http://rgho.st/7bMNq7MpV


Один терранозавр - это 1024 гиганозавра, или 1048576 меганозавров.
Java/Kotlin, C#, C++.
Android разработчик. Инженер-программист программного обеспечения информационной безопасности мобильных систем.
TLTДата: Среда, 18 Мая 2016, 18:46 | Сообщение # 8
Сейчас нет на сайте
Буду дома ночью - гляну... Ща нет под рукой.

Дао, выраженное словами, не есть истинное Дао.
URGINSANДата: Среда, 18 Мая 2016, 22:56 | Сообщение # 9
почти ветеран
Сейчас нет на сайте
Minskii, мой вариант как понимаю не подошел? happy

Я на драйве
TLTДата: Четверг, 19 Мая 2016, 00:39 | Сообщение # 10
Сейчас нет на сайте
Классика жанра! 100% нужно было в справке Кейсы смотреть, там 100% твой случай. Я сделал тебе код на GML:

Код
{
switch (keyboard_key)
    {
    case vk_left: // Если игрок нажал стрелку влево
//    case ord("A"): // Если игрок нажал стрелку A
    x-=3
    direction=180
       break;
    case vk_right: // Если игрок нажал стрелку вправо
//    case ord("D"): // Если игрок нажал стрелку D
    x+=3
    direction=0
       break;
    case vk_up: // Если игрок нажал стрелку вверх
//    case ord("W"): // Если игрок нажал стрелку W
    y-=3
    direction=90
       break;
    case vk_down: // Если игрок нажал стрелку вниз
//    case ord("S"): // Если игрок нажал стрелку S
    y+=3
    direction=-90
       break;
    }
}


Удали //, если нужно WASD продублировать.


Дао, выраженное словами, не есть истинное Дао.
MinskiiДата: Четверг, 19 Мая 2016, 14:01 | Сообщение # 11
участник
Сейчас нет на сайте
TLT, Огромные спасибы!Сам почему-то в справке кейсов не нашёл)))

Добавлено (19 мая 2016, 09:49)
---------------------------------------------
TLT, Вообще как надо код вошёл

Добавлено (19 мая 2016, 14:01)
---------------------------------------------
URGINSAN, ваш вариант хорош как вариант,но через кейсы получилось играбельнее.Спаксибо за инфу однако


Один терранозавр - это 1024 гиганозавра, или 1048576 меганозавров.
Java/Kotlin, C#, C++.
Android разработчик. Инженер-программист программного обеспечения информационной безопасности мобильных систем.
Форум игроделов » Конструкторы игр и лёгкие в освоении системы разработки игр » Game Maker » Проблема с передвижением танка. (Движение по диагонали.)
  • Страница 1 из 1
  • 1
Поиск:

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