Суббота, 15 Мая 2021, 02:05

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Форум игроделов » Конструкторы игр и лёгкие в освоении системы разработки игр » Game Maker Studio » Прыгающий ИИ
Прыгающий ИИ
SyankДата: Суббота, 19 Октября 2013, 23:23 | Сообщение # 1
участник
Сейчас нет на сайте
У меня возникли проблемы со столкновениями. У меня есть бот. В случае преследования персонажа, он ускоряется и перепрыгивает преграды. Преграды все одним объектом твёрдым выражены.
Я написал в коде что в случае преследования он проверяет !place_free(x-3,y), и если истина, то vspeed=-5. Эта функция должна проверять только ТВЁРДЫЕ ОБЪЕКТЫ. И он отлично всё перепрыгивает, но цепляется и за героиню и некоторые другие объекты. Не все. ГГ между прочим не твёрдый, почему его пытается перепрыгнуть и что с этим делать.
S=ГГ
Код
if place_empty(x,y+1) then gravity=1 else gravity=0//ãðàâèòàöèÿ
if distance_to_object(S)<600 then action='go'
if distance_to_object(S)<300 then action='fugent'
//õîòüáà
if action='go'{
if adir='left'{if place_free(x-2,y) then x-=2}
if adir='right'{if place_free(x+2,y) then x+=2}

if adir='left'{
if !place_free(x-2,y) then adir='right'
}

if adir='right'{
if !place_free(x+2,y) then adir='left'
}}
//ïðåñëåäîâàíèå ]
if action='fugent'{
if adir='left'{if !place_free(x-3,y) {if action!='jump' {vspeed=-6 action='jump'}}   
x-=4}
if adir='right'{if !place_free(x+3,y) {if action!='jump'  {vspeed=-6 action='jump'}} x+=4}
if S.x<x{adir='left'}
if S.x>x{adir='right'}

}
if action='jump'{
if S.x<x{adir='left'}
if S.x>x{adir='right'}
}

if adir='left' then image_xscale=1
if adir='right' then image_xscale=-1

Прыжок тут не доработан, но даже без этого он не должен цеплятся за не твёрдые объекты


Сообщение отредактировал Syank - Суббота, 19 Октября 2013, 23:32
jorjiДата: Среда, 23 Октября 2013, 21:38 | Сообщение # 2
участник
Сейчас нет на сайте
Лучше исходник скинь,ибо поробуем исправить что-то там.
ErrantBugДата: Четверг, 24 Октября 2013, 07:37 | Сообщение # 3
постоянный участник
Сейчас нет на сайте
Вот, исправил код. Ошибки было две. Первая состояла в том, что вместо place_free в самом начале кода ты написал place_empty. Вторая - при условии погони ты делал так, что бот, даже если перед ним стояла стена, все равно двигался вперед. В результате он тупо застревал.

Финальный код:
Код
if place_free(x,y+1) then gravity=1 else gravity=0//ãðàâèòàöèÿ  
if distance_to_object(S)<600 then action='go'  
if distance_to_object(S)<300 then action='fugent'  
//õîòüáà  
if action='go'{  
if adir='left'{if place_free(x-3,y) then x-=3}  
if adir='right'{if place_free(x+3,y) then x+=3}  

if adir='left'{  
if !place_free(x-3,y) then adir='right'  
}  

if adir='right'{  
if !place_free(x+3,y) then adir='left'  
}}  
//ïðåñëåäîâàíèå ]  
if action='fugent'{  
if adir='left'{if !place_free(x-3,y) {if action!='jump' {vspeed=-6 action='jump'}} else    
x-=3}  
if adir='right'{if !place_free(x+3,y) {if action!='jump'  {vspeed=-6 action='jump'}} else x+=3}  
if S.x<x{adir='left'}  
if S.x>x{adir='right'}  

}  
if action='jump'{  
if S.x<x{adir='left'}  
if S.x>x{adir='right'}  
}  

if adir='left' then image_xscale=1  
if adir='right' then image_xscale=-1


Форум игроделов » Конструкторы игр и лёгкие в освоении системы разработки игр » Game Maker Studio » Прыгающий ИИ
  • Страница 1 из 1
  • 1
Поиск:

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