Пожалуйста, помогите со столкновениями в GMS
| |
Xen | Дата: Понедельник, 27 Июня 2016, 12:47 | Сообщение # 1 |
был не раз
Сейчас нет на сайте
| Ребят, помогите написать код для столкновения прямоугольного объекта с миром на основе ds_grid. Ранее я использовал такой код:
Цитата //Controls & Collisions if keyboard_check(ord('A')) and canl { x-=3.3; image_index+=.2 } if keyboard_check(ord('D')) and canr { x+=3.3; image_index+=.2 } if(keyboard_check(vk_space) && land==true) { vspeed=-12; } if(keyboard_check_released(ord('A')) or keyboard_check_released(ord('D'))) { image_index=0; }
if keyboard_check(ord('A')) turn=-1 if keyboard_check(ord('D')) turn=1
//collisions if (check_block(x-8,y+1) || check_block(x+8,y+1)) { land = 1 gravity = 0 vspeed = 0 y=floor(y/32)*32 } else { land = 0 gravity = .5 } if (check_block(x-8,y-64) || check_block(x+8,y-64)) { vspeed = 0 y=ceil(y/32)*32 }
if (ds_grid_get_max(obj_world.layer1,(x-8) div 32,(y-48) div 32,(x-8) div 32,(y) div 32)) { canl=false x+=3.3 } else canl=true if (ds_grid_get_max(obj_world.layer1,(x+8) div 32,(y-48) div 32,(x+8) div 32,(y) div 32)) { canr=false x-=3.3 } else canr=true
check_block прост:
Цитата return ds_grid_get(obj_world.layer1, argument0 div 32, argument1 div 32)
Было бы здорово, если бы кто-то предложил менее багованное решение. Заранее благодарю.
Давайте дружить! Не будете дружить? А вы знаете, что у меня есть? Смотрите, смотрите, граната! Теперь будете?
|
|
| |
TLT | Дата: Понедельник, 27 Июня 2016, 14:04 | Сообщение # 2 |
Сейчас нет на сайте
| Что не нравится в этом варианте так и не сказал. В чём проблема?
Дао, выраженное словами, не есть истинное Дао.
|
|
| |
Xen | Дата: Понедельник, 27 Июня 2016, 15:12 | Сообщение # 3 |
был не раз
Сейчас нет на сайте
| Цитата TLT ( ) Что не нравится в этом варианте так и не сказал. В чём проблема? Прости-прости :D
Итак, перечень багов: 1.При большой скорости падения персонаж пролетает через блок и застревает в земле. 2.Если у стены зажать клавишу "по направлению к стене", персонаж останется висеть у стены. 3.Если потолок спускается лесенкой вниз, при зажатой клавише персонаж может двигаться по этой лесенке, свисая с потолка и не падая.
А также много других, из чего я сделал вывод: нужно кардинально другое решение.
Давайте дружить! Не будете дружить? А вы знаете, что у меня есть? Смотрите, смотрите, граната! Теперь будете?
Сообщение отредактировал Xen - Понедельник, 27 Июня 2016, 15:13 |
|
| |
Tymonr | Дата: Понедельник, 27 Июня 2016, 16:09 | Сообщение # 4 |
With OpenSource forever♥
Сейчас нет на сайте
| Xen, используй физическое тело и приложение силы, а не велосипеды
Если вы решили обратиться к нам за помощью, не становитесь в позицию неудачника. И не ведите себя как неудачник. Лучший способ получить быстрый и чуткий ответ, - спрашивать как победитель — спрашивать как человек умный, уверенный в себе и знающий, которому просто понадобилась помощь при решении одной конкретной проблемы. Как правильно задавать вопросы в технических форумах
|
|
| |
Xen | Дата: Понедельник, 27 Июня 2016, 18:34 | Сообщение # 5 |
был не раз
Сейчас нет на сайте
| Цитата Tymonr ( ) используй физическое тело и приложение силы, а не велосипеды Данный вариант уже рассматривался, он не годится.
Ребят, в данном случае я знаю, о чём говорю. Пожалуйста, не подвергайте сомнениям мои слова, а помогите с решением проблемы. Заранее спасибо.
Давайте дружить! Не будете дружить? А вы знаете, что у меня есть? Смотрите, смотрите, граната! Теперь будете?
Сообщение отредактировал Xen - Понедельник, 27 Июня 2016, 21:19 |
|
| |
Minskii | Дата: Вторник, 28 Июня 2016, 17:55 | Сообщение # 6 |
участник
Сейчас нет на сайте
| Код if place_metting(x+speed,y,o_block) { speed=0 } if place_metting(x-speed,y,o_block) { speed=0 } if place_metting(x,y+speed,o_block) { speed=0 } if place_metting(x,y-speed,o_block) { speed=0 } Вот тебе и коллизии
Один терранозавр - это 1024 гиганозавра, или 1048576 меганозавров. Java/Kotlin, C#, C++. Android разработчик. Инженер-программист программного обеспечения информационной безопасности мобильных систем.
|
|
| |
Xen | Дата: Четверг, 30 Июня 2016, 08:17 | Сообщение # 7 |
был не раз
Сейчас нет на сайте
| Увы, не годится. Я чётко дал понять - ds_grid, а не объекты.
Добавлено (30 июня 2016, 08:17) --------------------------------------------- Ладно, похоже, нормальной помощи от вас не дождёшься. Быстрее будет самому придумать. Вопрос снят.
Давайте дружить! Не будете дружить? А вы знаете, что у меня есть? Смотрите, смотрите, граната! Теперь будете?
Сообщение отредактировал Xen - Четверг, 30 Июня 2016, 08:18 |
|
| |
|