Форум сайта Game--Maker.narod.ru

Объявление

Сайт переехал сюда: GMBest.w6.ru
форум: GMBest.w6.ru/forum

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.



Новичку

Сообщений 1 страница 8 из 8

1

Собрался делать игру на подобии Metal Gear Solid, незнаю как делать поле обзора для врагов, объясните, только попроще
а то я всего 2 дня этим занимаюсь.

0

2

Я к сожалению никогда не видел Metal Gear Solid поэтому так и не понял что нужно. Немогли бы вы описать что именно нужно и как это должно работать.

0

3

То есть например если глав. герой идет сзади врага  враг не должен его видеть, а если наоборот ,"палится" , тогда враг начнет стрелять, или позовет охрану.

0

4

Даже и незнаю как попроще обьяснить... Ладно попробую.

У меня получилось так:

В 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))}

Ну вроде всё, удачи.

0

5

Спасибо, а что делать если вылазит ошибка:

"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"
И как выделить область зрения полупрозрачным желтым.

0

6

Эта ошибка из-за того что программа не знает что такое 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)

0

7

А как ты всему этому научился, не могу поверить если только с помощью справки.

0

8

Поверить тяжело но это так.. :)

0



Создать форум.