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

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

Закрытая тема
 
LostCoast

offline
Опыт: 2,633
Активность:
структуры\таймеры
Код:
globals 
timer t = CreateTimer()
endglobals

struct cord
 real x = 0
endstruct

function Sym takes nothing returns nothing
local cord a
set a.x = a.x + 1 
call BJDebugMsg(R2S(a.x))
endfunction

function Trig_t_Actions takes nothing returns nothing 
local cord a = cord.create()
set a.x = a.x + 1
call TimerStart(t,1.00,true,function Sym)
endfunction

function InitTrig_t takes nothing returns nothing
    set gg_trg_t = CreateTrigger(  )
    call TriggerAddAction( gg_trg_t, function Trig_t_Actions )
endfunction


начал изучать vjass можете мне объяснить как использовать структуры с таймерами. нашел один спелл который не работает, не знаю почему, но там нашел как использовать. пример сверху, поправите код.
[+] замечание от Doc: 4.5 (тема не в том разделе)
Старый 16.09.2011, 20:24
Doc

offline
Опыт: 63,163
Активность:
globals
cord a
endglobals
Старый 16.09.2011, 21:10
LostCoast

offline
Опыт: 2,633
Активность:
не работает.объясни мне принцип структуры я поэкспериментировал с ней и у меня вопрос переменные структуры работают как локальные переменные, то есть в пределах одной функции?
Старый 16.09.2011, 21:25
Doc

offline
Опыт: 63,163
Активность:
Нет они работают в пределах одного экземпляра структуры, если не статические. Кури основы ООП.
Старый 16.09.2011, 21:34
LostCoast

offline
Опыт: 2,633
Активность:
расшифруй ООП . можешь набросать простой пример где таймер запускает функцию, в которой просто будет увеличиваться переменная структуры на 1 ,хоть думаю по моему примеру ты понял что я хотел сделать. или пример переноса одной переменной структуры в другую функцию, или это будет одно и тоже?
Старый 16.09.2011, 21:40
Doc

offline
Опыт: 63,163
Активность:
Объектно-ориентированное программирование.
globals 
timer t = CreateTimer()
cord a
endglobals

struct cord
 real x = 0
endstruct

function Sym takes nothing returns nothing
set a.x = a.x + 1 
call BJDebugMsg(R2S(a.x))
endfunction

function Trig_t_Actions takes nothing returns nothing 
set a = cord.create()
set a.x = a.x + 1
call TimerStart(t,1.00,true,function Sym)
endfunction

function InitTrig_t takes nothing returns nothing
    set gg_trg_t = CreateTrigger(  )
    call TriggerAddAction( gg_trg_t, function Trig_t_Actions )
endfunction
Если нужно муи - перебор/хеш в руки.

Отредактировано Doc, 16.09.2011 в 22:11.
Старый 16.09.2011, 21:44
LostCoast

offline
Опыт: 2,633
Активность:
с хешем у меня проблем нету, могу на нем сделать, но решил начать учить vjass. твой код не работает, я так уже пробовал.

посмотрев некотрые примеры спелов я сделал свой простой, в чем ошибки , почему таймер не запускает функцию?

» раскрыть
Код:
scope A initializer Init

struct cord
 real x = 0
endstruct

function Sym takes nothing returns nothing
local cord a
call BJDebugMsg(R2S(a.x))
endfunction

function Trig_t_Actions takes nothing returns nothing 
local cord a = cord.create()
local timer t = CreateTimer()
call TimerStart(t,1.,true, function Sym)
endfunction

function Init takes nothing returns nothing
    set gg_trg_t = CreateTrigger(  )
    call TriggerAddAction( gg_trg_t, function Trig_t_Actions )
endfunction

endscope

Отредактировано LostCoast, 16.09.2011 в 22:11.
Старый 16.09.2011, 21:48
Doc

offline
Опыт: 63,163
Активность:
ой да, строчку забыл убрать одну. попробуй сейчас.
Старый 16.09.2011, 22:11
LostCoast

offline
Опыт: 2,633
Активность:
все равно не работает посмотри пример выше.
Старый 16.09.2011, 22:14
LostCoast

offline
Опыт: 2,633
Активность:
Цитата:
Сообщение от Faion
инкапсулированы ._.


хорошее слово, я пойму если ты сделаешь второй мой пример рабочим)хотя как я понял в структуре должен быть какой-нибудь метод и тогда её переменные будут работаь на все функции?)
Старый 16.09.2011, 22:20
Faion
Noblesse Oblige
offline
Опыт: 30,395
Активность:
Код:
library Test initializer Init
{

    private timer Timer = CreateTimer()
    private constant float Time = 1.0
    private cord Cord


    struct cord
    {
        int x = 0
    }

    private void Sum()
    {
        Cord.x++
        BJDebugMsg(I2S(Cord.x))
    }

    private void Action()
    {
        Cord = cord.create()
        Cord.x++
        TimerStart(Timer,Time,true,function Sum)
    }

    private void Init()
    {
        trigger trig = CreateTrigger()
        TriggerAddAction(trig, function Action )
        trig = null
    }
}


