Пятница, 19 Апреля 2024, 17:14

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Форум игроделов » Конструкторы игр и лёгкие в освоении системы разработки игр » Game Maker » Пожалуйста, помогите со столкновениями в GMS
Пожалуйста, помогите со столкновениями в 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
}

Вот тебе и коллизии cool


Один терранозавр - это 1024 гиганозавра, или 1048576 меганозавров.
Java/Kotlin, C#, C++.
Android разработчик. Инженер-программист программного обеспечения информационной безопасности мобильных систем.
XenДата: Четверг, 30 Июня 2016, 08:17 | Сообщение # 7
был не раз
Сейчас нет на сайте
Увы, не годится. Я чётко дал понять - ds_grid, а не объекты.

Добавлено (30 июня 2016, 08:17)
---------------------------------------------
Ладно, похоже, нормальной помощи от вас не дождёшься. Быстрее будет самому придумать. Вопрос снят.


Давайте дружить! Не будете дружить? А вы знаете, что у меня есть? Смотрите, смотрите, граната! Теперь будете?

Сообщение отредактировал Xen - Четверг, 30 Июня 2016, 08:18
Форум игроделов » Конструкторы игр и лёгкие в освоении системы разработки игр » Game Maker » Пожалуйста, помогите со столкновениями в GMS
  • Страница 1 из 1
  • 1
Поиск:

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