Пятница, 26 Апреля 2024, 06:45

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Форум игроделов » Конструкторы игр и лёгкие в освоении системы разработки игр » Game Maker » Поиск и перебор объектов.
Поиск и перебор объектов.
SholarДата: Четверг, 17 Июня 2010, 11:36 | Сообщение # 1
Draw With Me
Сейчас нет на сайте
Доброго времени суток... помогите как можно сделать поиск, и присвоение объектов. Объясню поподробнее. Есть объект, противник, есть группа, нейтралы, в этой группе находиться 2+ объектов, посредством Parent. Противник должен производить поиск и захватывать в таргет ближайшего противника, после чего в скрипте проверки, должны проверятся, какой он, нейтрал или свой, количество жизней, и состояние объекта, тем самым осуществляя перебор объектов (если в области работы противника находица 2+ нейтрала). на данный момент я имею код не законченный... сопственно вот

Code

if P_ONATK<=0{ if instance_exists(O_HUMAN){if abs(x-TARGET.x)<400 and abs(y-TARGET.y)<400{
if TARGET=self{TARGET=instance_nearest(x,y,O_HUMAN)}
if TARGET.P_DEATH=0{
P_BULLET=instance_create(x,y-82,O_BULLET_DARK_TOWER1);
P_BULLET.direction=point_direction(x,y-82,TARGET.x,TARGET.y-16)
P_BULLET.speed=16
P_ONATK=1}}
else{TARGET=self}
}}

В этом скрипте, происходит поиск цели в радиусе 400 пкс, и первый попавший объект ХУМАН, если он жив, будет захвачен в таргет, и будет вести огонь пока не убьёт. Но вот после смерти, таргет не поменяется, пока кто то из объектов группы ХУМАН не подойдёт ближе чем объект который был до этого в таргете... надеюсь вы меня поняли, жду помощи. Зарание спс.
Использую ГМ8


https://vk.com/g_sholar

Сообщение отредактировал DrawPlayer - Четверг, 17 Июня 2010, 11:38
Made_In_USSRДата: Четверг, 17 Июня 2010, 12:23 | Сообщение # 2
заслуженный участник
Сейчас нет на сайте
Quote (DrawPlayer)
Но вот после смерти, таргет не поменяется, пока кто то из объектов группы ХУМАН не подойдёт ближе чем объект который был до этого в таргете... надеюсь вы меня поняли, жду помощи.

Code
else {
TARGET=self
P_ONATK=0}

первое что пришло на ум.


Новичкам изучающим GML кликать сюда.
Много примеров, исходников, библиотек и вообще всего что вам только может пригодиться. Автор портала, прости меня за ссылку, наболело =)
SholarДата: Четверг, 17 Июня 2010, 12:37 | Сообщение # 3
Draw With Me
Сейчас нет на сайте
Не работает... атака он не стреляет, но при поиске, находит труп, но т.к. атака = 0 (т.к. не стрелять) и таргет селф, он просто стоит, и ждёт кого по ближе с переменной DEATH = 1

https://vk.com/g_sholar
Made_In_USSRДата: Четверг, 17 Июня 2010, 12:49 | Сообщение # 4
заслуженный участник
Сейчас нет на сайте
А ты врагов после смерти уничтожай, а на их месте создавай трупы другим обьектом, не реагирующим на скрипт.

Добавлено (17.06.2010, 12:49)
---------------------------------------------
какой код у тебя переключает переменную p_death, процитируй.


Новичкам изучающим GML кликать сюда.
Много примеров, исходников, библиотек и вообще всего что вам только может пригодиться. Автор портала, прости меня за ссылку, наболело =)
SholarДата: Четверг, 17 Июня 2010, 13:05 | Сообщение # 5
Draw With Me
Сейчас нет на сайте
Quote
какой код у тебя переключает переменную p_death, процитируй.

Простой, в объекте стоит условие:
Code
if P_HP<=0 {P_DEATH=1}

Quote
А ты врагов после смерти уничтожай, а на их месте создавай трупы другим обьектом, не реагирующим на скрипт.

Есть как вариант, но тогда нужно переделать много вещей. На данный момент стремлюсь к такому плану.
ЗЫ. в нейтралах может оказаться и игрок, а после смерти и уничтожения его, много что навернётся (интерфейс, привязки к нему и т.п.) поэтому ищу вариант обойтись без удаления объекта.


