Вопрос - Ответ (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, таких примеров и уроков много. Ищи, скачивай, разбирайся. В ГМ есть даже функция движения по клеткам
Мой вопрос: как проще всего сделать затемнение экрана?
Текстовый контент для вашей игры (бесплатно) Сценарист, геймдизайнер для Вашей игры
|
|
| |
|