Пятница, 29 Марта 2024, 03:32

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Форум игроделов » Конструкторы игр и лёгкие в освоении системы разработки игр » Game Maker » Немного для TDS (Несколько полезных скриптов с коментами...)
Немного для TDS
CHROMДата: Понедельник, 01 Августа 2011, 21:48 | Сообщение # 1
частый гость
Сейчас нет на сайте
1. Как сделать, чтобы противники двигались к игроку? (вид сверху)


Ответ: Заставить противников двигаться к игроку есть множество способов. Если противники должны просто следовать за игроком по прямой, можно использовать следующий код:

Код:

if instance_exists(объект_игрока)

{

if point_distance(x, y, объект_игрока.x, объект_игрока.y) > скорость_движения

{

move_towards_point(объект_игрока.x, объект_игрока.y, скорость_движения); // Двигаемся к игроку

}

else

{

x = объект_игрока.x;

y = объект_игрока.y;

}

}

Условие if instance_exists(объект_игрока) нужно для того, чтобы не появлялась ошибка, когда объекта игрока почему-то нет (например, когда он был удалён после смерти). Проверка point_distance требуется для того, чтобы противник не мог пройти позицию цели. К примеру, если скорость противника - 10 пикселей, а цель находится от него на расстоянии в два пикселя, то он попросту проскочит её, сдвинувшись на 10 пикселей в направлении цели. С проверкой он сдвинется точно к позиции цели, не перескакивая её.

2.Если противники должны двигаться к игроку, огибая стены, можно использовать следующий код:

Код:

if instance_exists(объект_игрока)

{

if point_distance(x, y, объект_игрока.x, объект_игрока.y) > скорость_движения

{

mp_potential_step(объект_игрока.x, объект_игрока.y, скорость_движения, checkall);

}

else

{

x = объект_игрока.x;

y = объект_игрока.y;

}

}

О значении последнего аргумента (checkall) читайте в справке.


3. Как сделать, чтобы противники "видели" игрока только на определённом расстоянии?


Ответ: Для этого нужно проверить расстояние между игроком и противником, делается это с помощью функции point_distance:

Код:

if instance_exists(объект_игрока)

{

if point_distance(x, y, объект_игрока.x, объект_игрока.y) < радиус_зрения_противника

{

// Действия противника, когда игрок попал в поле зрения.

}

}

О необходимости проверки instance_exists читайте в предыдущем вопросе.


4. Как сделать, чтобы противники видели игрока только под определённым углом?


Ответ: Используйте скрипт для вычисления разницы между двумя направлениями, создание которого подробно описывается в вопросе 2.4.24. Если разница между направлением взгляда противника и направлением от него к игроку превышает половину от угла обзора противника, значит противник не видит игрока. К примеру, если противник имеет угол обзора в 120 градусов, то разница между направлением его взгляда и направлением от него к игроку должна по модулю не превышать 60 градусов (это значит, что противник видит игрока). В коде это выглядит примерно так:

Код:

var dir;

dir = point_direction(x, y, объект_игрока.x, объект_игрока.y);

if abs(dir_difference(image_angle, dir)) <= угол_обзора / 2

{

// Действия противника, если игрок находится в его поле зрения.

}


5. Как сделать, чтобы противники не видели игрока через стены?


Ответ: Для этого нужно проверить, есть ли между противником и игроком стена. Используйте функцию collision_line:

Код:

if instance_exists(объект_игрока) // Если объект игрока существует

{

if !collision_line(x, y, объект_игрока.x, объект_игрока.y, объект_стены, 0, 0)

{

// Действия противника, когда между ним и игроком нет стены.

}

}

Восклицательный знак перед функцией - это знак отрицания, то есть, он сменяет true на false и false на true. Иначе говоря, без него проверка на русском языке звучала бы как "Если между игроком и противником есть стена", а с ним: "Если между игроком и противником нет стены".

6. Как сделать, чтобы противник двигался за ближайшим союзным персонажем игрока, или к самому игроку (если он ближе всех)?

Ответ: Так как объектов союзных персонажей может быть много, нам нужно обращаться к какому-то одному объекту, а не к каждому по отдельности. Для этого нужно использовать так называемых объектов-родителей (parent). Для начала нужно создать новый объект, родитель для всех союзных персонажей игрока и для него самого, после чего назначить его родителем всем нужным объектам. При обращении к родителю мы будем обращаться ко всем его дочерним объектам - ко всем союзным персонажам и игроку одновременно.

Для определения ближайшего объекта можно использовать функцию instance_nearest. Если ни одного экземпляра искомого объекта в комнате нет, функция возвратит noone, поэтому функцию instance_exists можно не использовать. Код будет выглядеть примерно так:

Код:

var obj;

obj = instance_nearest(x, y, родительский_объект); // Определяем ближайшего персонажа

if obj != noone // Если существует хотя бы один экземпляр объекта родительский_объект (или дочернего объекта), то...

{

/// Двигаемся к нему:

if point_distance(x, y, obj.x, obj.y) > скорость_движения

{

mp_potential_step(obj.x, obj.y, скорость_движения, checkall);

}

else

{

x = obj.x;

y = obj.y;

}

}

Пишите если чё непонятно...)

book



+ CHROM +
AGENTX001Дата: Понедельник, 01 Августа 2011, 23:15 | Сообщение # 2
почётный гцупер
Сейчас нет на сайте
Этих "уроков", больше чем сказок в "Тысяча и одна ночь"... Тупое репонабивание....
CHROMДата: Понедельник, 01 Августа 2011, 23:48 | Сообщение # 3
частый гость
Сейчас нет на сайте
для новичков будет полезно!