https://vk.com/g_sholar
Made_In_USSRДата: Четверг, 17 Июня 2010, 13:21 | Сообщение # 6
заслуженный участник
Сейчас нет на сайте
Quote (DrawPlayer)
if P_ONATK<=0{ if instance_exists(O_HUMAN){if abs(x-TARGET.x)<400 and abs(y-TARGET.y)<400

Проблема вот здесь! Опять же методом тыка. Меняй target.x и target.y на object_name.x и object_name.y.
Эта строчка пыталась найти ближайшую цель, вместо того чтобы искать ближайший инстанс. Ну мне так кажется unsure


Новичкам изучающим GML кликать сюда.
Много примеров, исходников, библиотек и вообще всего что вам только может пригодиться. Автор портала, прости меня за ссылку, наболело =)
SholarДата: Четверг, 17 Июня 2010, 13:35 | Сообщение # 7
Draw With Me
Сейчас нет на сайте
ТАРГЕТ это переменная в которой идёт захват, т.к. если нейтрал подошёл на 400, враг взял в таргет, и что бы если другой нейтрал не подошёл ближе, и не поменялся таргет, я сделал присвоение цели для противника, с условием в радиусе 400 и он жив...
ЗЫ менял на ХУМАН в строке проверки, всё также, только стреляет всего по ближайшему противнику, а такой задумки небыло...

ЗЫ я тут думаю может както через масив всё сделать... допустим все (число) объектов ХУМАН, определять через масив, и в масиве, делать перебор объектов, по критериям... но вот как это воплотить я не знаю...


https://vk.com/g_sholar
NeZnayuДата: Четверг, 17 Июня 2010, 13:41 | Сообщение # 8
__танцуй!__
Сейчас нет на сайте
with enemy
{if distance_to_object(player)<400
player.count+=1}


CombatForce - 2d TDS долгожданный релиз
Noobster - самый простой конструктор игр в мире
LaLaLaLAMA! - игра не про Ламу
SholarДата: Четверг, 17 Июня 2010, 14:29 | Сообщение # 9
Draw With Me
Сейчас нет на сайте
Quote
with enemy
{if distance_to_object(player)<400
player.count+=1}

а поподробнее можно...
как я понял к объекту противк, идёт сравнение, и увеличивает значение...ммм.. поподробнее...


https://vk.com/g_sholar
Made_In_USSRДата: Четверг, 17 Июня 2010, 15:29 | Сообщение # 10
заслуженный участник
Сейчас нет на сайте
Quote (DrawPlayer)
TARGET=instance_nearest(x,y,O_HUMAN)

Тут не очень понятно. Цель выбирается вне зависимости от того, жива она или нет. Нужно условие при котором исключается из перебора мертвая цель.

Добавлено (17.06.2010, 15:29)
---------------------------------------------
А вот для этого как раз нужен массив, который содержит айди живых инстансов. Из них будет вестись перебор ближайшего к обьекту инстанса после чего следует его захват и атака.


Новичкам изучающим GML кликать сюда.
Много примеров, исходников, библиотек и вообще всего что вам только может пригодиться. Автор портала, прости меня за ссылку, наболело =)
NeZnayuДата: Четверг, 17 Июня 2010, 15:48 | Сообщение # 11
__танцуй!__
Сейчас нет на сайте
Ребят, сори я сейчас с телефона, чуть позже подробно все опишу. Точно могу сказать что массив не нужен. Просто перебирать надо в объекте противника, а не в герое.

