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

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

Закрытая тема
 
PlayerDark
Coraline
offline
Опыт: 10,569
Активность:
Я пока только изучаю джасс и у меня возникла проблема.


Код:
call Movement( GetUnitLoc(udg_DB_unit) , GetRectCenter(gg_rct_Barrels2) , 15.00 , udg_DB_unit  )


Эта должна вызыватьсяфункция движения (начальная точка , конечная точка , скорость , юнит). Что я делаю не так ? Я не могу найти причину т к не знаю в чем она заключается. При запуске выдается ошибка (нет названия функции) и игра вылетает в меню.

Если дело не в этом то могу выложить текст функции.

Если кто поможет скажу спасибо.
Старый 06.03.2007, 08:07
J
expert
offline
Опыт: 48,447
Активность:
выложи функцию
Старый 06.03.2007, 08:28
PlayerDark
Coraline
offline
Опыт: 10,569
Активность:
Код:
// call Movement ( 1000 , 500 , 150.0 , udg_DB_unit)
// StartPoint , EndPoint , MoveSpeed

function Trig_moveget takes location n2 , unit u , real a returns nothing
//call SetUnitPositionLocFacingBJ( u , PolarProjectionBJ((GetUnitLoc( u )) , a , AngleBetweenPoints( udg_point , n2 , GetUnitFacing( u ))) 
    
endfunction

function movmCreate takes nothing returns nothing
 local trigger gg_trg_moveget
 set gg_trg_moveget = CreateTrigger(  )
 call TriggerRegisterTimerEventPeriodic( gg_trg_moveget , 0.01 )
 call TriggerAddAction( gg_trg_moveget , function Trig_moveget )
endfunction 

function Movment takes location n1 , location n2 , real n3 , unit u returns nothing
local real a
local real b
local real c
set udg_Point = GetUnitLoc( u )
set b = DistanceBetweenPoints( n1 , n2 )
set a = b / n3
endfunction


Вот результат моих стараний.

PlayerDark добавил:
Недоделанный.
Старый 06.03.2007, 08:57
J
expert
offline
Опыт: 48,447
Активность:
Цитата:
Сообщение от PlayerDark
call Movement( GetUnitLoc(udg_DB_unit) , GetRectCenter(gg_rct_Barrels2) , 15.00, udg_DB_unit )

и
Цитата:
Сообщение от PlayerDark
function Movment takes location n1 , location n2 , real n3 , unit u returns nothing

ппц... сравни названия функций

Отредактировано Jon, 06.03.2007 в 09:27.
Старый 06.03.2007, 09:16
PlayerDark
Coraline
offline
Опыт: 10,569
Активность:
я не соображу как там делается.
Старый 06.03.2007, 09:20
J
expert
offline
Опыт: 48,447
Активность:
PlayerDark непонял... че там еще одна ошибка?
Старый 06.03.2007, 09:26
PlayerDark
Coraline
offline
Опыт: 10,569
Активность:
Там может быть куча ошибок только я не могу их найти и попросил мне показать.
Старый 06.03.2007, 09:28
J
expert
offline
Опыт: 48,447
Активность:
Цитата:
При запуске выдается ошибка (нет названия функции) и игра вылетает в меню.

