Воскресенье, 16 Декабря 2018, 19:26

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 2
  • 1
  • 2
  • »
Форум игроделов » Конструкторы игр и лёгкие в освоении системы разработки игр » Game Maker Studio » Движение в TBS (GMaker) (движение на 1-2.. (и больше) клетки)
Движение в TBS (GMaker)
KiteKatДата: Четверг, 22 Июня 2017, 13:49 | Сообщение # 1
почетный гость
Сейчас нет на сайте
Всем здравствуйте! Я новичок .
Я создаю игру и решаю все вопросы по мере их поступления. Вот и начинаю с шагов.
1) Персонаж (квадратик ) движется в разные стороны: и прямо и по диагонали... По средством кнопок клавиатуры.
Мне нужно сделать так, чтобы между ходом на клетку проходило какое-то время (секунда к примеру или три секунды)

Точнее опишу так: нажимая один раз на клавишу "вправо" нужно чтобы квадратик не "скользил" по сетке, а как бы двинулся рывком ТОЛЬКО на одну клеточку. При втором нажатии на на клавишу "вправо" ОПЯТЬ двинулся на одну клеточку.

2) Нужно сделать так, чтобы персонаж (квадратик) ходил на заданное ему количество шагов. ( например: одна клеточка за ход)

3) ну и... если вам не трудно. Собственно, как сделать так, чтобы можно было обозначить продолжение хода?
ну вот.. персонаж сходил на одну клеточку и больше не может... Как сделать так, чтобы нажав на опрделенную клавишу персонаж СНОВА стал ходить на одну клеточку? ( ну и далее по "кругу")
_________
Спасибо если сможете мне помочь :)
TLTДата: Пятница, 23 Июня 2017, 14:48 | Сообщение # 2
Сейчас нет на сайте
Цитата KiteKat ()
Я создаю игру и решаю все вопросы по мере их поступления. Вот и начинаю с шагов.

Ты создал 10+ тем за сутки - что-то много вопросов тебе поступает...

Цитата KiteKat ()
1) Персонаж (квадратик ) движется в разные стороны: и прямо и по диагонали... По средством кнопок клавиатуры.


Это основы GMS/GML и математики/программирования. Если ты не можешь две координаты X и Y изменить объекту по нажатию кнопки, то пиши пропало. У тебя, видимо, вообще жизненный опыт мал, что ты не знаешь, что такое координаты, т.к. ещё не проходил в школе. Как можно тебе объяснить, вместо твоих учителей и родителей объяснить, что в 2D пространстве объекты располагаются по системе координат (относительно чего-то или безотносительно-глобально): X - по горизонтали, Y - по вертикали. Чтобы объект сместился, то по действию просто меняешь циферки X/Y оного на нужный интервал.


Дао, выраженное словами, не есть истинное Дао.
KiteKatДата: Суббота, 01 Июля 2017, 23:52 | Сообщение # 3
почетный гость
Сейчас нет на сайте
Я тут немного запутался и не могу понять, как мне сделать ( добавить к коду существующему) так чтобы квадрат (юнит) шагал с задержкой на определённое количество клеток? Должно быть так: нажимаю вправо и он сдвинувшись на клетку останавливается, при нажатии ОПЯТЬ вправо он делает ход на клетку и останавливается. И как прописать чтобы он ходил на две клетки?

код вообще у меня такой:
if keyboard_check(vk_up)
{
y-=70
image_index=1
}
if keyboard_check(vk_down)
{
y+=70
image_index=2
}
if keyboard_check(vk_left)
{
x-=70
image_index=1
}
if keyboard_check(vk_right)
{
x+=70
image_index=2
}
ИнтернетДата: Воскресенье, 02 Июля 2017, 00:48 | Сообщение # 4
постоянный участник
Сейчас нет на сайте
Цитата KiteKat ()
на определённое количество клеток?

Создай массив и будет легко.
kletka[px,py]- где px - позиция квадратика по х (в сетке), а py - позиция квадратика по y (в сетке)


