Вторник, 24 Декабря 2024, 05:37

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Очередной вопросник дабы не плодить кучу тем
neksinsДата: Понедельник, 14 Марта 2011, 15:50 | Сообщение # 1
постоянный участник
Сейчас нет на сайте
Всем привет, в своей игре использую следующий код для мобов:

Code
   
    image_angle=direction;   
      friction=0.05;   
if distance_to_object(Player) <= 540  {

alarm[0]=11
}

if distance_to_object(Player) <=100 && distance_to_object(Player)>=150  {
mp_potential_step(Player.x,Player.y,3,0)
}

if distance_to_object(Player)>=0 && distance_to_object(Player)<=10  {
mp_potential_step(Player.x,Player.y,-3,0)
}

if hp<1   

{
instance_destroy();
}

alarm[0] = instance_create(x,y,enemylazer); alarm[0]=11

при этом мобы сильно лагают:

1) реагируют на обьект игрока когда тот слишком близко расположен к ним (реагируют=поворачиваются в его сторону)
2) стреляют непойми как - сначала нестреляют вообще, потом когда отлетаешь начинают (в тот момент они уже за кадром)
3) небегают за игроком

пытался корректировать значения if distance_to_object(Player) <= 540 и тому подобные - неспасает.
как вылечить?
мобы должны стрелять в зоне видимости игрока (игра 800х600, игрок по середине экрана)
бегать за ним (хотя медленнее чем игрок)
отлетать только если игрок очень близко (не допускать "состыковки")


Мой проект по типу Guitar Hero
ИГРА ВЫПУЩЕНА!


Сообщение отредактировал neksins - Понедельник, 14 Марта 2011, 22:15
Made_In_USSRДата: Понедельник, 14 Марта 2011, 15:58 | Сообщение # 2
заслуженный участник
Сейчас нет на сайте
Quote (neksins)
if distance_to_object(Player) <=100 && distance_to_object(Player)>=150 {
mp_potential_step(Player.x,Player.y,3,0)

Обьект не может быть на расстоянии меньше 100 и больше 150 одновременно.


Новичкам изучающим GML кликать сюда.
Много примеров, исходников, библиотек и вообще всего что вам только может пригодиться. Автор портала, прости меня за ссылку, наболело =)
neksinsДата: Понедельник, 14 Марта 2011, 16:00 | Сообщение # 3
постоянный участник
Сейчас нет на сайте
ой я лол все понял
ошибка в том что у меня одновременно если дистанция МЕНЬШЕ 100 и БОЛЬШЕ 150

Добавлено (14.03.2011, 16:00)
---------------------------------------------
Made_In_USSR, опередил smile


Мой проект по типу Guitar Hero
ИГРА ВЫПУЩЕНА!
Made_In_USSRДата: Понедельник, 14 Марта 2011, 16:03 | Сообщение # 4
заслуженный участник
Сейчас нет на сайте
Внимательнее нужно быть, батенька smile

Новичкам изучающим GML кликать сюда.
Много примеров, исходников, библиотек и вообще всего что вам только может пригодиться. Автор портала, прости меня за ссылку, наболело =)
fack3637363Дата: Понедельник, 14 Марта 2011, 16:04 | Сообщение # 5
постоянный участник
Сейчас нет на сайте
заместо mp_potential_step поставь функцию move_towards_point
neksinsДата: Понедельник, 14 Марта 2011, 16:05 | Сообщение # 6
постоянный участник
Сейчас нет на сайте
но стреляют они всеравно покосному О_О
вот сейчас протестил. подлетел к одному мобу он за мной дернулся а стрелять начал второй, третий вообще стоит непричем, второй пострелял раз 10 да и прекратил, первый так и не начал О_О

Добавлено (14.03.2011, 16:05)
---------------------------------------------
fack3637363, что это изменит?


Мой проект по типу Guitar Hero
ИГРА ВЫПУЩЕНА!
Dva_KotaДата: Понедельник, 14 Марта 2011, 16:20 | Сообщение # 7
заслуженный участник
Сейчас нет на сайте
Вместо
Code
if distance_to_object(Player)>=0 && distance_to_object(Player)<=10  {
mp_potential_step(Player.x,Player.y,-3,0)
}

