Вопросы от Bercut - Проблема - решение. GML и прочее. - Разработка игр на Game Maker (Simple Mode) - Форум Game Maker. Разработка игр.
Здравствуй Гость | Перейти на сайт

Главная | Форум | Регистрация | Войти
gmaker.net ;) [ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 111231011»
Форум Game Maker. Разработка игр. » Разработка игр на Game Maker (Simple Mode) » Проблема - решение. GML и прочее. » Вопросы от Bercut (все адекватно...)
Вопросы от Bercut
Bercut Дата: Вторник, 20.10.2009, 21:50 | Сообщение # 1
Болтун
Группа: Проверенные
Сообщений: 197
Статус: Offline
Здравствуйте.
Делаю платформер.
Столкнулся с проблемой столкновения и рассчёта пикселей.
Бегает по платформе нормально, а вот когда прыгаешь, иногда, точнее
частенько, персонаж проваливается.

Пожалуйста помогите решить проблему.
Собственно какие надо использовать спрайты и как использовать сетку.

P.S.:
Поиск использовал, но ничего дельного не нашёл.
Просто нужно уловить суть этой проблемы.

Добавлено (20.10.2009, 21:50)
---------------------------------------------
Странно, вроде форум создан для общения, обменом опыта и помощи, и т.д.
Или все вымерли?

Прикрепления: 6219481.png(4Kb) · 3675376.png(4Kb)


Fast, like fire!

Сообщение отредактировал Bercut - Вторник, 20.10.2009, 21:03
 
Йакуд Дата: Вторник, 20.10.2009, 22:29 | Сообщение # 2
Хрен заткнешь
Группа: Проверенные
Сообщений: 492
Статус: Offline
Дык никто же тут не сидит 24 часа в сутки... dry

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



Второе рождение .blanco
 
WfalconW Дата: Среда, 21.10.2009, 17:47 | Сообщение # 3
Каждый 5й пост мой
Группа: Страж
Сообщений: 1686
Статус: Offline
Bercut,
Quote
Пожалуйста помогите решить проблему.
Собственно какие надо использовать спрайты и как использовать сетку.

P.S.:
Поиск использовал, но ничего дельного не нашёл.
Просто нужно уловить суть этой проблемы.

Код гравитации или степа, у игрока покажи.
И желательно ещё перемещение влево и вправо.

Но всё же быстрее тебе помогут:

Quote
Ты можешь исходник выложи...

biggrin

Quote
Странно, вроде форум создан для общения, обменом опыта и помощи, и т.д.
Или все вымерли?

На самом деле форум очень даже не вымерший. Просто тут часто сидит только определённая группа людей и в определённое время, поэтому сразу же ответить просто не возможно))) Уж если даже я только сейчас увидел тему...


wfalconw.asuscomm.com - мой сервер мейнкрафта. Работает не 24/7
Жертва родины, блог разработки:
http://wfalconw.livejournal.com/
 
Ninja Дата: Среда, 21.10.2009, 18:22 | Сообщение # 4
Хоть палкой гони
Группа: Проверенные
Сообщений: 683
Статус: Offline
вроде такая проблема появляется, если объекту не сделать маску, но точно уже не помню


Oh, my God! You kill Kenny! You bastard!
 
FIXMAX Дата: Среда, 21.10.2009, 18:48 | Сообщение # 5
Болтун
Группа: Пользователь
Сообщений: 166
Статус: Offline
Наверняка Ninja прав, я не видел исходники, но предполагаю что из-за отсутствия маски, за маску принематся спрайт, а если он анимированный, то выходит что пока игрок не столкнется с землей спрайт "с подогнутыми ногами", а когда прикоснется к земле становиться в полный рост и получается что ноги в земле, а это столкновение и двигаться он уже не может.
Так что просто сделай маску, которая по размеру равна стоящему на месте игроку. И обязательно сделай её прямоугольной, это может избавить тебя от той же проблемы, при столкновении со стеной.


http://bird-parrots.ru/ - Попугаи

Сообщение отредактировал FIXMAX - Среда, 21.10.2009, 18:51
 
DragonSkiN Дата: Среда, 21.10.2009, 19:03 | Сообщение # 6
Всех уже задолбал
Группа: Страж
Сообщений: 1180
Статус: Offline
Quote (FIXMAX)
И обязательно сделай её прямоугольной

не легче тогда отключить точную проверку столкновений? wink


http://gamegraphycs.do.am/ - сайт о 2D графике
http://dragonskin.ath.cx:777/- доступ по хттп к сборнику ресурсов для игр
 
FIXMAX Дата: Среда, 21.10.2009, 19:10 | Сообщение # 7
Болтун
Группа: Пользователь
Сообщений: 166
Статус: Offline
DragonSkiN это может не помочь. Я точно не знаю какую маску подставляет ГМ при каждом кадре, если она соответствует всегда первому кадру, то поможет, а если каждому кадру по по его размерам, то ничего не измениться и игрок будет проваливать.
Но конечно лучше, для начала, убрать галочку точной проверки столкновений и посмотреть что получиться, а если уж нет, тогда делать маску (хотя "делать" это громко сказано).


