Собрался делать игру на подобии Metal Gear Solid, незнаю как делать поле обзора для врагов, объясните, только попроще
а то я всего 2 дня этим занимаюсь.
Новичку
Сообщений 1 страница 8 из 8
Поделиться12008-01-29 19:20:08
Поделиться22008-01-29 22:34:39
Я к сожалению никогда не видел Metal Gear Solid поэтому так и не понял что нужно. Немогли бы вы описать что именно нужно и как это должно работать.
Поделиться32008-01-30 00:58:39
То есть например если глав. герой идет сзади врага враг не должен его видеть, а если наоборот ,"палится" , тогда враг начнет стрелять, или позовет охрану.
Поделиться42008-01-30 17:00:44
Даже и незнаю как попроще обьяснить... Ладно попробую.
У меня получилось так:
В Create:
dir=80//угол обзора врага
len=300//максимальное расстояние на котором враг может увидеть игрока
step=5//что-то вроде точности "зрения" у врага (чем больше тем меньше загрузка цп)
attack=0//переменная обозначающая что в данный момент делает враг
Вроде всё, теперь в Step:
if attack=0//проверяет видел ли враг игрока
{
for(a=-dir;a<dir;a+=step)//запускаем поиск игрока
{
//Далее идёт проверка наличия столкновения с игроком на определённой линии если нет стен...
if collision_line(x,y,x+lengthdir_x(len,direction-a),y+lengthdir_y(len,direction-a),игрок,1,0)<>-4 and
collision_line(x,y,x+lengthdir_x(len,direction-a),y+lengthdir_y(len,direction-a),стена,1,0)=-4
{attack=1;a=dir}
//Тоже самое но если стены есть
if collision_line(x,y,x+lengthdir_x(len,direction-a),y+lengthdir_y(len,direction-a),игрок,1,0)<>-4 and
collision_line(x,y,x+lengthdir_x(len,direction-a),y+lengthdir_y(len,direction-a),стена,1,0)<>-4
{
pl=collision_line(x,y,x+lengthdir_x(len,direction-a),y+lengthdir_y(len,direction-a),игрок,1,0)
wl=collision_line(x,y,x+lengthdir_x(len,direction-a),y+lengthdir_y(len,direction-a),стена,1,0)
len1=point_distance(x,y,pl.x,pl.y)
len2=point_distance(x,y,wl.x,wl.y)
//если игрок стоит ближе стены
if len1>len2{a=dir}else{attack=1;a=dir}
}}}
Ах да чуть не забыл, чтобы посмотреть как это всё работает в Draw нужно написать:
draw_sprite_ext(sprite_index,image_single,x,y,1,1,direction,c_white,1)
for(a=-dir;a<dir;a+=step)
{draw_line(x,y,x+lengthdir_x(len,direction-a),y+lengthdir_y(len,direction-a))}
Ну вроде всё, удачи.
Поделиться52008-01-30 19:33:48
Спасибо, а что делать если вылазит ошибка:
"ERROR in action number 1
of Draw Event for object Enemy
Error in code at line 2:
for(a=dir;a<dir;a+=step)
at position 9: Unknown variable dir"
И как выделить область зрения полупрозрачным желтым.
Поделиться62008-01-31 09:43:22
Эта ошибка из-за того что программа не знает что такое dir т.е. в Create обьекта Enemy отсутствует строчка: dir=80
либо что то похожее на это.
А вот что получилось с областью зрения, в Draw:
draw_set_color(c_yellow)
draw_set_alpha(0.3)
draw_primitive_begin(pr_trianglefan)
draw_vertex(x,y)
for(a=-dir;a<dir;a+=step)
{l2=0
if collision_line(x,y,x+lengthdir_x(len,direction-a),y+lengthdir_y(len,direction-a),стена,1,0)<>-4
{wl2=collision_line(x,y,x+lengthdir_x(len,direction-a),y+lengthdir_y(len,direction-a),стена,1,0)
l2=len-point_distance(x,y,wl2.x,wl2.y)}
draw_vertex(x+lengthdir_x(len-l2,direction-a),y+lengthdir_y(len-l2,direction-a))}
draw_vertex(x,y)
draw_primitive_end()
draw_set_alpha(1)
Поделиться72008-02-20 04:05:54
А как ты всему этому научился, не могу поверить если только с помощью справки.
Поделиться82008-03-01 14:30:44
Поверить тяжело но это так..