можно было написать
Code
if distance_to_object(Player)<=10  {
mp_potential_step(Player.x,Player.y,-3,0)
}

(расстояние же и так не может быть меньше 0, по этому можно не выполнять первую проверку)

Теперь по проблеме: стрельбу сделал не правильно. У тебя когда игрок рядом постоянно выполняется alarm[0]=11, т.е. событие alarm0 не выполнится пока ты рядом. Нужно создать переменную, которая будет отвечать за "перезарядку", например canshoot=true (в событии создания моба)
Вместо alarm[0]=11 поставь код:

Code
if canshoot
{
instance_create(x,y,enemylazer);
canshoot=false;
alarm[0]=11;
}

В событии alarm0 код:

Code
canshoot=true


Новый пример инвентаря! /20.06.2012/

Energy Wars


Сообщение отредактировал Dva_Kota - Понедельник, 14 Марта 2011, 16:21
neksinsДата: Понедельник, 14 Марта 2011, 16:29 | Сообщение # 8
постоянный участник
Сейчас нет на сайте
Dva_Kota, огромное спасибо, все понятно и все работает

Мой проект по типу Guitar Hero
ИГРА ВЫПУЩЕНА!
AGENTX001Дата: Понедельник, 14 Марта 2011, 17:12 | Сообщение # 9
почётный гцупер
Сейчас нет на сайте
Quote (fack3637363)
заместо mp_potential_step поставь функцию move_towards_point

О_о Этого не нужно!
fack3637363, ты хоть справку глянул-бы!
Quote
mp_potential_step

Эта функция заставляет обьект двигаться обходя все другие обьекты. В данном случае немного не верно, т. к. бот у тебя начнёт обходить кровь, трупов и т. д. Лучше всего создать родителя для всех объектов которые боту нада обходить, и воспользоваться функцией:
Quote
mp_potential_step_object
Made_In_USSRДата: Понедельник, 14 Марта 2011, 18:47 | Сообщение # 10
заслуженный участник
Сейчас нет на сайте
Quote (AGENTX001)
В данном случае немного не верно, т. к. бот у тебя начнёт обходить кровь, трупов и т. д.

Это космосим biggrin


Новичкам изучающим GML кликать сюда.
Много примеров, исходников, библиотек и вообще всего что вам только может пригодиться. Автор портала, прости меня за ссылку, наболело =)
neksinsДата: Понедельник, 14 Марта 2011, 22:17 | Сообщение # 11
постоянный участник
Сейчас нет на сайте
Теперь у меня вопрос, касаемый стрельбы обьекта Player
в степе стоит такой код

if global.weapons > 0
if mouse_check_button_pressed(mb_left) {

alarm[1]=5

}

в аларме кнопкой создание лазера, затем задаю alarm[1]=5
думал будет цикл, а вот и нет
почему неработает цикл стрельбы?

как можно сделать стрельбу пока зажата левая кнопка мыши?

Добавлено (14.03.2011, 22:17)
---------------------------------------------
разумеется, стрельбу с интервалами (маленькими) а не просто бесконечный потом выстрелов


Мой проект по типу Guitar Hero
ИГРА ВЫПУЩЕНА!
Dva_KotaДата: Понедельник, 14 Марта 2011, 23:51 | Сообщение # 12
заслуженный участник
Сейчас нет на сайте
Делай все точно так же как у моба, а вместо mouse_check_button_pressed(mb_left) пиши mouse_check_button(mb_left). Код такой:

В криейт

Code
canshoot=true

В степ
Code

if mouse_check_button(mb_left)
{
if canshoot
{
instance_create(x,y,enemylazer);
canshoot=false;
alarm[0]=11;
}
}

ну и в alarm0

Code
canshoot=true


Новый пример инвентаря! /20.06.2012/

Energy Wars
neksinsДата: Вторник, 15 Марта 2011, 09:26 | Сообщение # 13
постоянный участник
Сейчас нет на сайте
Dva_Kota, спасибо, выручил)

Мой проект по типу Guitar Hero
ИГРА ВЫПУЩЕНА!
  • Страница 1 из 1
  • 1
Поиск:

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