XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Warcraft> Академия: форум для вопросов> Jass
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Закрытая тема
 
ShadoW DaemoN

offline
Опыт: 37,078
Активность:
ADOLF, ошибки есть... В цикле с бинарным буратино:
Код:
loop
  // было так:
  if glb[i].xtype>0x01 then
  // а нужно так:
  if glb[i].xtype<0x02 then
  // ...

Еще забыл в LoopEX вставить строку set fps_cnt=fps_cnt+fps :) Больше ошибок не нашел.
И загонял бы большой код под cut, а то страницы долго грузятся и читать неудобно.

FPS рассчитывается некорректно. Кстати, без вычислений, просто на глаз, можно определить, что лучше:
Evaluate - у меня при обычном тесте лагал страшно, evaluate+ даже не запускал.
Binary Tree - лучше, но при увеличении кол-ва типов снарядов начинает тормозить.
Multiple Loops - это, очевидно, самый быстрый вариант. Собственно, его и буду юзать).
Старый 05.08.2008, 21:11
Sebra

offline
Опыт: 5,603
Активность:
Цитата:
? именно "--" хз

Именно. Си, сдвинутый в сторону ассемблера, максимальной компактности, эффективности, подчинения кодеру.
Стоит сказать, что там нет предпочтения операторов: x=2+3*4 => x=20. Не нравится - ставь скобки.
Цитата:
смотря какой кодер/компилятор ;) ну впринципе да, но это все относительно, сказать "делай так а не так" согласен нельзя
Соревнуясь с компилятором, ты соревнуешься с его кодером.
Только твоя работа штучная, а его - загодя и на всех.
Ошибки ты отследишь и отладишь, а он не должен допустить ни одной.
Цитата:
смысл?
Ну, раз карту уже сделал, хоть покритикуешь.
» макрос
Код:
//! textmacro RTS takes NAMEWORD, TYPEWORD
scope RTS_$NAMEWORD$
    globals
        private $TYPEWORD$ array v
        private integer n=-1
    endglobals

    private function RTS_$NAMEWORD$_loop takes nothing returns nothing
        local integer i
            set i=0
            loop
                exitwhen i==n
                if RTS_$NAMEWORD$_step(v[i]) then
                    set i=i+1
                else
                    set n=n-1
                    set v[i]=v[n]
                endif
            endloop
        endif
    endfunction

    public function RTS_$NAMEWORD$_add takes $TYPEWORD$ o returns nothing
        if n=-1 then
            set n=0
            call TimerStart(CreateTimer(),0.04,true,function RTS_$NAMEWORD$_loop)
        endif
        set v[n]=o
        set n=n+1
    endfunction
endscope
//! endtextmacro

struct Rocket   //for example
    real x
    real y
    string model
endstruct

function RTS_Rock_step takes Rocket o returns boolean
    //do something with argument
//    if don't need it anymore then
//        call o.destroy() //if it is a struct (can be any type)
//        return false
//    else //let it be
//        return true
//    endif
endfunction
//! runtextmacro RTS("Rock","Rocket")

function Trig_RTSmacro_Actions takes nothing returns nothing
    local Rocket r=Rocket.create()
    set r.x=0
    set r.y=0
    set r.model=""
    call RTS_Rock_add(r)
endfunction

Добавил макрос.

Отредактировано Sebra, 05.08.2008 в 23:55.
Старый 05.08.2008, 22:30
adic3x

offline
Опыт: 107,539
Активность:
Цитата:
В цикле с бинарным буратино

рили? хм, ну в любом случае на результаты теста повлиять это не должно было т.к. оно всеравно кажется 2 ифа срабатывает

Sebra, ну впринципе на каждый тип по таймеру хз, имхо всетаки один лучше)

Цитата:
Еще забыл в LoopEX вставить строку set fps_cnt=fps_cnt+fps

я его не вставил предмамеренно т.к. у таймера есть минимальный период сработки, а в + циклах фпс всеравно больше чем в обычных, так что все верно)))

я собстно на глаз и смотрел - как и следовало ожидать луп самый быстрый и! во много удобный) т.е. можно былобы и макросами его сделать...

Цитата:
Си, сдвинутый в сторону ассемблера, максимальной компактности, эффективности, подчинения кодеру

хз, вообще не слышал, с другой стороны сам по себе синтаксис асм достаточно компактный

тем более что фичя асм в т.ч. и в том, что можно использовать все возможности платформы + заточить код по то, что надо

ADOLF добавил:
Цитата:
Только твоя работа штучная, а его - загодя и на всех

его работа ковеер, кодера - ручная ;)
Старый 06.08.2008, 16:36
Sebra

offline
Опыт: 5,603
Активность:
Цитата:
Sebra, ну впринципе на каждый тип по таймеру хз, имхо всетаки один лучше)

