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

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

Ответ
 
Aneror

offline
Опыт: 199
Активность:
Помогите нубу с кодом
Эх только начал изучать jass и хочу спросить: "Это правильно или это просто мусор который надо выкинуть, или просто подправить???"
Код:
function Trig_CountPlayer_Actions takes nothing returns nothing
    local integer i = 0 
    local player array p
    local location array c
    local unit array u
    set bj_forLoopAIndex = 1
    set bj_forLoopAIndexEnd = 10
    loop
        exitwhen bj_forLoopAIndex > bj_forLoopAIndexEnd
        if ( GetPlayerSlotState(ConvertedPlayer(GetForLoopIndexA())) == PLAYER_SLOT_STATE_PLAYING ) then
        set i = ( i + 1 )
        set p[i] = ConvertedPlayer(GetForLoopIndexA())
        else
        call DoNothing()
        endif
        set bj_forLoopAIndex = bj_forLoopAIndex + 1
    endloop
    set c[1] = GetRectCenter(gg_rct_Circle_1)
    set c[2] = GetRectCenter(gg_rct_Circle_2)
    set c[3] = GetRectCenter(gg_rct_Circle_3)
    set c[4] = GetRectCenter(gg_rct_Circle_4)
    set c[5] = GetRectCenter(gg_rct_Circle_5)
    set c[6] = GetRectCenter(gg_rct_Circle_6)
    set c[7] = GetRectCenter(gg_rct_Circle_7)
    set c[8] = GetRectCenter(gg_rct_Circle_8)
    set c[9] = GetRectCenter(gg_rct_Circle_9)
    set c[10] = GetRectCenter(gg_rct_Circle_10)
    set bj_forLoopBIndex = 1
    set bj_forLoopBIndexEnd = i
    loop
        exitwhen bj_forLoopBIndex > bj_forLoopBIndexEnd
        call CreateNUnitsAtLoc( 1, 'n001', p[GetForLoopIndexB()], c[GetForLoopIndexB()], bj_UNIT_FACING )
        set u[GetForLoopIndexB()] = GetLastCreatedUnit()
        call RemoveLocation(c[GetForLoopIndexB()]) 
        set bj_forLoopBIndex = bj_forLoopBIndex + 1
    endloop
    endfunction

//===========================================================================
function InitTrig_Init takes nothing returns nothing
    set gg_trg_Init = CreateTrigger(  )
    call TriggerAddAction( gg_trg_Init, function Trig_CountPlayer_Actions )
endfunction
[+] замечание от DioD: безсодержательное название темы

Отредактировано Aneror, 25.07.2013 в 01:10.
Старый 25.07.2013, 00:13
Diaboliko
Silenced by Diaboliko
offline
Опыт: 16,108
Активность:
DoNothing() равносильно пустой строке, его писать нет необходимости.
Массивы игроков выгоднее использовать глобальные(офк если юзаются они заметно более чем однажды)
Вместо локаций лучше использовать координаты.
Вместо того чтобы брать центр региона лучше возьмите среднее арифметическое координат (для каждой оси офк) :)
CreateNUnitsAtLoc создает юнита в локации, используйте другую ф-ю. Если вы пользуетесь JNGP для работы с Jass, упрощайте все ф-и подсвеченные красным.(тело ф-й в нем предоставлено)
Ну и если страдаете излишним перфекционизмом, можете сделать создание юнитов без цикла.
Вдобавок всякие bj_forLoopAIndex и прочие переменные сами по себе являются глобальными, лучше использовать локалки(причину можете поискать в статьях о потоках в вц3)
Элсо, следует обнулять локалки с типами, не являющиеся строчным, целочисленным или с плавающей запятой(вроде только сие типы можно обнулять(читайте статьи в поиске причины))
Элсо возможно в коде допущена логическая ошибка(поверхностно прочел, возможно будет создан юнит для синего и голубого игрока, если играют только синий и любой не голубой игрок) Нет времени вникать, успехов.
Старый 25.07.2013, 06:56
Aneror

offline
Опыт: 199
Активность:
Спс
Цитата:
Сообщение от Diaboliko
Элсо возможно в коде допущена логическая ошибка(поверхностно прочел, возможно будет создан юнит для синего и голубого игрока, если играют только синий и любой не голубой игрок)

