| Вопросы от Bercut |
|
Bercut
| Дата: Вторник, 20.10.2009, 21:50 | Сообщение # 1 |
Болтун
Группа: Проверенные
Сообщений: 197
Статус: Offline
|
Здравствуйте. Делаю платформер. Столкнулся с проблемой столкновения и рассчёта пикселей. Бегает по платформе нормально, а вот когда прыгаешь, иногда, точнее частенько, персонаж проваливается. Пожалуйста помогите решить проблему. Собственно какие надо использовать спрайты и как использовать сетку. P.S.: Поиск использовал, но ничего дельного не нашёл. Просто нужно уловить суть этой проблемы. Добавлено (20.10.2009, 21:50) --------------------------------------------- Странно, вроде форум создан для общения, обменом опыта и помощи, и т.д. Или все вымерли?
Fast, like fire!
Сообщение отредактировал Bercut - Вторник, 20.10.2009, 21:03 |
| |
| | |
|
Йакуд
| Дата: Вторник, 20.10.2009, 22:29 | Сообщение # 2 |
Хрен заткнешь
Группа: Проверенные
Сообщений: 492
Статус: Offline
|
Дык никто же тут не сидит 24 часа в сутки... Ты можешь исходник выложи... А то так совершенно непонятно, почему у тебя так...
Второе рождение .blanco
|
| |
| | |
|
WfalconW
| Дата: Среда, 21.10.2009, 17:47 | Сообщение # 3 |
Каждый 5й пост мой
Группа: Страж
Сообщений: 1686
Статус: Offline
|
Bercut, Quote Пожалуйста помогите решить проблему. Собственно какие надо использовать спрайты и как использовать сетку. P.S.: Поиск использовал, но ничего дельного не нашёл. Просто нужно уловить суть этой проблемы. Код гравитации или степа, у игрока покажи. И желательно ещё перемещение влево и вправо. Но всё же быстрее тебе помогут: Quote Ты можешь исходник выложи... 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) И обязательно сделай её прямоугольной не легче тогда отключить точную проверку столкновений?
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
|
Спасибо, движение стало более качественное, но проверка столкновений тоже самое, в смысле теже глюки. Т_Т
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
|
Блин, никак не пойму, что за баг. Т_Т Делаю меньше, всё равно баги.
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, а что не работает?
|
| |
| |
|
|