Сообщение отредактировал Интернет - Воскресенье, 02 Июля 2017, 00:49
vampir0305Дата: Воскресенье, 02 Июля 2017, 10:23 | Сообщение # 5
Unity C# Programmer
Сейчас нет на сайте
Замени везде
Код
keyboard_check
на
Код
keyboard_check_released
KiteKatДата: Понедельник, 03 Июля 2017, 00:51 | Сообщение # 6
почетный гость
Сейчас нет на сайте
vampir0305, спасибо! всё отлично получилось :)
Интернет, я много чего перепробовал, но у меня что-то ничего не получается :( я хоть и новичек, но руководствовался аналоговыми массивами, однако результата это не дало ...
МорриартеДата: Понедельник, 03 Июля 2017, 15:15 | Сообщение # 7
LINUX ФАНАТ
Сейчас нет на сайте
KiteKat, тебе подойдет эта функция.

Старый логин на сайте - Buran
KiteKatДата: Понедельник, 03 Июля 2017, 15:31 | Сообщение # 8
почетный гость
Сейчас нет на сайте
Морриарте, не подходит. смещение идет.
vampir0305Дата: Понедельник, 03 Июля 2017, 19:38 | Сообщение # 9
Unity C# Programmer
Сейчас нет на сайте
Так спрайт сделай по центру.
KiteKatДата: Понедельник, 03 Июля 2017, 21:59 | Сообщение # 10
почетный гость
Сейчас нет на сайте
спрайт и так по центру....
немного не в тему ( может и вообще не в тему), но у меня ПОЧЕМУ-ТО при залипании клавиш в прописке кода курсив становится жирным ( черным) и стирает впереди стоящие символы. Как можно исправить это дело?

и по существу, я хотел узнать: может ли работать такой код , сделанный по аналогии с убавление hp ? Но этот ход касается движения.
Я в последние дни много чего прочитал и сейчас просто есть по наработкам сомнения. Вообще хотелось бы узнать у вас , двигаюсь ли я в правильном направлении и что вы можете подсказать по этому коду?
move =x*2,y*2
x+=70

if move <=0
{
instance_deactivate_object(man);
}
1) движение у меня с остановками. значит: движение равно по координате икс помноженное на два и по координате игрик тоже помножено на два. координата икс и игрик у меня равны 70 пикселям. если движение меньше или равно нулю, то.. следует остановка.
...однако нужно куда-то и как-то вписать(прописать) вычитание движений. тут я запутался... если допустим в событии клавишы ( правая кнопка) в действии прописать код: move-=1
т.е. при нажатии ( а ход у меня с остановка) один раз на правую кнопку клавиши... движение будет на 1 меньше, заданного движения (move=x*2)
2) если это ( теоретически ) верно, то куда следует прописывать код? или части кода.. если по аналогии с hp то скорее заданное движение нужно вписать в create
move =x*2
x+=70

а остальную часть кода тогда.. в step?
if move <=0
{
instance_deactivate_object(man);
}

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

move=x*2

x+=70

if move <=0
{
instance_deactivate_object(man)
}
move-=1


Сообщение отредактировал KiteKat - Понедельник, 03 Июля 2017, 22:38
ИнтернетДата: Понедельник, 03 Июля 2017, 22:31 | Сообщение # 11
постоянный участник
Сейчас нет на сайте
Что за %)
Зачем деактивировать объект только ради его остановки?
Это, вот, интересно как работает?
Код
move=x*2
move=y*2
x=70
y=70
if move <=0
{
instance_deactivate_object(man)
}
move-=1


Код
ix=x*2
iy=y*2
move[ix,iy]=/нужное значение/


Сообщение отредактировал Интернет - Понедельник, 03 Июля 2017, 22:39
vampir0305Дата: Понедельник, 03 Июля 2017, 22:31 | Сообщение # 12
Unity C# Programmer
Сейчас нет на сайте
KiteKat, Ты вообще не понимаешь? Ты основы программирования хоть бы выучил. Вот так
Код
move=x*2,y*2
присваивать значение переменной нельзя.
Как это можно не знать.

Код
move=x*2
move=y*2

Тут ты вообще сначала записываешь в переменную move значение x*2, а потом в эту переменную записываешь значение y*2, то есть получается первое значение у тебя исчезает. Нужно для каждого значения свою отдельную переменную создавать.
Это самые основы программирования.


