Вопрос - Ответ (Game Maker)
| |
t111 | Дата: Четверг, 28 Ноября 2013, 23:35 | Сообщение # 4601 |
почетный гость
Сейчас нет на сайте
| ну у меня суть была в том что объект враг ходит сам по себе, влево-вправо и взависимости в какую сторону он идёт, туда и image_xscale. Мне нужно было, если я приближаюсь к нему из за спины менее чем на 300, то он поворачивается ко мне лицом и начинает в меня стрелять... Добавлено (28.11.2013, 23:25) --------------------------------------------- если я ухожу с этого радиуса, то он разворачивается в сторону в какую шёл и продолжает движение. Ну естественно, если я приближаюсь к нему спереди, ему не надо разворачиваться, а он просто останавливается и стреляет. Если покидаю, то тоже самое... Добавлено (28.11.2013, 23:30) --------------------------------------------- решил проблему , дополнив к point distance фун-ю collision line, прикрепив к врагу линии с обоих сторон, которые начинались с точки относительно его x,y . Линия х слева заканчивалась в точке х-300, справа х+300. В какую линию попадал я, в ту сторону враг и разворачивался и стрелял... Добавлено (28.11.2013, 23:35) --------------------------------------------- иначе, как бы враг определял с какой стороны я от него нахожусь, со спины или спереди, пускай мой спрайт и повёрнут допустим вправо, я могу в таком положении находится от врага как и по левую сторону так и по правую. Вот я и парился сначала. ну щас всё норм
как известно, встречают по одежке, а провожают uninstall'ом"
|
|
| |
Krosos | Дата: Пятница, 29 Ноября 2013, 03:21 | Сообщение # 4602 |
постоянный участник
Сейчас нет на сайте
| Цитата t111 ( ) решил проблему , дополнив к point distance фун-ю collision line, прикрепив к врагу линии с обоих сторон, которые начинались с точки относительно его x,y . Линия х слева заканчивалась в точке х-300, справа х+300. В какую линию попадал я, в ту сторону враг и разворачивался и стрелял... Я сделал сначала также ,но потом изменил код на этот: Цитата if distance_to_object(objPlayer)>200 {KEY_SHOOT_CHARGE=1}
if !collision_line(x,y,objPlayer.x,y,obj_Block,0,0) and y>objPlayer.y-10 and y<objPlayer.y+10 and grounded{ if distance_to_object(objPlayer)>200 {if Buster_3=1{KEY_SHOOT=1}else{KEY_SHOOT=0}} if distance_to_object(objPlayer)<=200{KEY_SHOOT=1} }else{KEY_SHOOT=0}
KEY_SHOOT - это стрельба , а KEY_SHOOT_CHARGE- это заряд бустера(как в мегамэне) А разворот еще проще: Цитата if KEY_SHOOT=1{ KEY_SHOOT_CHARGE=0 KEY_LEFT=0 KEY_RIGHT=0 KEY_JUMP=0 if x>objPlayer.x{image_xscale=-1}else{image_xscale=1}}
Я делал моба , как игрока , дав новые условия тем же переменным.
Мой проект
Сообщение отредактировал Krosos - Пятница, 29 Ноября 2013, 03:23 |
|
| |
JunkerKun | Дата: Пятница, 29 Ноября 2013, 15:13 | Сообщение # 4603 |
частый гость
Сейчас нет на сайте
| Цитата t111 ( ) ну у меня суть была в том что объект враг ходит сам по себе, влево-вправо и взависимости в какую сторону он идёт, туда и image_xscale. Мне нужно было, если я приближаюсь к нему из за спины менее чем на 300, то он поворачивается ко мне лицом и начинает в меня стрелять...
Код if (abs(x-player.x)<300) { if (player.y>y-24 && player.y< y+24) { image_xscale=sign(player.x-x); enemy_shoot(); }; };
Вот и все, никаких дополнительных функций больше не надо. Все функции на проверку столкновений жрут ЦП довольно сильно, поэтому использовать их лучше по минимуму.
Сообщение отредактировал JunkerKun - Пятница, 29 Ноября 2013, 15:15 |
|
| |
Krosos | Дата: Пятница, 29 Ноября 2013, 17:24 | Сообщение # 4604 |
постоянный участник
Сейчас нет на сайте
| JunkerKun, ты забыл самое главное -наличие препятствий.ИИ не должен стрелять в стену за которой скрылся игрок.
Мой проект
|
|
| | |
t111 | Дата: Суббота, 30 Ноября 2013, 01:10 | Сообщение # 4606 |
почетный гость
Сейчас нет на сайте
| кстати да, у меня он стреляет и в стену, если я в его поле видимости по оси х. Но для меня это пока не суть важно, поэтому, я и не парюсь. А за ваши варианты решения проблемы спасибо, можно взять на заметку. Ну и также поможет тем кто сейчас парится с ИИ.
как известно, встречают по одежке, а провожают uninstall'ом"
|
|
| |
adast12 | Дата: Суббота, 30 Ноября 2013, 20:03 | Сообщение # 4607 |
почетный гость
Сейчас нет на сайте
| Как сделать чтобы вот этот код не перекрывал спрайт объекта и не действовал на него? draw_set_alpha(0.5); draw_rectangle_color(0,0,room_width,room_height,c_blue,c_blue,c_blue,c_blue,0);
|
|
| |
JunkerKun | Дата: Суббота, 30 Ноября 2013, 21:29 | Сообщение # 4608 |
частый гость
Сейчас нет на сайте
| Цитата Krosos ( ) JunkerKun, ты забыл самое главное -наличие препятствий.ИИ не должен стрелять в стену за которой скрылся игрок. А, ну тогда да, без collision_line никак, согласен =)
Цитата adast12 ( ) Как сделать чтобы вот этот код не перекрывал спрайт объекта и не действовал на него? draw_set_alpha(0.5); draw_rectangle_color(0,0,room_width,room_height,c_blue,c_blue,c_blue,c_blue,0);
В каком смысле не действовал? Чтобы квадрат не перекрывал спрайт, нужно рисовать его до самого спрайта. Либо поставить depth у объекта, который рисует квадрат, в значение больше, чем у того, что рисует спрайт.
|
|
| |
adast12 | Дата: Воскресенье, 01 Декабря 2013, 14:11 | Сообщение # 4609 |
почетный гость
Сейчас нет на сайте
| Как сделать чтобы при деактивации объекта спрайт его был виден?
|
|
| |
JunkerKun | Дата: Воскресенье, 01 Декабря 2013, 15:07 | Сообщение # 4610 |
частый гость
Сейчас нет на сайте
| Цитата adast12 ( ) Как сделать чтобы при деактивации объекта спрайт его был виден?
Никак. Если ты его деактивировал, он больше вообще никак не обрабатывается.
|
|
| |
GameMix | Дата: Воскресенье, 01 Декабря 2013, 15:34 | Сообщение # 4611 |
старожил
Сейчас нет на сайте
| adast12, вариант всё же есть. Можно просто перед деактивацией сохранить спрайт и координаты в переменные какого-нибудь объекта-контроллера, находящегося в этой комнате: Код o_controller.ox = x; o_controller.oy = y; o_controller.osprite = sprite_index; И после деактивации рисовать этот спрайт в сохраненных координатах. o_controller (Draw):Код draw_sprite(osprite, 0, ox, oy);
Steel Standoff - 2D аркада. Мои статьи
|
|
| |
JunkerKun | Дата: Воскресенье, 01 Декабря 2013, 18:07 | Сообщение # 4612 |
частый гость
Сейчас нет на сайте
| Цитата GameMix ( ) Можно просто перед деактивацией сохранить спрайт и координаты в переменные какого-нибудь объекта-контроллера, находящегося в этой комнате:
А, точно. Вечно я забываю об очевидных методах >__>
|
|
| |
t111 | Дата: Понедельник, 02 Декабря 2013, 17:19 | Сообщение # 4613 |
почетный гость
Сейчас нет на сайте
| доброго времени суток! Когда я хочу воспроизвести видео в игре, я загружаю его через глоб.настройки во 'вложеные файлы', потом в объекте использую кнопку splash video. Но проблема в том, что в игре это видео можно закрыть на крестик не досмотрев или щёлкнув мышкой просто. Как это предотвратить? Уберание курсора в настройках не помогает. Охото, чтобы видео закрывалось, когда оно заканчивается... Добавлено (02.12.2013, 17:19) --------------------------------------------- ...а не когда этого захочет игрок. Может его загрузить как то в игру по другому или что? Чтобы его нельзя было так просто закрыть преждевременно.
как известно, встречают по одежке, а провожают uninstall'ом"
|
|
| |
GameMix | Дата: Понедельник, 02 Декабря 2013, 17:43 | Сообщение # 4614 |
старожил
Сейчас нет на сайте
| t111, для воспроизведения видео используй дополнения для Game Maker (dll или gex/ged). Тогда будет больше возможностей контролировать этот процесс.
Steel Standoff - 2D аркада. Мои статьи
|
|
| |
t111 | Дата: Понедельник, 02 Декабря 2013, 17:55 | Сообщение # 4615 |
почетный гость
Сейчас нет на сайте
| а, хорошо буду гуглить. В справке нашёл код который отключает прерывание видео мышкой, но когда ввожу воспроизведение видео с помощью кода splash_show_video(asd.wmv,0) он не понимает кода.
как известно, встречают по одежке, а провожают uninstall'ом"
|
|
| |
GameMix | Дата: Понедельник, 02 Декабря 2013, 17:57 | Сообщение # 4616 |
старожил
Сейчас нет на сайте
| asd.wmv - должна быть строкой ("asd.wmv"). А сейчас это у тебя обращение к переменной wmv в объекте asd.
Steel Standoff - 2D аркада. Мои статьи
|
|
| |
t111 | Дата: Понедельник, 02 Декабря 2013, 18:14 | Сообщение # 4617 |
почетный гость
Сейчас нет на сайте
| да я чёто затупил, пардон)))) проблема уже решена
как известно, встречают по одежке, а провожают uninstall'ом"
|
|
| |
MakcTHC | Дата: Понедельник, 02 Декабря 2013, 21:00 | Сообщение # 4618 |
был не раз
Сейчас нет на сайте
| Привет всем. Не могу понять что не так: Код В Draw: draw_sprite(s_monstr,0,x,y); image_speed = 1; Не проигрывается анимация.
|
|
| |
buftler | Дата: Понедельник, 02 Декабря 2013, 21:21 | Сообщение # 4619 |
Добряк
Сейчас нет на сайте
| MakcTHC,в draw нельзя указывать image_speed, или create или step
Сообщение отредактировал buftler - Понедельник, 02 Декабря 2013, 21:22 |
|
| |
MakcTHC | Дата: Понедельник, 02 Декабря 2013, 22:26 | Сообщение # 4620 |
был не раз
Сейчас нет на сайте
| buftler, Не получается ни в Create ни в Step, единственное, если убрать событие Draw вообще и поставить спрайт в настройках у объекта, тогда анимация проигрывается... Добавлено (02.12.2013, 22:26) --------------------------------------------- Всё разобрался. Просто нужно было subimg -1 ставить а не 0 Код draw_sprite(s_monstr,-1,x,y); image_speed = 0.8;
|
|
| |
|