ну от этой ошибки ты уже избаввился?
Старый 06.03.2007, 09:31
PlayerDark
Coraline
offline
Опыт: 10,569
Активность:
нет.
Старый 06.03.2007, 09:32
J
expert
offline
Опыт: 48,447
Активность:
почему? я же сказал как...
Старый 06.03.2007, 09:49
PlayerDark
Coraline
offline
Опыт: 10,569
Активность:
Ааа ... дошло.
Старый 06.03.2007, 17:47
PlayerDark
Coraline
offline
Опыт: 10,569
Активность:
Я понял только сейчас потому что только сейчас просмотрел код.
Теперь пишет - отсутствует название в строке
call SetUnitPositionLocFacingBJ( u , PolarProjectionBJ((GetUnitLoc( u )) , a , AngleBetweenPoints( udg_point , n2 , GetUnitFacing( u )))
Старый 06.03.2007, 18:13
J
expert
offline
Опыт: 48,447
Активность:
функция call SetUnitPositionLocFacingBJ должна принимать 3 пораметра (юнита, точку, реал)
у тебя де она принимает 4

функция AngleBetweenPoints юзает 2 пораметра (точкаб точка, у тебя же она юзает 3)

да и вообще.. у тебя там все понапутано




вот... замени всю эту функцию этим
Код:
call SetUnitPositionLoc(u, PolarProjectionBJ((GetUnitLoc( u ), a, AngleBetweenPoints( udg_point , n2)))
    call SetUnitFacing(u, GetUnitFacing( u ))

надеюсь я прально понял значения/типы твоих переменных

Jon добавил:
и почитай эту статью http://xgm.guru/articles.php?section=wc3&name=optimisations
Старый 06.03.2007, 19:08
DFlyer
<3 MJ
offline
Опыт: 42,879
Активность:
Отсутствует название:
Код:
set curse = CreateUnitAtLoc(pl,e000,loc,270.0)


DFlyer добавил:
Всё, ошибка решена. Просто забыл про 'кавычки'.
Старый 06.03.2007, 21:56
PlayerDark
Coraline
offline
Опыт: 10,569
Активность:
Jon насчнет этого тут я понял , но у меня пока не что то не клеится можешь ты написать скрипт который я пытаюсь сделать и сравню его со своим ?

PlayerDark добавил:
Код:
function Trig_moveget takes nothing returns nothing
    call SetUnitPositionLoc( u , PolarProjectionBJ( GetUnitLoc( u ), a, AngleBetweenPoints( udg_point , n2))
    call SetUnitFacing(u, GetUnitFacing( u ))
endfunction


Вот эту.

PlayerDark добавил:
Чего я непонял так это как надо такому триггеру задавать локалки. Тоесть не совсем понял - они действуют только для той функции в которой заданы ?
Старый 08.03.2007, 11:17
FellGuard
Losyash
offline
Опыт: 39,547
Активность:
PlayerDark статьи + практика, не обязательно спрашивать азы на форуме.
Код:
function Trig_moveget takes nothing returns nothing
    local unit u = GetTriggerUnit() //как угодно, работать не будет при u = null
    local location n2 = GetUnitLoc( u ) //тоже самое, не равно null
    call SetUnitPositionLoc( u , PolarProjectionBJ( GetUnitLoc( u ), a, AngleBetweenPoints( udg_point , n2))
    call SetUnitFacing(u, GetUnitFacing( u ))
endfunction
можно так, тут становится ясно, какую роль играют переменные
Код:
function Trig_moveget takes unit u, location n2 returns nothing
    call SetUnitPositionLoc( u , PolarProjectionBJ( GetUnitLoc( u ), a, AngleBetweenPoints( udg_point , n2))
    call SetUnitFacing(u, GetUnitFacing( u ))
endfunction

FellGuard добавил:
локалки пашут только для ф-ий в которых заданы, плюс для каждого запуска ф-ии создается свой набор переменных, т.е. если при одновременном запуске триггера глобалка сменит свое значение на заданное в последнем запуске триггера, а локалки будут существовать до конца выполнения "их" ф-ии.
Необходимо убирать объекты созданные при помощи Create (триггер, юнит, проч. объекты, и обнулять их переменные, дабы не висели в памяти, еще нужно не забывать юзать RemoveLocation, а лучше вопще без локаций)
Старый 08.03.2007, 18:14
J
expert
offline
Опыт: 48,447
Активность:
FellGuard забываеш удалять несколько точек...
потому лучше все это делать на координатах
Старый 08.03.2007, 19:18
FellGuard
Losyash
offline
Опыт: 39,547
Активность:
Я просто решил пока не грузить человека еще и информацией про RemoveLocation:), я ниже написал. А сам я, да, перешел на common.j с его безточечными ф-иями.
Старый 08.03.2007, 20:31
PlayerDark
Coraline
offline
Опыт: 10,569
Активность:
у меня вопрос. я хочу чтоб при запуске снаряда создавался отдельный триггер который будет отвечать за его движение. Потом этот триггер должен перестать работать и удалиться. Как такое сделать ?
Старый 15.03.2007, 10:20
dk

offline
Опыт: 60,293
Активность:
Ну это SCV. Смотреть статью димона в базе...
Старый 15.03.2007, 11:54
Закрытая тема

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

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

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

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



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