Сейчас 18:15:38 Пятница, 22 ноября, 2024 год
[ x ] Главная ⇒ Форум ⇐ RSS Файлы Cтатьи Картинки В о й т и   или   з а р е г и с т р и р о в а т ь с я


[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: PUVer, SirNikolas, Ty3uK  
Скилл - Юнит приблизился к другому
SmartarosДата: Понедельник, 03 Декабря 2012, 00:19:25 | Сообщение # 1
9 уровень
Группа: Проверенные
Сообщений: 810
Награды: 0
Репутация: 135
Блокировки:
как делать скиллы типа мин и ловушек триггерно, я делал через привязки таймеров и проверкой юнитов вокруг, но это нагружает комп, есть у кого нибудь код конструкции, который по минимуму нагружает железо?
 

ExtrematorДата: Понедельник, 03 Декабря 2012, 00:32:31 | Сообщение # 2
10 уровень
Группа: Проверенные
Сообщений: 3199
Награды: 0
Репутация: 1018
Блокировки:
создаешь мину и добавляешь её с ивентом "приблизился на дистанцию" в триггер с действиями взрыва
 

SmartarosДата: Понедельник, 03 Декабря 2012, 00:36:06 | Сообщение # 3
9 уровень
Группа: Проверенные
Сообщений: 810
Награды: 0
Репутация: 135
Блокировки:
т.е. без эвентов никак?
 

ExtrematorДата: Понедельник, 03 Декабря 2012, 00:37:25 | Сообщение # 4
10 уровень
Группа: Проверенные
Сообщений: 3199
Награды: 0
Репутация: 1018
Блокировки:
Quote (Smartaros)
т.е. без эвентов никак?

для тебя это сложно? оО

помойму просто... создал мину -> добавил имент... ивент сработал - взорвал мину/нанёс урон
 

SmartarosДата: Понедельник, 03 Декабря 2012, 00:39:01 | Сообщение # 5
9 уровень
Группа: Проверенные
Сообщений: 810
Награды: 0
Репутация: 135
Блокировки:
мина взорвалась - эвент остался, это нехорошо. Мин может быть очень много
 

ExtrematorДата: Понедельник, 03 Декабря 2012, 00:56:42 | Сообщение # 6
10 уровень
Группа: Проверенные
Сообщений: 3199
Награды: 0
Репутация: 1018
Блокировки:
Quote (Smartaros)
мина взорвалась - эвент остался, это нехорошо. Мин может быть очень много

мина ушла из игрового процеса... и... ивент с ней как бы тоже...

а вообще нада посмрашивать...
 

SmartarosДата: Понедельник, 03 Декабря 2012, 01:05:48 | Сообщение # 7
9 уровень
Группа: Проверенные
Сообщений: 810
Награды: 0
Репутация: 135
Блокировки:
протести это на карте 5к+ декораций на 1к мин и отпишись че да как, фрапс надеюсь есть
 

TohaAKAДата: Понедельник, 03 Декабря 2012, 05:53:24 | Сообщение # 8
6 уровень
Группа: Проверенные
Сообщений: 160
Награды: 0
Репутация: 45
Блокировки:
Для каждой мини создавать триггер, динамически. При взрыве удалять его и мину. Учим джазз, в типа лучшем пособии это есть.

 

SirNikolasДата: Понедельник, 03 Декабря 2012, 10:14:00 | Сообщение # 9
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
Quote (Extremator)
мина ушла из игрового процеса... и... ивент с ней, как бы, тоже...
Нет.

Думаю, надо использовать один таймер с периодом не меньше .25. При этом перебирать, используя одну (глобальную) группу.


 

SmartarosДата: Понедельник, 03 Декабря 2012, 22:54:22 | Сообщение # 10
9 уровень
Группа: Проверенные
Сообщений: 810
Награды: 0
Репутация: 135
Блокировки:
Quote (TohaAKA)
Учим джазз

шутник
Quote (SirNikolas)
Думаю, надо использовать один
таймер с периодом не меньше .25. При
этом перебирать, используя одну
(глобальную) группу.
А ты подобное не делал, думал накатаешь код какой-нибудь как обычно) про группу еще понимаю, но один таймер... на все мины, напиши плз.
 

SirNikolasДата: Вторник, 04 Декабря 2012, 12:23:10 | Сообщение # 11
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
Quote (Smartaros)
думал накатаешь код какой-нибудь как обычно)
Должны же вы сами чему-то учиться)
Ладно, накатаю.


 

SmartarosДата: Среда, 05 Декабря 2012, 20:08:48 | Сообщение # 12
9 уровень
Группа: Проверенные
Сообщений: 810
Награды: 0
Репутация: 135
Блокировки:
накатал?
 

SirNikolasДата: Среда, 05 Декабря 2012, 20:31:48 | Сообщение # 13
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
Code
library_once G { constant group G = CreateGroup(); }

scope Trap {
    include "cj_types_priv.j";
   
    define {
        private PERIOD = .1;
        private RADIUS = 200.;
    }
   
    private bool Cond(unit u) {
        return GetWidgetLife(u) > .405;//Сюда еще можно добавить условие, что юнит - не мина.
    }
   
    private constant timer T = CreateTimer();
    private unit trap[ ];
    private int top = 0;
   
    private void onTimer() {
        for (int i = 0; i < top; i++) {
            for (unit u; UnitsInRange(GetWidgetX(trap[i]), GetWidgetY(trap[i]), RADIUS) use G) {
                if u != trap[i] && Cond(u) {
                    KillUnit(u);
                    //Boom!
                    if --top == 0 { PauseTimer(T); }
                    else { trap[i] = trap[top]; }
                }
            }
        }
    }
   
    public void Add(unit u) {
        trap[top++] = u;
        if top == 1 { TimerStart(T, PERIOD, true, function onTimer); }
    }
   
    public bool Remove(unit u) {
        for (int i = 0; i < top; i++) {
            if u == trap[i] {
                if --top == 0 { PauseTimer(T); }
                else { trap[i] = trap[top]; }
                return true;
            }
        }
        return false;
    }
}


 

  • Страница 1 из 1
  • 1
Поиск:

Copyright © 2006 - 2024 Warcraft3FT.info При копировании материалов c сайта ставьте, пожалуйста, активную обратную ссылку на нас • Design by gReeB04ki ©
Хостинг от uCoz