Сообщение отредактировал vampir0305 - Понедельник, 03 Июля 2017, 22:34
KiteKatДата: Вторник, 04 Июля 2017, 14:09 | Сообщение # 13
почетный гость
Сейчас нет на сайте
а нет, всё это неверно . И изначально я ввёл и вас и себя в заблуждение. на самом деле исходить нужно вот из чего: код на ход выглядит так:
if keyboard_check_pressed(vk_up)
{
y-=70
image_index=1
}
if keyboard_check_pressed(vk_down)
{
y+=70
image_index=2
}
if keyboard_check_pressed(vk_left)
{
x-=70
image_index=1
}
if keyboard_check_pressed(vk_right)
{
x+=70
image_index=2
}

значит нужно исходить не из размера клетки (которая в коде и не прописана НИ ГДЕ)и самой клетки и не из шага!, а... из того что прописано, т.е. из нажатия кнопки! Нужно как-то прописать, что если нажата 3 раза кнопка ( какая-либо из стрелок -вниз, вверх, влево, вправо) , то движение больше не сработает! А вот как это сделать я не понимаю...
нужно как-то прописать чтобы повторялось не событие, а действие (ограниченное кол-во раз) нажатие клавиши)


Сообщение отредактировал KiteKat - Вторник, 04 Июля 2017, 16:31
МорриартеДата: Вторник, 04 Июля 2017, 17:25 | Сообщение # 14
LINUX ФАНАТ
Сейчас нет на сайте
Цитата KiteKat ()
которая в коде и не прописана НИ ГДЕ

Что значит не прописано? В коде у тебя указано, что при нажатии на кнопку, объект перемещается на 70 пикселей.

Цитата KiteKat ()
Нужно как-то прописать, что если нажата 3 раза кнопка ( какая-либо из стрелок -вниз, вверх, влево, вправо) , то движение больше не сработает! А вот как это сделать я не понимаю...
нужно как-то прописать чтобы повторялось не событие, а действие (ограниченное кол-во раз) нажатие клавиши)

Вводишь переменную счетчика ходов, например turn = 3. После каждого хода проверяешь, чтобы она была больше 0 и уменьшаешь ее. Если она 0, то при нажатии определенной клавиши, восстанавливай ходы. Для всего этого тебе понадобится только условный оператор if, которым ты уже судя по коду умеешь пользоваться. Все это нужно обернуть в тот код что у тебя выше, чтобы персонаж не перемещался, если ходов недостаточно.


Старый логин на сайте - Buran


Сообщение отредактировал Морриарте - Вторник, 04 Июля 2017, 17:30
KiteKatДата: Вторник, 04 Июля 2017, 23:33 | Сообщение # 15
почетный гость
Сейчас нет на сайте
я сегодня сидел уже думал над этим...
И нашел как обозначить ширину и высоту ячейки:
cell_width=70
cell_height=70
Дело в том что, если я буду использовать прописанные 70 пикселей в ходе, ( ячейка не прописана была) то получилось бы что юнит сдвигался бы в стороны в разные. (это уже было проверено)
на счет остального буду думать...

Добавлено (04 июля 2017, 23:12)
---------------------------------------------
Написал код. Но внизу мне пишет, что какой-то из операторов пропущен (assignment operator expected). Сижу думаю: какой? Есть у вас мысли?

move=false;
can_move=false;
cell_width=70
cell_heigth=70
movement=cell;
movement_points_max=3;
movement_points=movements_points_max;
if keyboard_check_pressed(vk_up)
{
movement_points-=1
}
if movement_points=0
{
move=false;
}
if can_move and movement_points>0
{
move=true;
stop=false;
}
if keyboard_check_pressed(vk_space)
{
movement_points_max
}

Добавлено (04 июля 2017, 23:17)
---------------------------------------------
Странно, кажется нашел... в последней строке добавил "=3". Однако я не понимаю, почему программа писала что первый вариант с потерянным оператором? ведь movement_points_max уже ранее было учтено и прописано!

move=false;
can_move=false;
cell_width=70
cell_heigth=70
movement=cell;
movement_points_max=3;
movement_points=movements_points_max;
if keyboard_check_pressed(vk_up)
{
movement_points-=1
}
if movement_points=0
{
move=false;
}
if can_move and movement_points>0
{
move=true;
stop=false;
}
if keyboard_check_pressed(vk_space)
{
movement_points=3
}

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