http://bird-parrots.ru/ - Попугаи
 
DragonSkiN Дата: Среда, 21.10.2009, 19:33 | Сообщение # 8
Всех уже задолбал
Группа: Страж
Сообщений: 1180
Статус: Offline
не пробовал настраивать origin у спрайта? я например ставлю эту точку (для подобных платформеров)
Origin(приметная точка по Х, высота спрайта - 1)
в качестве приметной точки беру приблизительный центр масс персонажа.

обычно это сильно снижает возможность провала.

Добавлено (21.10.2009, 19:33)
---------------------------------------------

Quote (Bercut)
Собственно какие надо использовать спрайты и как использовать сетку.

спрайты любые.
сетка? при чем тут сетка? (может я не в теме?)


http://gamegraphycs.do.am/ - сайт о 2D графике
http://dragonskin.ath.cx:777/- доступ по хттп к сборнику ресурсов для игр


Сообщение отредактировал DragonSkiN - Среда, 21.10.2009, 19:31
 
Bercut Дата: Вторник, 27.10.2009, 21:33 | Сообщение # 9
Болтун
Группа: Проверенные
Сообщений: 197
Статус: Offline
Огромное спасибо всем!
Разобрался.
Проблемы была в точном просчёте пикселей.
Задача решилась использованием маски.
Замечательно, что форум всё-таки живой!

Добавлено (27.10.2009, 21:33)
---------------------------------------------
Далее пошло поехало, для разных спрайтов одной маски не хватило, ибо выглядит неочень.
Например, если ипользовать одну маску более сжатый спрайт, будет как бы висет в воздухе.
Решил делать проверку по x,y, bbox_right, bbox_left, bbox_bottom, bbox_top (где bbox переменные содержащие
координаты краев маски для определённого спрайта).
Собственно, маска каждая своя.
Так вот как ни крути не получается сделать нормальное столкновение, по-любому есть глюки.
Прощу помощи у бывалых.
Выкладываю исходник и прошу разъяснить мне принцип столкновений, а точнее как бы всё это провернуть.
А взамен, могу подарить аккаунт на бетта-тест Игры http://www.heroesofnewerth.ru/

Исходник:
Test



Fast, like fire!
 
Wertolet Дата: Вторник, 27.10.2009, 21:40 | Сообщение # 10
Хоть палкой гони
Группа: Проверенные
Сообщений: 781
Статус: Offline
Bercut, используй collision_rectangle(x-sw/2, y+sh/2, x+sw/2, y+sh/2+vspeed, o_wall, false,true)
где sw - Sprite Width (Ширина текушего спрайта)
sh - Sprite Height (Высота текушего спрайта)
o_wall - родительский объект всех твёрдых объектов.
Пример (для персонажа 32х64):
Code
if collision_rectangle(x-16, y+32, x+16, y+32+vspeed, o_wall, false,true) // проверяем естьли столкновение...
   {
    vspeed = 0; //Если да, то останавливаем падение.
   }
    else
   {
    vspeed += 0.1;// Иначе ускоряем падение.
   }

P.S. исходник не смотрел...




Сообщение отредактировал Wertolet - Вторник, 27.10.2009, 21:41
 
Bercut Дата: Вторник, 27.10.2009, 21:58 | Сообщение # 11
Болтун
Группа: Проверенные
Сообщений: 197
Статус: Offline
Quote (Wertolet)
Bercut, используй collision_rectangle(x-sw/2, y+sh/2, x+sw/2, y+sh/2+vspeed, o_wall, false,true) где sw - Sprite Width (Ширина текушего спрайта) sh - Sprite Height (Высота текушего спрайта) o_wall - родительский объект всех твёрдых объектов. Пример (для персонажа 32х64): Codeif collision_rectangle(x-16, y+32, x+16, y+32+vspeed, o_wall, false,true) // проверяем естьли столкновение...    {     vspeed = 0; //Если да, то останавливаем падение.    }     else    {     vspeed += 0.1;// Иначе ускоряем падение.    } P.S. исходник не смотрел...

Увы, отказывается нормально работать.
Этот код нужно в событие шага?



Fast, like fire!
 
Wertolet Дата: Вторник, 27.10.2009, 22:12 | Сообщение # 12
Хоть палкой гони
Группа: Проверенные
Сообщений: 781
Статус: Offline
Да.
Шас посмотрю исходник и точно скажу как у тебя.

Добавлено (27.10.2009, 22:11)
---------------------------------------------
Твой случай(См. Начало и в конце, где прыжок. И я убрал гравитацию. Сделав свою.):

