Четверг, 14 Ноября 2024, 11:36

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Точная проверка столкновения
михаДата: Суббота, 11 Января 2014, 10:35 | Сообщение # 1
почти ветеран
Сейчас нет на сайте
Представим объект, летящий по направлению 270 со скоростью 10. Необходимо сделать так, чтобы когда он врезался в obj_16_wall, скорость уходила в ноль, но тут возникает проблема. При использовании стандартного события collision, объект теряет скорость либо не долетая несколько пикселей до obj_16_wall, либо уже влетев внутрь него на те-же несколько пикселей.
Я уйму всего перепробовал, в итоге получился отвратительно гигантский код, который хоть по идее и должен помогать, по сути не помогает. Все остается так-же. Прошу помочь в общем... хотелось бы, чтобы все было "пиксель в пиксель".
Чтобы было понятнее, этот код я написал в Step. Размер спрайта "объекта" 32х32, "центр" спрайта в центре
Цитата

if collision_point(x,y+26,obj_16_wall,0,0)
or collision_point(x+16,y+26,obj_16_wall,0,0)
or collision_point(x-16,y+26,obj_16_wall,0,0)
{
if collision_point(x,y+16,obj_16_wall,0,0)
|| collision_point(x+15,y+16,obj_16_wall,0,0)
|| collision_point(x-15,y+16,obj_16_wall,0,0)
{
speed=0
}
else
for(i=0;i>10;i+=1)
{
if collision_point(x,y+16+i,obj_16_wall,0,0)
|| collision_point(x+15,y+16+i,obj_16_wall,0,0)
|| collision_point(x-15,y+16+i,obj_16_wall,0,0)
{
y+=i
speed=0
}}
}
Quad69Дата: Суббота, 11 Января 2014, 13:11 | Сообщение # 2
заслуженный участник
Сейчас нет на сайте
В столкновении с стеной такое:
Код
if !place_free(x+speed,y+speed) //Если в позицию которую он пападёт что-то есть
{
move_contact_solid(direction,speed)
speed=0

}

Примерно
михаДата: Суббота, 11 Января 2014, 19:47 | Сообщение # 3
почти ветеран
Сейчас нет на сайте
я так раньше делал. Мне не нравится то, что при использовании данной функции перед приземлением объект замедляется.
Quad69Дата: Воскресенье, 12 Января 2014, 00:50 | Сообщение # 4
заслуженный участник
Сейчас нет на сайте
Цитата миха ()
перед приземлением объект замедляется

Если использовуешь функцию gravity, то вот такой код:
Код
if !place_free(x+speed,y+speed) //Если в позицию которую он пападёт что-то есть  
{  
move_contact_solid(direction,speed)  
gravity=0
}

Но я точно не знаю как это делать. Нужен исходник
  • Страница 1 из 1
  • 1
Поиск:

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