Суббота, 16 Ноября 2024, 16:02

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
Вопрос - Ответ (Game Maker)
DinamoPowerДата: Воскресенье, 07 Декабря 2014, 15:16 | Сообщение # 5201
был не раз
Сейчас нет на сайте
Всем привет!
В инете нашел код для качественного платформера:
objPlayer = > Create
Код

//Set up some variables for certain speeds
walksp=4; //Walking speed (4 pixels per frame)
jumpsp=-14; //Jumping speed (negative because it goes up)
grav=1; //Gravity strength (usually a small value)
//These variables are actually used to move the player
hsp=0; //Horizontal speed
vsp=0; //Vertical speed
ground=1; //Whether the player is on the ground


objPlayer = > step
Код

//Keyboard constants
//We use these so we can just type the variables
//instead of "keyboard_check(*)"

KEY_RIGHT=keyboard_check(vk_right);
KEY_LEFT=keyboard_check(vk_left);
KEY_JUMP=keyboard_check_pressed(vk_up);    
//This one's for variable jump height:
KEY_FALL=keyboard_check_released(vk_up);
//Now check if the player pressed left or right and move
if (KEY_RIGHT)
{
      hsp=walksp; //Walk right
      image_xscale=1; //Face right
}
if (KEY_LEFT)
{
      hsp=-walksp; //Walk left
      image_xscale=-1; //Face left
}
//Stop moving when no keys are pressed
if (!KEY_RIGHT and !KEY_LEFT) hsp=0;
//Make sure we don't hit a wall
if (place_meeting(x+hsp,y,objBlock))
{
      //Move until contact with the wall
      if (hsp!=0)
         while (!place_meeting(x+sign(hsp),y,objBlock))
            x+=sign(hsp);
      hsp=0;
}
//Because we don't use hspeed, we got to move ourselves
x+=hsp;
//Now for vertical motion (jumping and falling)
//Is the player in the air?
if (place_meeting(x,y+1,objBlock)) grounded=1;
else grounded=0;
//Jump with the up key when on the ground
if (KEY_JUMP and grounded)
{
      vsp=jumpsp;
}
//If we're in air moving up and jump key is released, we remove
//upward motion (so we fall and get variable jump height)
if (KEY_FALL and !grounded and vsp<-1) vsp=-1;
//Fall with gravity
if (!grounded) vsp+=grav;
//Now it's more complicated.
//When hitting the ceiling, vertical speed must stop.
//The if statement says, "if we hit the ceiling and are moving up"    
if (place_meeting(x,y+vsp,objBlock) && vsp<0)
{
      //We must move up until contact with the ceiling
      while (!place_meeting(x,y+sign(vsp),objBlock)) y+=sign(vsp);
      vsp=0;
}
//But if we are moving down and hit the floor, we have to land
if (place_meeting(x,y+vsp,objBlock) and vsp>0)
{
      //Move so we hit the ground
      var cc;
      cc=vsp+1; //A counter, so we don't get an infinite loop
      //Move down until we hit the floor
      while (!place_meeting(x,y+1,objBlock) and cc>=0) y+=1;
      //Now ground the player
      grounded=1;
      vsp=0;
}
//Again, we're not using vspeed, so we have to move ourselves
y+=vsp;
//Animation - check what our sprite's state is and set accordingly
if (grounded) //If we're grounded
{
      if (hsp==0) //Then if we're not moving, change to stand sprite
      {
         sprite_index=sprPlayerStand;
         image_speed=0; //Don't animate
      }
      else //But if we are moving, change to walk sprite
      {
         //Reset image index if just now switching to walk sprite
         if (sprite_index!=sprPlayerWalk) image_index=0;
         sprite_index=sprPlayerWalk;
         image_speed=0.5; //Change this to whatever works for you
      }
}
else //If we're not grounded, change to in air sprite
{
      sprite_index=sprPlayerInAir;
      image_speed=0; //Don't animate
}

На всякий случай - objBlock - солид, блок., sprPlayerInAir - анимация в воздухе., sprPlayerStand - анимация на месте., sprPlayerWalk - анимация движения.
(это не "усовершенствованный" мною код, а оригинал)
Потом добавил в create переменную Motion(не знаю почему я её так назвал), она отвечает за выключение действия кнопок KEY_RIGHT, KEY_LEFT, KEY_JUMP. То есть если motion=1 - персонаж может двигаться, если motion=0 - не может.
И вот эта переменная мне понадобилась. Суть: если персонаж дотрагивается до определенного объекта, при нажатии на кнопку E (Я её добавил и назвал KEY_ACTION), он не сможет определенное время двигаться и проигрывается анимация, а потом снова сможет выполнять действия.
Написал я этот код вот так:
Код