Код:
library Test initializer Init
{

    private timer Timer = CreateTimer()
    private constant float Time = 1.0
    private cord array Cord


    struct cord
    {
        int x = 0
    }

    private void Sum()
    {
        Cord[0].x++
        BJDebugMsg(I2S(Cord[0].x))
    }

    private void Action()
    {
        Cord[0] = cord.create()
        Cord[0].x++
        TimerStart(Timer,Time,true,function Sum)
    }

    private void Init()
    {
        trigger trig = CreateTrigger()
        TriggerAddAction(trig, function Action )
        trig = null
    }
}
Старый 16.09.2011, 22:59
LostCoast

offline
Опыт: 2,633
Активность:
спасибо, а на vjass слабо?)) cjass не знаю, хотя что происходит в коде понимаю.но не понимаю как переменная Cord[0].x++ заработала в другой функции.


почему не работает вот этот пример?

Код:
scope A initializer Init

struct cord
 real x = 0
endstruct

function Sym takes nothing returns nothing
local cord a
call BJDebugMsg(R2S(a.x))
endfunction

function Trig_t_Actions takes nothing returns nothing 
local cord a = cord.create()
local timer t = CreateTimer()
call TimerStart(t,1.,true, function Sym) 
endfunction

function Init takes nothing returns nothing
    set gg_trg_t = CreateTrigger(  )
    call TriggerAddAction( gg_trg_t, function Trig_t_Actions )
endfunction

endscope
Старый 16.09.2011, 23:12
Faion
Noblesse Oblige
offline
Опыт: 30,395
Активность:
Цитата:
Сообщение от LostCoast
Код:
function Sym takes nothing returns nothing
local cord a
call BJDebugMsg(R2S(a.x))
endfunction


Потому что структура не создана. Она у тебя локальная, в моем же случае структура глобальная, во 2 случае там массив глобальных структур.
Старый 16.09.2011, 23:27
LostCoast

offline
Опыт: 2,633
Активность:
понял, тогда другой вопрос как сделать всю структуру глобальной?

так как если писать
globals
cord Cord
endglobals
я делаю только переменную Cord глобальной, а если мне нужно в одной функции создать структуру, записать нужные значения в переменные, запустить таймер и в таймере использовать переменные из структуры?
Старый 16.09.2011, 23:40
Faion
Noblesse Oblige
offline
Опыт: 30,395
Активность:
Выше написано как сделать глобальную, и массив глобальных ._.
Старый 16.09.2011, 23:43
LostCoast

offline
Опыт: 2,633
Активность:
помоему я нашел ответ, единственное поправь меня если что не так. последний вопрос: могу ли я сохранять в хеш струтуру и переносить её в другую функцию?


Код:
function B takes nothing returns nothing
local timer t = GetHandleId(GetExpiredTimer())
local struct A = LoadInteger(udg_Table,GetHandleId(t),0)
endfunction

function A takes nothing returns nothing
local struct A = struct.create()
local timer t = CreateTimer()
call SaveInteger(udg_Table,GetHandleId(t),0,A)
endfunction
Старый 16.09.2011, 23:54
Doc

offline
Опыт: 63,163
Активность:
Да, структура это Integer
Старый 17.09.2011, 00:01
LostCoast

offline
Опыт: 2,633
Активность:
Doc, ок. Как лучше работать со структурами, делаю их глобальными или же с помощью хеша локальными,принципиальная разница есть?(я разобрался в структурах урааа).

Отредактировано LostCoast, 17.09.2011 в 00:55.
Старый 17.09.2011, 00:35
Faion
Noblesse Oblige
offline
Опыт: 30,395
Активность:
ибо static, статические объекты не нужно и нельзя создавать.
Старый 17.09.2011, 00:40
LostCoast

offline
Опыт: 2,633
Активность:
почему не работает код такого вида?

» раскрыть
Код:
struct S
unit u

static method create takes unit caster returns S
local S dat = S.allocate()
set dat.u = CreateUnit(GetTriggerPlayer(),UID,GetUnitX(caster),GetUnitY(caster),bj_RADTODEG)  
return dat
endmethod
endstruct

function CreateU takes nothing returns nothing
local S s
set s = S.create(GetTriggerUnit())
endfunction

function Start takes nothing returns nothing
local timer t = CreateTimer()
call TimerStart(t,0.5,true,function CreateU)
endfunction
Старый 17.09.2011, 18:43
Закрытая тема

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

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

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

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



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