CombatForce - 2d TDS долгожданный релиз
Noobster - самый простой конструктор игр в мире
LaLaLaLAMA! - игра не про Ламу
SholarДата: Пятница, 18 Июня 2010, 07:56 | Сообщение # 12
Draw With Me
Сейчас нет на сайте
Code
TARGET=instance_nearest(x,y,O_HUMAN)
...
if TARGET.P_DEATH=0{

Условие есть, но не на выбор цели а на стрельбу противника...

Code
Ребят, сори я сейчас с телефона, чуть позже подробно все опишу. Точно могу сказать что массив не нужен. Просто перебирать надо в объекте противника, а не в герое.

на противнике, т.к. он же будет вести огонь, следовательно все сравнения должны быть в нём... как мне кажется


https://vk.com/g_sholar
DecedentДата: Пятница, 18 Июня 2010, 11:15 | Сообщение # 13
почетный гость
Сейчас нет на сайте
Quote (DrawPlayer)
Условие есть, но не на выбор цели а на стрельбу противника...

Обьясню. Сейчас происходит следующее: сперва выбирается цель в радиусе (живая или мертвая). После этого выполняется проверка жива ли цель, а уже после, если она жива — открывается огонь.
А должно быть следующее. Определяется обьект в радиусе, выполняется проверка, живая цель или нет. После этого выполняется выбор цели (если удовлетворяет условие) и открывается огонь, если цель выбрана. В противном случае (если не удовлетворяет условие) продолжить выбор цели пока условие не выполнится.
Quote (DrawPlayer)
на противнике, т.к. он же будет вести огонь, следовательно все сравнения должны быть в нём... как мне кажется

Сравнения могут быть в любом обьекте, можно использовать невидимый обьект контроллер к примеру. Хотя могут возникнуть проблемы с адресацией. Что имел ввиду NeZnayu я не понял. Ждем. Мне тоже не лишним будет глянуть что к чему (у меня похожая система боевки).
NeZnayuДата: Пятница, 18 Июня 2010, 13:56 | Сообщение # 14
__танцуй!__
Сейчас нет на сайте
Так, признаюсь - я запутался.
Можете пожалуйста еще раз цель сформулировать.
Нужно чтобы противник выбирал ближайшего нейтрала в радиусе 400 и атаковал его?


CombatForce - 2d TDS долгожданный релиз
Noobster - самый простой конструктор игр в мире
LaLaLaLAMA! - игра не про Ламу
DecedentДата: Пятница, 18 Июня 2010, 20:35 | Сообщение # 15
почетный гость
Сейчас нет на сайте
Quote (NeZnayu)
Нужно чтобы противник выбирал ближайшего нейтрала в радиусе 400 и атаковал его?

Не противник, — персонаж которым управляем. Выбирал ближайшего живого нейтрала (того у которого dead=0).


Сообщение отредактировал Decedent - Пятница, 18 Июня 2010, 20:37
NeZnayuДата: Пятница, 18 Июня 2010, 21:51 | Сообщение # 16
__танцуй!__
Сейчас нет на сайте
В объекте врага:

//Определяем расстояние до игрока
dist=distance_to_object(player)
//Определяем ближайшего врага
nearest_enemy=instance_nearest(x,y,enemy)

//Если не мертв
if dead!=true
{
//Если расстояние до игрока меньше 400
if dist<400
{
//Если расстояние до игрока меньше чем расстояние от ближайшего врага до игрока
if point_distance(x,y,player.x,player.y)<point_distance(nearest_enemy.x,nearest_enemy.y,player.x,player.y)
{
//Передаем игроку идентификатор для атаки
player.atack=id
}
}
}


CombatForce - 2d TDS долгожданный релиз
Noobster - самый простой конструктор игр в мире
LaLaLaLAMA! - игра не про Ламу
SholarДата: Суббота, 19 Июня 2010, 15:29 | Сообщение # 17
Draw With Me
Сейчас нет на сайте
Quote
В объекте врага:
//Определяем расстояние до игрока
dist=distance_to_object(player)
//Определяем ближайшего врага
nearest_enemy=instance_nearest(x,y,enemy)

//Если не мертв
if dead!=true
{
//Если расстояние до игрока меньше 400
if dist<400
{
//Если расстояние до игрока меньше чем расстояние от ближайшего врага до игрока
if point_distance(x,y,player.x,player.y)<point_distance(nearest_enemy.x,nearest_enemy.y,player.x,player.y)
{
//Передаем игроку идентификатор для атаки
player.atack=id
}
}
}


+1 Спс.

Добавлено (19.06.2010, 15:29)
---------------------------------------------

Quote
В объекте врага:
//Определяем расстояние до игрока
dist=distance_to_object(player)
//Определяем ближайшего врага
nearest_enemy=instance_nearest(x,y,enemy)

//Если не мертв
if dead!=true
{
//Если расстояние до игрока меньше 400
if dist<400
{
//Если расстояние до игрока меньше чем расстояние от ближайшего врага до игрока
if point_distance(x,y,player.x,player.y)<point_distance(nearest_enemy.x,nearest_enemy.y,player.x,player.y)
{
//Передаем игроку идентификатор для атаки
player.atack=id
}
}
}


+1 Спс.


https://vk.com/g_sholar
Форум игроделов » Конструкторы игр и лёгкие в освоении системы разработки игр » Game Maker » Поиск и перебор объектов.
  • Страница 1 из 1
  • 1
Поиск:

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