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

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

Закрытая тема
 
Alex_Hell
Mapmaker 'N' Programmer
offline
Опыт: 6,885
Активность:
Помогите найти ошибку
Вот код, запускающийся при MapInit...
» код

function PointGenerate takes location whichLocation, real angle, real d returns nothing
call MoveLocation(whichLocation, GetLocationX(whichLocation) + (d * CosBJ(angle)), GetLocationY(whichLocation) + (d * SinBJ(angle)))
set whichLocation = null
endfunction
//###########################################################################
function CreateIceEffect takes nothing returns nothing
local integer i
local integer n = 0
local integer m = 0
local unit array u
local integer count = 15
local rect array r
local location array p
local location loc
local real d
local real array a
local player id = Player(PLAYER_NEUTRAL_PASSIVE)
//===========================================================================
set r[1] = gg_rct_Ice
set r[2] = gg_rct_Ice2
set r[3] = gg_rct_Ice3
set r[4] = gg_rct_Ice4
//===========================================================================
set loc = GetRectCenter(r[1])
//===========================================================================
set p[1] = GetRectCenter(r[1])
set p[2] = GetRectCenter(r[2])
set p[3] = GetRectCenter(r[3])
set p[4] = GetRectCenter(r[4])
//===========================================================================
set d = DistanceBetweenPoints(p[1],p[2])/count
//===========================================================================
set a[1] = AngleBetweenPoints(p[1], p[2])
set a[2] = AngleBetweenPoints(p[2], p[3])
set a[3] = AngleBetweenPoints(p[3], p[4])
set a[4] = AngleBetweenPoints(p[4], p[1])
// call DisplayTextToForce(GetPlayersAll(), R2S(a[1]))
// call DisplayTextToForce(GetPlayersAll(), R2S(a[2]))
// call DisplayTextToForce(GetPlayersAll(), R2S(a[3]))
// call DisplayTextToForce(GetPlayersAll(), R2S(a[4]))
//===========================================================================
loop
exitwhen n > 4
//===========================================================================
set i = 0
//===========================================================================
loop
exitwhen i > count
set m = m + 1
set u[m] = CreateUnitAtLoc(id, 'h000', loc, 270.00)
call PointGenerate(loc, a[n], d)
set i = i + 1
endloop
//===========================================================================
set n = n + 1
endloop
//===========================================================================
set i = 1
loop
exitwhen i > 4
set r[i] = null
call RemoveLocation(p[i])
set p[i] = null
set i = i + 1
endloop
//===========================================================================
set id = null
call RemoveLocation(loc)
set loc = null
endfunction

Посмотрите его и скажите, почему он работает не как надо. А надо так: создать квадрат из этих воинов "h000". Квадрат создается, но не такой...
Я прикрепил к посту блокнот, там показано, как должно быть + как получается...

Если рас-комментарить 4 call DisplayTextToForce, на экране отображаются углы...вроде правильные:
a[1] = 90
a[2] = 0
a[3] = -90
a[4] = -180
Прикрепленные файлы
Тип файла: txt OpenMe.txt (638 байт, 6 просмотров )
Старый 22.08.2007, 12:31
J
expert
offline
Опыт: 48,447
Активность:
Юниты можно создавать в совершенно любой четырехугольник

Они будут создаваться для игрока p, и будут типом UnitType

Между Rec1 и Rec2, будет count1 юнитов
Между Rec2 и Rec3, будет count2 юнитов
Между Rec3 и Rec4, будет count3 юнитов
Между Rec4 и Rec1, будет count4 юнитов

Чтобы сделать так как ты хочеш, запускай функцию так:
call CreateUnit4Figure(Player(15), 'h000', gg_rct_Ice, gg_rct_Ice2, gg_rct_Ice3, gg_rct_Ice4, 15, 15, 15, 15)

Код:
function DistanceBetweenCord takes real AX, real AY, real BX, real BY returns real
    local real dx = BX - AX
    local real dy = BY - AY
    return SquareRoot(dx * dx + dy * dy)
endfunction

function AngleBetweenCordRad takes real AX, real AY, real BX, real BY returns real
    return Atan2(BY - AY, BX - AX)
endfunction 

function CreateUnit4Figure takes player p, integer UnitType, rect Rec1, rect Rec2, rect Rec3, rect Rec4, integer count1, integer count2, integer count3, integer count4 returns nothing 
    local real array X
    local real array Y
    local real array Angle
    local real array Len
    local real array count
    local integer i = 0
    local integer a
    set X[0] = GetRectCenterX(Rec1)
    set Y[0] = GetRectCenterY(Rec1)  
    set X[1] = GetRectCenterX(Rec2)
    set Y[1] = GetRectCenterY(Rec2)
    set X[2] = GetRectCenterX(Rec3)
    set Y[2] = GetRectCenterY(Rec3) 
    set X[3] = GetRectCenterX(Rec4)
    set Y[3] = GetRectCenterY(Rec4) 
    set count[0] = count1-1 
    set count[1] = count2-1
    set count[2] = count3-1
    set count[3] = count4-1
    set Len[0] = DistanceBetweenCord(X[0], Y[0], X[1], Y[1])/count[0]    
    set Len[1] = DistanceBetweenCord(X[1], Y[1], X[2], Y[2])/count[1]
    set Len[2] = DistanceBetweenCord(X[2], Y[2], X[3], Y[3])/count[2]
    set Len[3] = DistanceBetweenCord(X[3], Y[3], X[0], Y[0])/count[3]
    set Angle[0] = AngleBetweenCordRad(X[0], Y[0], X[1], Y[1])
    set Angle[1] = AngleBetweenCordRad(X[1], Y[1], X[2], Y[2])
    set Angle[2] = AngleBetweenCordRad(X[2], Y[2], X[3], Y[3])
    set Angle[3] = AngleBetweenCordRad(X[3], Y[3], X[0], Y[0])
    loop
        exitwhen i > 3 
        set a = 0
        set X[4] = X[i]  
        set Y[4] = Y[i]
        loop
            exitwhen a > count[i] 
            call CreateUnit(p, UnitType, X[4], Y[4], 270) 
            set X[4] = X[4] + Len[i]*Cos(Angle[i])
            set Y[4] = Y[4] + Len[i]*Sin(Angle[i])
            set a = a + 1
        endloop
        set i = i + 1
    endloop
endfunction
Старый 22.08.2007, 13:52
Alex_Hell
Mapmaker 'N' Programmer
offline
Опыт: 6,885
Активность:
Jon, спасибо!

Тему можно клоуз!
Старый 22.08.2007, 13:59
Закрытая тема

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

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

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

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



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