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

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

Ответ
 
Skino

offline
Опыт: 4,683
Активность:
Ломаный тригер
Почему когда я создаю тригер вот с таким кодом :
Код:
library MoveSys initializer IniMove // Здесь объявляется функция-инициализатор

private function Engine takes nothing returns nothing

endfunction

function IniMove takes nothing returns nothing
        // нам таймер в глобалку сохранять незачем, так как он работает всю игру
        // период 0.025 выбран в результате практики, при 0.05 видны "рывки"
        call TimerStart(CreateTimer(), 0.025, true, function Engine)
endfunction

endlibrary

У меня просто не запускаеться вар? Я удадлил всё лишнее, и всё равно...
Старый 18.12.2009, 09:20
Sunn
To feel joy, not be blue
offline
Опыт: 4,975
Активность:
у тебя ф-я Engine приватная и после компиляции имеет в названии приватный префикс, тоесть ты в таймер передаешь несуществующую ф-ю. Либо убери private либо посмотри в вжасс мануале подетальнее про эти префиксы...
вроде она MoveSys__Engine будет называтся.
Старый 18.12.2009, 10:54
Skino

offline
Опыт: 4,683
Активность:
Бесполезно. Та же проблема.
Старый 18.12.2009, 10:58
XOR

offline
Опыт: 38,159
Активность:
Сделай специально ошибку в коде пониже, и смотри настоящее название функции
Старый 18.12.2009, 11:03
Skino

offline
Опыт: 4,683
Активность:
Сделай специально ошибку в коде пониже, и смотри настоящее название функции
Можно просто обратно включить проверку кода WE
Старый 18.12.2009, 11:27
_Red

offline
Опыт: 4,095
Активность:
по моему у тебя vJass не включен, ведь если убрать library то все работает
Старый 18.12.2009, 12:45
Skino

offline
Опыт: 4,683
Активность:
по моему у тебя vJass не включен, ведь если убрать library то все работает
А как это узнать?
Старый 18.12.2009, 17:50
XOR

offline
Опыт: 38,159
Активность:
В JNGP - JassHelper - enable
Рэд, приваты без библиотеки /скопа выдают ошибки
Старый 18.12.2009, 18:06
DragonSpirit
у - уходи
offline
Опыт: 22,625
Активность:
Skino, а так будет работать?
function Engine takes nothing returns nothing

endfunction

function IniMove takes nothing returns nothing
        call TimerStart(CreateTimer(), 0.025, true, function Engine)
endfunction
правда инициализацию надо немного по другму сделать =)
Старый 18.12.2009, 22:47
Skino

offline
Опыт: 4,683
Активность:
Всё спасибо химик, я понял в чём проблема, но теперь немного повозившись у меня появилась другая :
Ошибка тут - сall SetUnitX(b.u, GetUnitX(b.u) + b.v.x*0.025)
Пишет : V is not a member of body, разъесните в чем проблема пожалуйста!
» code
library MoveSys initializer IniMove

globals
    body array mvs_Sb [1000]
    integer mvs_si = -1
endglobals

struct vector
    real x
    real y 
    real z
    static method GetFrom2Locs takes real ax,real ay,real az,real bx,real by,real bz returns vector
        local vector v = vector.create()
            set v.x = bx-ax
            set v.y = by-ay
            set v.z = bz-az
            return v
    endmethod
    method Summ takes vector a returns nothing
        set this.x = this.x + a.x
        set this.y = this.y + a.y
        set this.z = this.z + a.z
    endmethod  
    method Multiply takes real k returns nothing
        set this.x = k*this.x
        set this.y = k*this.y 
        set this.z = k*this.z
    endmethod
    method Module takes nothing returns real
        return SquareRoot(this.x*this.x+this.y*this.y+this.z*this.z)
    endmethod
    method Norm takes nothing returns nothing
    local real m = SquareRoot(this.x*this.x+this.y*this.y+this.z*this.z)
        set this.x = this.x/m
        set this.y = this.y/m
        set this.z = this.z/m
    endmethod
endstruct

struct body
    unit u
    static method Create takes unit u returns body
        local body b = body.create()
            set b.u = u
            call UnitAddAbility(u,'Amrf')
            call UnitRemoveAbility(u,'Amrf')  
        return b
    endmethod
    method Destroy takes nothing returns nothing
        call this.destroy()
    endmethod
    method Start takes nothing returns boolean
      if mvs_si < 1000 then  
        set mvs_si = mvs_si + 1
        set mvs_Sb[mvs_si] = this
        return true
      else
        return false
      endif
    endmethod
endstruct

private function Engine takes nothing returns nothing
    local integer i = 0
    local body b
    loop
        exitwhen i > mvs_si
            if mvs_Sb[i] != 0 then
                set b = mvs_Sb[i]
                call SetUnitX(b.u, GetUnitX(b.u) + b.v.x*0.025)
                call SetUnitY(b.u, GetUnitY(b.u) + b.v.y*0.025)
                call SetUnitFlyHeight(b.u, GetUnitFlyHeight(b.u) + b.v.z*0.025,0)
            else
                set mvs_Sb[i] = mvs_Sb[mvs_si]
                set mvs_Sb[mvs_si] = 0
                set mvs_si = mvs_si - 1
        set i = i - 1
            endif
        set i = i + 1
    endloop
endfunction

function IniMove takes nothing returns nothing
        call TimerStart(CreateTimer(), 0.025, true, function Engine)
endfunction

endlibrary

Отредактировано Skino, 19.12.2009 в 04:07.
Старый 19.12.2009, 03:56
ShadoW DaemoN

offline
Опыт: 37,078
Активность:
Skino, если перевести текст ошибки, то можно понять, что "v не является членом структуры body"
struct body
    unit u
    vector v
    static method Create takes unit u returns body
        // . . .
    endmethod
    // . . .
endstruct
И не забудь установить начальные значения x, y, z для вектора.
Старый 19.12.2009, 08:45
Skino

offline
Опыт: 4,683
Активность:
ShadoW_DaemoN, а есть где нибуть статья что бы научиться пользоваться, этой системой (библеотека, структура и т.д.) только без "ускорений" и "трения" там всяких?
Старый 19.12.2009, 09:42
ShadoW DaemoN

offline
Опыт: 37,078
Активность:
Старый 19.12.2009, 09:56
Skino

offline
Опыт: 4,683
Активность:
Там просто расписываеться пример создания движения через эту систему, а есть где "это" ещё объясняется? Например триггер где юнит отдаёт приказ в точку и там просто через систему vJass появляется спецэффект! Я думаю в этом ничего сложного нет, только вот его самого нигде нет.
Старый 19.12.2009, 10:16
bee
vjass.optimizer
offline
Опыт: 16,615
Активность:
Как вариант перечитать vJass Manual ?
Он присобачен к посту.
Старый 22.12.2009, 18:27
XOR

offline
Опыт: 38,159
Активность:
Чтобы создать спецэффект, никакая вjass система не нужна..
Старый 22.12.2009, 18:34
bee
vjass.optimizer
offline
Опыт: 16,615
Активность:
он же спросил про всякие library / scope / private, или меня глючит?
Помойму он спросил про пример на vJass и где его взять? вот
Старый 22.12.2009, 18:38
Ответ

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

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

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

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



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