Code
if place_empty (x,bbox_bottom) then
  {
  if collision_rectangle(x-16, y+32, x+16, y+28+vspeed, block, false,true) // проверяем естьли столкновение...  
    {  
     vspeed = 0; //Если да, то останавливаем падение.  
    }  
     else  
    {  
     vspeed += 0.5;// Иначе ускоряем падение.  Тут надо побаловатся дабы добится нужной скорости падения.
    }
   land = 0;
   if kn then
   {
   if keyboard_check(vk_left) then
      { kn = false;
       look = 1;}
   }
   if kn then
   {     
   if keyboard_check(vk_right) then
      { kn = false;
       look = 3;}
   }
   if look = 1 then
   { sprite_index = jump_left;
    x -=7;}
   if look = 3 then
   { sprite_index = jump_right;
    x +=7;}
    }
   else
    {land = 1;
     jump = 0;
     max_step = sprite_height - (bbox_bottom- bbox_top)- 1;
     if keyboard_check(vk_left) then
      { look = 1;
        sprite_index = pl_left;
        image_speed = 0.5;
        move_contact_solid(180,10);}
         
     if keyboard_check(vk_right) then
      { look = 3;
        sprite_index = pl_right;
        image_speed = 0.5;
        move_contact_solid(0,10);}
         
     if keyboard_check(vk_space) then
     if jump<1 then
     { kn= true;
      vspeed=-8; //Тут тоже надо побаловатся.
      look = 0;
      jump+=1;}
       
      if keyboard_check_released (vk_left) then
      sprite_index = pl_spr_stay_left;
       
      if keyboard_check_released (vk_right) then
      sprite_index = pl_spr_stay_right;
   
    }
     
if vspeed > 12
  {vspeed = 12;}

if y > 480 then
room_restart();

Добавлено (27.10.2009, 22:12)
---------------------------------------------
Ах да, объекту BOX сделай родителя объект BLOCK.



 
Bercut Дата: Вторник, 27.10.2009, 22:36 | Сообщение # 13
Болтун
Группа: Проверенные
Сообщений: 197
Статус: Offline
Спасибо, движение стало более качественное, но проверка столкновений тоже самое, в смысле теже глюки. Т_Т
Прикрепления: 6166468.png(31Kb)


Fast, like fire!
 
Wertolet Дата: Вторник, 27.10.2009, 22:41 | Сообщение # 14
Хоть палкой гони
Группа: Проверенные
Сообщений: 781
Статус: Offline
Bercut, измени x+16 и x -16 на x+12 и на x-12 (в collision_renctagle, можно ещё меньше.)


 
Bercut Дата: Вторник, 27.10.2009, 22:54 | Сообщение # 15
Болтун
Группа: Проверенные
Сообщений: 197
Статус: Offline
Блин, никак не пойму, что за баг. Т_Т

Делаю меньше, всё равно баги.

Прикрепления: 9413234.png(9Kb)


Fast, like fire!

Сообщение отредактировал Bercut - Вторник, 27.10.2009, 22:56
 
Wertolet Дата: Вторник, 27.10.2009, 23:05 | Сообщение # 16
Хоть палкой гони
Группа: Проверенные
Сообщений: 781
Статус: Offline
Пропушена скобка ')'

Добавлено (27.10.2009, 23:05)
---------------------------------------------
Вот тут: (x-((bbox...)/2)) в двух местах.





Сообщение отредактировал Wertolet - Вторник, 27.10.2009, 23:05
 
Bercut Дата: Вторник, 27.10.2009, 23:54 | Сообщение # 17
Болтун
Группа: Проверенные
Сообщений: 197
Статус: Offline
Вопрос ещё актуален.


Fast, like fire!
 
FIXMAX Дата: Среда, 28.10.2009, 00:06 | Сообщение # 18
Болтун
Группа: Пользователь
Сообщений: 166
Статус: Offline
Как же тебе показать...
и код переписывать лень
в общем выложи код со скрина в виде текста покажу где пропустил.
Wertolet, неправильно, закрывать скобку колизиума нужно в конце(как и сделано)


http://bird-parrots.ru/ - Попугаи
 
Bercut Дата: Среда, 28.10.2009, 00:16 | Сообщение # 19
Болтун
Группа: Проверенные
Сообщений: 197
Статус: Offline
Quote (FIXMAX)
Как же тебе показать... и код переписывать лень в общем выложи код со скрина в виде текста покажу где пропустил.

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



Fast, like fire!
 
Wertolet Дата: Среда, 28.10.2009, 07:36 | Сообщение # 20
Хоть палкой гони
Группа: Проверенные
Сообщений: 781
Статус: Offline
FIXMAX, =) непосмотрел что-то...
А у второго то икса скобки то там нет =)

Добавлено (28.10.2009, 07:36)
---------------------------------------------
Bercut, а что не работает?



 
Форум Game Maker. Разработка игр. » Разработка игр на Game Maker (Simple Mode) » Проблема - решение. GML и прочее. » Вопросы от Bercut (все адекватно...)
Страница 1 из 111231011»
Поиск:



Сообщество Gmaker.SU 2005-2012
Используются технологии uCoz
Простой вход