Game Maker - создание игр | HellRoom Games
Март 26, 2025, 01:04:41 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.

Войти
Новости:
 
   Начало   Game Maker Помощь Правила форума Поиск Календарь Войти Регистрация  
Страниц: [1]   Вниз
  Печать  
Автор Тема: step: у каждого по чуть-чуть или много в одном  (Прочитано 2949 раз)
0 Пользователей и 1 Гость смотрят эту тему.
a7s1h1
Активный участник
*****

Репутация: 27
Offline Offline

Пол: Мужской
API: Game Maker 8.0 Pro
Сообщений: 457


« : Июль 14, 2011, 09:45:04 »

Есть 1 экземпляр объекта1(герой) и более сотни экземпляров объекта2(кирпич), с которыми взаимодействует герой. При этом взаимодействии с каждым экземпляром кирпича может при определённых условиях происходить какое-либо действие.
Какой вариант проверки для совершения действия с кирпичом лучше для производительности?:
1. сделать эти проверки в степе кирпича (тогда кода героя и кирпича не будут прегружены, но каждый из экземпляров кирпича будет каждый шаг делать проверку)
2. сделать проверку в степе героя (тогда в коде кирпича останется только то, что не связано с героем, а проверка будет происходить только одним объектом (героем, который в единственном экземпляре) но у код героя значительно увеличится (а там и так уже дофига)).


Знатоки, прокомментируйте, пожалуйста.
Записан

Dva_Kota
Гл. Администратор
*

Репутация: 636
Offline Offline

Пол: Мужской
Награды:
3000 сообщений!За постоянность! [500 дней на форуме]За лояльность! [+500 репутации]Настоящий игродел!Тру Админ :D1 место за игру: Energy Wars (Конкурс Золотые Руки)...
API: GameMaker Studio Standard
Сообщений: 3245



« Ответ #1 : Июль 14, 2011, 10:28:59 »

Код лучше ставить в степ тем объектам, экземпляров которых меньше всего в комнате. но если у игрока будет стоять with(кирпич){} то код будет выполняться для каждого кирпича... есть еще вариант: Ставить у игрока деактивацию всех кирпичей которые чуть дальше от игрока (например на расстоянии большем чем 100) потом выполнить with(кирпич){} а потом опять активировать все кирпичи. Тогда код будет выполнен не для всех кирпичей, а только для ближайших.
Записан

a7s1h1
Активный участник
*****

Репутация: 27
Offline Offline

Пол: Мужской
API: Game Maker 8.0 Pro
Сообщений: 457


« Ответ #2 : Июль 14, 2011, 11:20:48 »

Ставить у игрока деактивацию всех кирпичей которые чуть дальше от игрока
Отличная идея, спасибо!
А это можно реализовать в подобном виде?:
with (экземпляры кирпичей не дальше 100 пикселей)
{код}


Добавлено: Июль 14, 2011, 11:34:33
Стоп! не уверен, что деактивация подходит - у кирпичей есть свойства, не зависящие от героя, которые должны выполняться постоянно. Так что отключать кирпичи нельзя.

Можно ли как-то вместо этого сделать, чтобы не "отключались дальние кирпичи", а "включались только ближние", т.е. в степе у героя ставить проверку расстояния до кирпичей и после этого производить необходимые действия через with только с нужными? (вобщем, просто повторил предыдущий вопрос)

Добавлено: Июль 14, 2011, 12:00:19
Записан

Dva_Kota
Гл. Администратор
*

Репутация: 636
Offline Offline

Пол: Мужской
Награды:
3000 сообщений!За постоянность! [500 дней на форуме]За лояльность! [+500 репутации]Настоящий игродел!Тру Админ :D1 место за игру: Energy Wars (Конкурс Золотые Руки)...
API: GameMaker Studio Standard
Сообщений: 3245



« Ответ #3 : Июль 14, 2011, 15:43:31 »

Отличная идея, спасибо!
А это можно реализовать в подобном виде?:
with (экземпляры кирпичей не дальше 100 пикселей)
{код}

Плохой вариант: в таком случае все равно будут проверены все объекты.



Стоп! не уверен, что деактивация подходит - у кирпичей есть свойства, не зависящие от героя, которые должны выполняться постоянно. Так что отключать кирпичи нельзя.

Вот здесь ты не прав: деактивировать нужно только перед выполнением проверки, а потом сразу активировать. И код у кирпичей будет выполняться как положено. Я это использовал на практике, отлично работает.
Записан

a7s1h1
Активный участник
*****

Репутация: 27
Offline Offline

Пол: Мужской
API: Game Maker 8.0 Pro
Сообщений: 457


« Ответ #4 : Июль 14, 2011, 16:28:30 »

всё понял, просто прощёлкал фразу
потом опять активировать все кирпичи
А не подскажешь код, чтобы
Ставить у игрока деактивацию всех кирпичей которые чуть дальше от игрока (например на расстоянии большем чем 100) потом выполнить with(кирпич){} а потом опять активировать все кирпичи.
? whistling
Записан

Dva_Kota
Гл. Администратор
*

Репутация: 636
Offline Offline

Пол: Мужской
Награды:
3000 сообщений!За постоянность! [500 дней на форуме]За лояльность! [+500 репутации]Настоящий игродел!Тру Админ :D1 место за игру: Energy Wars (Конкурс Золотые Руки)...
API: GameMaker Studio Standard
Сообщений: 3245



« Ответ #5 : Июль 14, 2011, 16:36:53 »

Код:
instance_deactivate_object(кирпич);
instance_activate_region(x-100,y-100,x+100,y+100,true);
with(кирпич){};
instance_activate_object(кирпич);
Записан

a7s1h1
Активный участник
*****

Репутация: 27
Offline Offline

Пол: Мужской
API: Game Maker 8.0 Pro
Сообщений: 457


« Ответ #6 : Июль 14, 2011, 17:19:19 »

Код:
instance_deactivate_object(кирпич);
instance_activate_region(x-100,y-100,x+100,y+100,true);
with(кирпич){};
instance_activate_object(кирпич);
круто! это не только помогло, но и добавило кое-что, что я сначала хотел сделать, но думал, что не смогу и забил. а теперь вот неожиданно это появилось само! ;)
короче, спасибо огромное, снова ты меня выручил! Уважуха
Записан

Dva_Kota
Гл. Администратор
*

Репутация: 636
Offline Offline

Пол: Мужской
Награды:
3000 сообщений!За постоянность! [500 дней на форуме]За лояльность! [+500 репутации]Настоящий игродел!Тру Админ :D1 место за игру: Energy Wars (Конкурс Золотые Руки)...
API: GameMaker Studio Standard
Сообщений: 3245



« Ответ #7 : Июль 14, 2011, 17:35:08 »

Похожий код активации/деактивации есть в справке
Записан

Страниц: [1]   Вверх
  Печать  
 
Перейти в:  

HellRoom Games © 2006-2012 All Rights Reserved
Powered by SMF 1.1.21 | SMF © 2013, Simple Machines
Страница сгенерирована за 0.084 секунд. Запросов: 27.