Я тоже сначала думал, что нид начинать с 0
Код:
ConvertedPlayer(0)
, но он почему-то фаталит по-этому пишу 1 и начинает с красного!
Цитата:
Сообщение от Aneror
Вместо локаций лучше использовать координаты.
Вместо того чтобы брать центр региона лучше возьмите среднее арифметическое координат (для каждой оси офк)

Можно по подробней------> ссылку_)
Старый 25.07.2013, 12:30
DioD

offline
Опыт: 45,134
Активность:
отладку добавте
Старый 25.07.2013, 12:45
Hate
конь вакуумный
offline
Опыт: 43,033
Активность:
Aneror:
Можно по подробней------> ссылку_)
этого нет в статьях, ибо очевидное не нуждается в объяснении, есть функции, есть поиск по ним в jngp, поднимайте лапки и ищите
локации нужны лишь что бы определить z точки, все, больше они нигде не нужны, так же раскрывайте bj
converted player возвращает игроков как мы обычно это понимаем, на самом деле игроки начинаются с нуля, и первый игрок - имеет нулевой номер, поэтому вам при введении 0 и выдает атата, нужно использовать Player(0)
вопщем на сайте были статьи по оптимизации + на форуме была еще пара достойных тем, ищите
Старый 25.07.2013, 12:59
Aneror

offline
Опыт: 199
Активность:
Цитата:
Сообщение от Hate
вопщем на сайте были статьи по оптимизации + на форуме была еще пара достойных тем, ищите

СПС, буду искать и читать!
Старый 25.07.2013, 13:26
Vadik29
Choice Battle 1.6а
offline
Опыт: 15,845
Активность:
Diaboliko,
Вместо того чтобы брать центр региона лучше возьмите среднее арифметическое координат (для каждой оси офк) :)
GetRectCenterX\Y не, не слышал...
Старый 25.07.2013, 13:53
Diaboliko
Silenced by Diaboliko
offline
Опыт: 16,108
Активность:
Vadik29:
Diaboliko,
Вместо того чтобы брать центр региона лучше возьмите среднее арифметическое координат (для каждой оси офк) :)
GetRectCenterX\Y не, не слышал...
Эта операция будет производиться в ходе игры. Следовательно будут производятся лишние вычисления.
медведь на мозг наступил, пишу логичные вещи нелогично
Старый 25.07.2013, 15:23
quq_CCCP
Я белый и пушистый!
offline
Опыт: 93,429
Активность:
От интересно зачем нужен рект если нам нужно от него только координаты его центра? Неужели нельзя юзать координаты или локейшены... Ах да для особо упоротых если вы не знаете как найти на рельефе нужные вам координаты, то возьмите создайте камеру и перенесите её на нужное вам место, потом просмотрите свойства, там будут координаты камеры и ей угол с маштабом и поля зраения, то что нам интересно копируем и вставляем в код, усё, камеру переносим на следующее место, если его нету то удаляем камеру...
>> скриншоты
<<
Старый 25.07.2013, 15:35
Aneror

offline
Опыт: 199
Активность:
Цитата:
Сообщение от Diaboliko
Вместо локаций лучше использовать координаты

на сколько понял, это вот можно тоже?
Код:
set c[1] = Location(-4608, 4160)
Старый 25.07.2013, 16:12
Nerevar
I'll be back!
offline
Опыт: 18,352
Активность:
quq_CCCP:
Ах да для особо упоротых
quq_CCCP:
возьмите создайте камеру и перенесите её на нужное вам место, потом просмотрите свойства, там будут координаты камеры и ей угол с маштабом и поля зраения, то что нам интересно копируем и вставляем в код, усё, камеру переносим на следующее место, если его нету то удаляем камеру...
quq_CCCP:
для ОСОБО УПОРОТЫХ
а вот для нормальных людей можно посмотреть в левом нижнем углу координаты точки под мышью,когда по рельефу водишь
Старый 25.07.2013, 16:16
влад10011

offline
Опыт: 2,337
Активность:
quq_CCCP, Наведи на любую точку на карте и в левом нижнем углу(WE) будут координаты этой точки(включая высоту)
Старый 25.07.2013, 16:46
quq_CCCP
Я белый и пушистый!
offline
Опыт: 93,429
Активность:
Nerevar, как ты скопипастиш, а тут именно для особо... так как копипаст работает... Для вас не спорю, этот гайд ничего нового не открыл...
Старый 25.07.2013, 16:48
Ответ

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

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

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

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



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