+ CHROM +
GameMixДата: Вторник, 02 Августа 2011, 05:26 | Сообщение # 4
старожил
Сейчас нет на сайте
AGENTX001, я даже больше скажу, это не уроки! А просто копипаст! Открой FAQ по Game Maker и прочти главу "ИИ". Весь код от и до скопирован!

CHROM, ты бы хоть комменты свои написал или изменил их чуток. А то от первой буквы до последней скопировал! В общем, или пиши свои уроки или вообще не пиши! angry


Steel Standoff - 2D аркада.
Мои статьи
SalahAdDinДата: Вторник, 02 Августа 2011, 10:14 | Сообщение # 5
постоянный участник
Сейчас нет на сайте
Вот мне интересно. Я покопался в разделе и нашел тонны, если не килотонны уроков для новичков. Когда же кто нибудь напишет более менее сложные уроки для продвинутых пользователей и поделится опытом с профессионалами? Почему никто не затрагивает сложный ии, продвинутые алгоритмы движения, сложную ролевую систему, да мало ли что. Проблемных вопросов хватает, но за них никто не берется. А эти уроки для новичков по сути просто бесполезны, no skill for that.

Фотошоп это не сложно. Немного теории, полезной на практике:
Работа с наложением текстур
Рисуем без планшета
AGENTX001Дата: Вторник, 02 Августа 2011, 10:21 | Сообщение # 6
почётный гцупер
Сейчас нет на сайте
Quote (аТнОтХоАн)
AGENTX001, я даже больше скажу, это не уроки! А просто копипаст! Открой FAQ по Game Maker и прочти главу "ИИ". Весь код от и до скопирован!

Я подозревал, но было влом проверить...
CHROM, эх ты...
MyACTДата: Суббота, 06 Августа 2011, 07:22 | Сообщение # 7
C# CODERS
Сейчас нет на сайте
И зачем это? wink

3дэшечки: https://sketchfab.com/myactyindie
Курентли воркс он: https://myacty.itch.io/raskopnik
as3011Дата: Понедельник, 08 Августа 2011, 19:59 | Сообщение # 8
частый гость
Сейчас нет на сайте
в следующий раз пиши сам, репу минусовать не буду , но учти: пишешь сам- +в репу; копипастишь- - в репу. Что лучше?

BrightSpotДата: Четверг, 11 Августа 2011, 07:56 | Сообщение # 9
заслуженный участник
Сейчас нет на сайте
Quote (аТнОтХоАн)
Открой FAQ по Game Maker и прочти главу "ИИ"

епт уже пару лет на ГМ-е сижу, а такой главы в справке не видел wacko поход нужно чаще туда заглядывать=)))

Добавлено (11.08.2011, 07:56)
---------------------------------------------
эм... не нашел=(



Более мощный компьютер глючит быстрее и точнее.
GameMixДата: Четверг, 11 Августа 2011, 08:14 | Сообщение # 10
старожил
Сейчас нет на сайте
BrightSpot, FAQ != Справка.

Steel Standoff - 2D аркада.
Мои статьи
ЛеонидДата: Четверг, 05 Апреля 2012, 19:33 | Сообщение # 11
постоянный участник
Сейчас нет на сайте
ОГРОМНОЕ СПАСИБО)
FadeBakerДата: Четверг, 05 Апреля 2012, 20:20 | Сообщение # 12
JavaSE Game Developer
Сейчас нет на сайте
CHROM, делать тебе нечего.

Уроки по GM
Minecraft 2D на GM
— Мои проекты —
Blood Harvest [2D] — Original
Blood Harvest [2D]: Remastered Edition
Adventure Craft [2D] — Sandbox
Space Shock [2D] — Scroll Shooter
Intel® Core™ i5-3570K 3.40 GHz, 8 GB RAM, GeForce GTX 750 Ti, Monitor: LG 23EA63V-P.
LaushДата: Четверг, 05 Апреля 2012, 20:30 | Сообщение # 13
почти ветеран
Сейчас нет на сайте
Полностю из FAQ Передрал ты,Даже ссылку на их сайт неоставил!! angry

[PC/Android/iOS/WEB] 30 Days to survive
[PC] Dead Defense
[PC] Саламандра - история пирата
ressДата: Понедельник, 09 Апреля 2012, 17:00 | Сообщение # 14
постоянный участник
Сейчас нет на сайте
Quote (Laush)
Полностю из FAQ Передрал ты,Даже ссылку на их сайт неоставил!!

Из какого FAQ? Я не находил. Дашь ссылочку?

Quote (CHROM)
для новичков будет полезно!

Да, но это их ничему не научит. Просто они будут знать где если что стырить кусочек кода.


Я очень недоволен...
stalker5889Дата: Вторник, 10 Апреля 2012, 10:46 | Сообщение # 15
Свободный игродел
Сейчас нет на сайте
Quote (CHROM)
var dir;

dir = point_direction(x, y, объект_игрока.x, объект_игрока.y);

if abs(dir_difference(image_angle, dir)) <= угол_обзора / 2

{

// Действия противника, если игрок находится в его поле зрения.

}

Во-первых это наглый копипастинг, слово в слово. Во-вторых - ты хоть сам знаешь что я выделил красным??? Хоть бы код скомпилировал.
P.S красным выделен скрипт. Даже в FAQ он не приведён, видимо забыли smile


Форум игроделов » Конструкторы игр и лёгкие в освоении системы разработки игр » Game Maker » Немного для TDS (Несколько полезных скриптов с коментами...)
  • Страница 1 из 1
  • 1
Поиск:

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