Всё это прописало в событии step/ Но я не знаю правильно ли туда всё нужно прописывать? помогите советом.

Добавлено (04 июля 2017, 23:20)
---------------------------------------------
попробовал: пишет...

___________________________________________
ERROR in
action number 3
of Step Event
for object man:

Error in code at line 5:
movement=cell;
^
at position 11: Unknown variable cell

Как же может быть что переменная "ячейка" неизвестна, если я ее прописывал??

Добавлено (04 июля 2017, 23:29)
---------------------------------------------
исправил кое-что в коде и теперь не ругается, однако... код не работает :(

Что я не так прописываю? подскажите, пожалста!

вот окончательный код:
move=false;
can_move=false;
cell=70
movement=cell;
movement_point_max=3;
movement_point=movement_point_max;
if keyboard_check_pressed(vk_up)
{
movement_point-=1
}
if movement_point=0
{
move=false;
}
if can_move and movement_point>0
{
move=true;
stop=false;
}
if keyboard_check_pressed(vk_space)
{
movement_point=3
}
Я прописывал это всё в step

Добавлено (04 июля 2017, 23:33)
---------------------------------------------
Морриарте, то что вы во втором абзаце прописали, если честно я даже сообразить не могу как и что. Можете обрисовать? Я как бы с кодами вообще путаюсь пока...

Сообщение отредактировал KiteKat - Вторник, 04 Июля 2017, 23:18
ИнтернетДата: Среда, 05 Июля 2017, 01:20 | Сообщение # 16
постоянный участник
Сейчас нет на сайте
Вот, решит твои проблемы.
Код
if (kolis<3)//ограничение шагов
       {
  if ogran=1//ограничение нажатия
           {
switch(keyboard_key)
              {
case vk_right:    {x+=70 ogran=0 }break
case vk_left:      {x-=70 ogran=0 }break
case vk_up:       {y-=70 ogran=0 }break
case vk_down:   {y+=70 ogran=0 }break
              }
          }
     }
if ogran=0 and keyboard_check_released(keyboard_key)
             {
kolis++
alarm[0]=5//задержка перед следующим ходом
ogran=2
             }


Сообщение отредактировал Интернет - Среда, 05 Июля 2017, 01:32
KiteKatДата: Среда, 05 Июля 2017, 13:45 | Сообщение # 17
почетный гость
Сейчас нет на сайте
Интернет, в 16 позиции не найден оператор... kolis++

и вообще пишет:

___________________________________________
ERROR in
action number 3
of Step Event
for object man:

Error in code at line 1:
if (kolis<3)//ограничение шагов
^
at position 5: Unknown variable kolis

Добавлено (05 июля 2017, 13:45)
---------------------------------------------
вот исходник, кто решит проблему, тому +

я уже ничего не понимаю.... http://rgho.st/7XYJCx4dr

Сообщение отредактировал KiteKat - Среда, 05 Июля 2017, 12:31
ИнтернетДата: Среда, 05 Июля 2017, 14:00 | Сообщение # 18
постоянный участник
Сейчас нет на сайте
Мда........ Вопросов по проекту много, но задам только 1.
Зачем скорость комнаты на 5???
Вот
Дальше сам додумаешь.
Цитата
Unknown variable kolis

Неужели сам не понял?


Сообщение отредактировал Интернет - Среда, 05 Июля 2017, 14:09
KiteKatДата: Среда, 05 Июля 2017, 14:58 | Сообщение # 19
почетный гость
Сейчас нет на сайте
можешь кинуть файл в мейкере версии 8.0 ? устанавливал раньше 8.1 ловил вирусы. нормальной чистой версии не нашел. так что пользуюсь более устаревшей

скорость комнаты я не устанавливал, видимо не обратил внимания и задал случайно значение


Сообщение отредактировал KiteKat - Среда, 05 Июля 2017, 15:02
ИнтернетДата: Среда, 05 Июля 2017, 15:16 | Сообщение # 20
постоянный участник
Сейчас нет на сайте
Цитата KiteKat ()
мейкере версии 8.0 ?

Нету
Форум игроделов » Конструкторы игр и лёгкие в освоении системы разработки игр » Game Maker Studio » Движение в TBS (GMaker) (движение на 1-2.. (и больше) клетки)
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

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