С одним таймером 1) неудобно ставить разный период обработки (я сразу не подумал);
2) неудобно макросом - всё надо ручками подгонять;
3) больше шансов нарваться на закрытие потока.
Да и, кажется, ничем не хуже, но удобнее.

Цитата:
вообще не слышал,
Поинтересуйся, оцени, поделись своим мнением.
Вместо ассемблера можно в кодах писать, а смысл?

Цитата:
его работа ковеер, кодера - ручная

Конвейер (завод) сложнее, зато эффективнее мастерской.
Не вина инженеров заводя, что Левша может творить чудеса.
Старый 06.08.2008, 19:05
adic3x

offline
Опыт: 107,539
Активность:
Цитата:
Вместо ассемблера можно в кодах писать

ну и в самом асм мона в коде писать, так что смысла нету...

Цитата:
Поинтересуйся, оцени, поделись своим мнением

у, ну хз, вообще времени честено говоря нету=/

Цитата:
1) неудобно ставить разный период обработки

ммм, ну он врпниципе может быть один имхо

Цитата:
неудобно макросом - всё надо ручками подгонять

копипаст) насчет потока с одной стороны да, но опять же надо смотреть по месту, ну впринципе имхо оба вариант вполне еффективны)
Старый 07.08.2008, 12:33
Sebra

offline
Опыт: 5,603
Активность:
Ну да, конечно всё можно обработать напильником.
Но это неудобно. А макросы - какая-никакая система.
Уже можно пользоваться.
Про "С--" ссылки скину в приват, потрать 5 минут, специально для тебя искал.
Старый 07.08.2008, 18:39
Sebra

offline
Опыт: 5,603
Активность:
Прошу прощения за повторный пост, но иначе, думаю, не заметится.
Сейчас заметил, что в моём макросе при использовании handle в качестве TYPEWORD появляется их копирование. Это не создаёт серьёзных утечек, всё равно всё перезапишется и сотрётся.
Интересует ваше мнение по поводу побочных эффектов.
Старый 08.08.2008, 22:08
adic3x

offline
Опыт: 107,539
Активность:
Цитата:
handle

вроде же тип переменной? ну так будет ашипка или что?
Старый 08.08.2008, 22:20
Sebra

offline
Опыт: 5,603
Активность:
В макрос подставляется "имя макроса" и "тип аргумента", который хранится в массиве.
В массиве он свободно копируется, но не затирается нулём (против утечек).
Ввиду того, что старую копию никто потом не читает, считаю, утечек нет.
Цитата:
Интересует ваше мнение по поводу побочных эффектов.

... связанных с несвоевременным освобождением хэндлов.
Старый 08.08.2008, 23:38
adic3x

offline
Опыт: 107,539
Активность:
Цитата:
связанных с несвоевременным освобождением хэндлов

локальная переменная хендл (с 0х100000 (dec - 1048576) где то или больше (зрить через РБ вывод месага (ну т.е. юниты, тригеры, таймеры и т.д.))) не обнуленная == утечка

Отредактировано ShadoW DaemoN, 09.08.2008 в 14:47.
Старый 09.08.2008, 09:11
Sebra

offline
Опыт: 5,603
Активность:
Так локалок вообще нет. Кроме integer счётчика.
ADOLF видимо в несознательном состоянии. :)

Отредактировано Sebra, 09.08.2008 в 18:14.
Старый 09.08.2008, 17:59
ShadoW DaemoN

offline
Опыт: 37,078
Активность:
Sebra, а, собственно, зачем там хендлы юзать? Все можно сделать через структуры. Но, по идее, ничего плохого не должно быть, так как не идет обращение к отработанным элементам массива.
Кстати:
Код:
public function RTS_$NAMEWORD$_add takes $TYPEWORD$ o returns nothing
// а надо:
public function add takes $TYPEWORD$ o returns nothing
Старый 10.08.2008, 15:16
kvaDrug

offline
Опыт: 1,601
Активность:
Вопрос по теме: а что насчет вместо таймера луп+TriggerSlipAction?
Старый 13.08.2008, 12:17
alexkill

offline
Опыт: 19,072
Активность:
Цитата:
Сообщение от kvaDrug
Вопрос по теме: а что насчет вместо таймера луп+TriggerSlipAction?


Ответ здесь
Старый 13.08.2008, 12:44
Sebra

offline
Опыт: 5,603
Активность:
Цитата:
зачем там хендлы юзать? Все можно сделать через структуры

Так я ж не проверяю, вдруг кто-то хендл засунет.
Конечно предполагались структуры.
Я вот не придумал серьёзного способа использовать этот макрос с integer аргументом.

Цитата:
Но, по идее, ничего плохого не должно быть, так как не идет обращение к отработанным элементам массива.
и со временем старые значения затираются новыми.

Признаюсь честно, макрос в карте не тестировал.
А принцип именования public функций слегка упустил.
Старый 13.08.2008, 19:26
Закрытая тема

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 02:03.