if place_meeting(x,y,objVirtyHelmet) // а это объект к которому нужно дотронуться    
       {
       if (KEY_ACTION)
       {
       motion=0
       sprite_index=sprHelmetAnim // это нужная анимация
       alarm[0]=30
       }       
       }

В результате - нужное время двигаться не могу(то есть все верно), а анимация никак не проигрывается, подскажите, что делать? (Если что, могу скинуть полный код, но с моими дополнениями)(возможно неясно изложил проблему)


Сообщение отредактировал DinamoPower - Воскресенье, 07 Декабря 2014, 15:27
jayreckДата: Воскресенье, 07 Декабря 2014, 20:37 | Сообщение # 5202
участник
Сейчас нет на сайте
Цитата DinamoPower ()

Код
if place_meeting(x,y,objVirtyHelmet) // а это объект к которому нужно дотронуться
{
if (KEY_ACTION)
{
motion=0
sprite_index=sprHelmetAnim // это нужная анимация
image_speed=0.5  // скорость анимации то забыли выставить
alarm[0]=30
}
}


g-null-dc
Ippolit - тамагоч
немного моего пиксель арта


Сообщение отредактировал jayreck - Воскресенье, 07 Декабря 2014, 20:38
DinamoPowerДата: Воскресенье, 07 Декабря 2014, 21:05 | Сообщение # 5203
был не раз
Сейчас нет на сайте
jayreck, ах да забыл сказать, скорость ставил, не помогало.(в create скорость изначально 1 стоит, ничего не менял) Дело в том, что лично мое предположение такое: из-за того, что objPlayer соприкасается с землей(objBlock), у него, в неподвижном состоянии стоит спрайт/анимация sprPlayerStand и тем самым другая анимация не воспроизводится, возможно что-то другое.
jayreckДата: Воскресенье, 07 Декабря 2014, 21:31 | Сообщение # 5204
участник
Сейчас нет на сайте
DinamoPower, а ну тогда в objBlock надо запилить условие чтобы если игрок рядом с objVirtyHelmet и нажал KEY_ACTION то image_speed=0.5 и sprite_index=sprHelmetAnim а после окончания sprHelmetAnim анимации меняем на неподвижный спрайт

g-null-dc
Ippolit - тамагоч
немного моего пиксель арта
DinamoPowerДата: Воскресенье, 07 Декабря 2014, 21:58 | Сообщение # 5205
был не раз
Сейчас нет на сайте
jayreck, не помогло. Я думаю, стоит просто забить и пойти по более сложному пути: если игрок нажимает (KEY_ACTION) и при этом он рядом с objVirtyHelmet, появляется объект с той анимацией, которая нужна, он удаляется(игрок), а при завершении анимации в доп. объекте снова появляется игрок. Но я думаю, что есть наиболее простой способ(чтобы проиграть эту анимацию) и не такой тупой, но я не знаю в чем проблема ...

Добавлено (07 декабря 2014, 21:58)
---------------------------------------------
Точней, если присмотреться, то за долю секунды, если кнопка движения(KEY_RIGHT) или (KEY_LEFT) зажаты и при этом нажата кнопка (KEY_ACTION) и если игрок рядом с objVirtyHelmet можно увидеть эту анимацию(если не менять код, а оставить как было). Из этого следует вывод, что что-то мешает этой анимации


Сообщение отредактировал DinamoPower - Воскресенье, 07 Декабря 2014, 22:24
AnthemДата: Воскресенье, 07 Декабря 2014, 22:42 | Сообщение # 5206
Д'Артаньян
Сейчас нет на сайте
DinamoPower, alarm срабатывает в Step постоянно, после такого кода ничего уже не запустится

Текстовый контент для вашей игры (бесплатно)
Сценарист, геймдизайнер для Вашей игры
DinamoPowerДата: Понедельник, 08 Декабря 2014, 16:25 | Сообщение # 5207
был не раз
Сейчас нет на сайте
Цитата Anthem ()
после такого кода ничего уже не запустится

А как сделать так, чтобы и анимация была и alarm работал?
AnthemДата: Понедельник, 08 Декабря 2014, 16:57 | Сообщение # 5208
Д'Артаньян
Сейчас нет на сайте
Цитата DinamoPower ()
А как сделать так, чтобы и анимация была и alarm работал?
Будильник работает в create и других будильниках. В Степ его можно заменить на переменную с таким кодом:
переменная += 1/room_speed , если не сработает, то переменная += 0.03


Текстовый контент для вашей игры (бесплатно)
Сценарист, геймдизайнер для Вашей игры
DinamoPowerДата: Понедельник, 08 Декабря 2014, 17:19 | Сообщение # 5209
был не раз
Сейчас нет на сайте
Anthem, даже без alarm'a анимация не хочет работать... Я походу уже разочаровался...
LunarPixelДата: Понедельник, 08 Декабря 2014, 17:23 | Сообщение # 5210
старожил
Сейчас нет на сайте
Alarm тут вообще не при делах ведь. Все с ним нормально, он включается при нажатии кнопки один раз и не повторится, пока кнопка снова не будет нажата.

DinamoPower, сильно не вникал, но попробуй обернуть смену спрайта на sprPlayerStand в условие:

Код
if alarm[0]=-1
{
sprite_index=sprPlayerStand;  
image_speed=0; //Don't animate  
}


DinamoPowerДата: Понедельник, 08 Декабря 2014, 17:56 | Сообщение # 5211
был не раз
Сейчас нет на сайте
LunarPixel, а откуда взялось
Цитата LunarPixel ()
alarm[0]=-1
? Я в коде такого не видел, на том месте где alarm[0]=-1 - (hsp==0). В любом случае уже пробовал вписывать смену спрайта в условие sprPlayerStand..
LunarPixelДата: Понедельник, 08 Декабря 2014, 18:00 | Сообщение # 5212
старожил
Сейчас нет на сайте
DinamoPower, ну у тебя же alarm[0] запускается. Alarm[0]=-1 означает, что будильник не запущен. Следовательно, меняем спрайт только если будильник не запущен. И не надо это условие вместо hsp==0 ставить, оно вложенным должно быть.

Короче говоря, просто выложи исходник, так быстрее будет. Может проблема вообще где-нибудь в другом месте.


DinamoPowerДата: Понедельник, 08 Декабря 2014, 18:08 | Сообщение # 5213
был не раз
Сейчас нет на сайте
LunarPixel, держите
Yandex.disk
LunarPixelДата: Понедельник, 08 Декабря 2014, 18:19 | Сообщение # 5214
старожил
Сейчас нет на сайте
DinamoPower, уж не знаю, как ты проверял, но достаточно было сделать то, что я написал выше и анимация одевания прекрасно работает.
http://rghost.ru/private/59492799/1f41b4c001e68a353426640ae36e383f


DinamoPowerДата: Понедельник, 08 Декабря 2014, 18:27 | Сообщение # 5215
был не раз
Сейчас нет на сайте
LunarPixel, похоже я что-то неправильно делал, в любом случае спасибо!
jayreckДата: Понедельник, 08 Декабря 2014, 18:59 | Сообщение # 5216
участник
Сейчас нет на сайте
оу, парни тут проблемка объявилась при попытке компиляции на андроид, sdk в норме, "exe" создаёт, на теле тестировать даёт, а вот компилировать не хочет


----------------------

2 дня, 2 грёбанных дня, куча попыток перестановки sdk и всё напрастно - проблема была в gamemaker_studio\android\runner\android_manifest.xml там строчку 19 подредактировать надо было, всё работает, вроде


g-null-dc
Ippolit - тамагоч
немного моего пиксель арта


Сообщение отредактировал jayreck - Понедельник, 08 Декабря 2014, 21:28
DinamoPowerДата: Вторник, 09 Декабря 2014, 17:34 | Сообщение # 5217
был не раз
Сейчас нет на сайте
Кто может посоветовать пример, где (к примеру) после настройки персонажа(цвет волос, форма тела), при переходе в другую комнату, там где этот персонаж есть, все его характеристики оставались? Меня интересуют именно процесс сохранения данных между комнатах. Я возможно неправильно изъяснился.
Fill_FreemanДата: Вторник, 09 Декабря 2014, 17:56 | Сообщение # 5218
почетный гость
Сейчас нет на сайте
DinamoPower, чтобы объект сохранялся при переходе из комнаты в комнату есть галочка "persistent". См справку.

t111Дата: Суббота, 13 Декабря 2014, 02:33 | Сообщение # 5219
почетный гость
Сейчас нет на сайте
Ребят, возможно я сейчас спрошу что то страшное и невообразимое, но мне оочень надо. Помогите пожалуйста! Вобщем, задумал сделать пошаговую стратегию, ну типа как стратегия и тактика игра есть на андройде, так вот, как на гм сделать сетку, по которой бы передвигались фишки? Сетка-будь то гексы как в настольных играх, будь то карта мира, где фишки передвигаются по странам, неважно, мне главное принцип понять как сделать. И возможно ли? Просто, стратегии на гм-это дело этакое, мозги вскипят)))

как известно, встречают по
одежке, а провожают
uninstall'ом"

AnthemДата: Суббота, 13 Декабря 2014, 18:09 | Сообщение # 5220
Д'Артаньян
Сейчас нет на сайте
t111, таких примеров и уроков много. Ищи, скачивай, разбирайся. В ГМ есть даже функция движения по клеткам

Мой вопрос: как проще всего сделать затемнение экрана?


Текстовый контент для вашей игры (бесплатно)
Сценарист, геймдизайнер для Вашей игры
Поиск:

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