[JASSфак] Дополнительно. Изучаем начинки функций BJ.
|
|
[DUОS] | Дата: Понедельник, 23 Ноября 2009, 18:47:41 | Сообщение # 1 |
Группа: Заблокированные
Сообщений: 6279
Награды: 9
Репутация: 1708
Блокировки:
| Итак, решил здесь вести раздел для учеников JASS по начинка функций с подробным комментированием, дабы правильно раскрывали. Будем это делать в алфавитном порядке. Начнём. function AbortCinematicFadeBJ takes nothing returns nothing if (bj_cineFadeContinueTimer != null) then // Отменяем только в том случае, если таймер продолжительности затемнения запущен. call DestroyTimer(bj_cineFadeContinueTimer)// Уничтожаем таймер продолжительности затемнения. endif if (bj_cineFadeFinishTimer != null) then // Отменяем только в том случае, если таймер окончания затемнения запущен. call DestroyTimer(bj_cineFadeFinishTimer)// Уничтожаем таймер окончания затемнения. endif endfunction function AcosBJ takes real degrees returns real // BJ возвращает арккосинус в градусах, а не радианах. return Acos(degrees) * bj_RADTODEG// bj_RADTODEG равно 180.0/bj_PI = 180.0/3.14159 = 57.295827 Используйте вместо константы это число напрямую. endfunction function AddItemToStockBJ takes integer itemId, unit whichUnit, integer currentStock, integer stockMax returns nothing call AddItemToStock(whichUnit, itemId, currentStock, stockMax) // Обычный вызов нативки. endfunction function AddResourceAmountBJ takes integer delta, unit whichUnit returns nothing call AddResourceAmount(whichUnit, delta) endfunction function AddSpecialEffectLocBJ takes location where, string modelName returns effect set bj_lastCreatedEffect = AddSpecialEffectLoc(modelName, where) return bj_lastCreatedEffect // Лучше повесить эффект на локальную переменную: local effect e = AddSpecialEffectLoc(modelName, where) - данные вписать не забудьте! endfunction function AddSpecialEffectTargetUnitBJ takes string attachPointName, widget targetWidget, string modelName returns effect set bj_lastCreatedEffect = AddSpecialEffectTarget(modelName, targetWidget, attachPointName) return bj_lastCreatedEffect // Как и в предыдущей - меняем на локальный эффект. endfunction function AddUnitAnimationPropertiesBJ takes boolean add, string animProperties, unit whichUnit returns nothing call AddUnitAnimationProperties(whichUnit, animProperties, add) // Обычный вызов нативки. endfunction function AddUnitToStockBJ takes integer unitId, unit whichUnit, integer currentStock, integer stockMax returns nothing call AddUnitToStock(whichUnit, unitId, currentStock, stockMax) // Обычный вызов нативки. endfunction function AdjustCameraBoundsBJ takes integer adjustMethod, real dxWest, real dxEast, real dyNorth, real dySouth returns nothing local real minX = 0 local real minY = 0 local real maxX = 0 local real maxY = 0 local real scale = 0 if (adjustMethod == bj_CAMERABOUNDS_ADJUST_ADD) then set scale = 1 elseif (adjustMethod == bj_CAMERABOUNDS_ADJUST_SUB) then set scale = -1 else // Unrecognized adjustment method - ignore the request. return endif // Adjust the actual camera values set minX = GetCameraBoundMinX() - scale * dxWest set maxX = GetCameraBoundMaxX() + scale * dxEast set minY = GetCameraBoundMinY() - scale * dySouth set maxY = GetCameraBoundMaxY() + scale * dyNorth // Make sure the camera bounds are still valid. if (maxX < minX) then set minX = (minX + maxX) * 0.5 set maxX = minX endif if (maxY < minY) then set minY = (minY + maxY) * 0.5 set maxY = minY endif // Apply the new camera values. call SetCameraBounds(minX, minY, minX, maxY, maxX, maxY, maxX, minY)// Можно проделать действия заблаговременно. endfunction
|
|
|
|
Сорнемус | Дата: Понедельник, 23 Ноября 2009, 18:50:46 | Сообщение # 2 |
9 уровень
Группа: Проверенные
Сообщений: 854
Награды: 0
Репутация: 120
Блокировки:
| Отлично! Скажи нет БЖ!
|
|
|
|
0x4453 | Дата: Понедельник, 23 Ноября 2009, 21:29:01 | Сообщение # 3 |
3 уровень
Группа: Пользователи
Сообщений: 74
Награды: 0
Репутация: 13
Блокировки:
| Иногда можно юзать бж,но в том случае, если в нём не создаётся никакого объекта
|
|
|
|
Akvarium | Дата: Понедельник, 23 Ноября 2009, 21:52:15 | Сообщение # 4 |
8 уровень
Группа: Проверенные
Сообщений: 581
Награды: 1
Репутация: 87
Блокировки:
| Quote (|DUОS|) по начинка функций Я хорошо говорить по русски?) ЗЫ: Blizzard Ж за то что сдалала BJ!)
|
|
|
|
Сорнемус | Дата: Вторник, 24 Ноября 2009, 01:15:36 | Сообщение # 5 |
9 уровень
Группа: Проверенные
Сообщений: 854
Награды: 0
Репутация: 120
Блокировки:
| Можно мне дополнить? function PolarProjectionBJ takes location source, real dist, real angle returns location local real x = GetLocationX(source) + dist * Cos(angle * bj_DEGTORAD)//Используем это напрямую. local real y = GetLocationY(source) + dist * Sin(angle * bj_DEGTORAD)//Используем это напрямую. return Location(x, y)//Оппа, утечка. endfunction Так как лучше использовать координаты то сделаем так: local real x = GetUnitX(unit) + dist * Cos(angle) local real y = GetUnitY(unit) + dist * Sin(angle) unit = юнит от которого отталкиваються делая полярки. dist = расстояние. angle = угол. И обязательно в X писать Cos, а в Y Sin! GetUnitX/Y можно заменить на переменные типа real или на прямое значение. function DistanceBetweenPoints takes location locA, location locB returns real local real dx = GetLocationX(locB) - GetLocationX(locA) local real dy = GetLocationY(locB) - GetLocationY(locA) return SquareRoot(dx * dx + dy * dy) endfunction Снова же, используем координаты вместо точек: set r=SquareRoot((x-x2)*(x-x2)+(y-y2)*(y-y2)) Вот и всё. 1 строчка кода вместо 3. Добавлено (24-11-2009, 01:15) --------------------------------------------- Quote (|DUОS|) Лучше повесить эффект на локальную переменную: local effect e = AddSpecialEffectLoc(modelName, where) - данные вписать не забудьте! Точки! Координаты надо) Сам же писал в своей статье по оптимизации =)
Сообщение отредактировал Сорнемус - Вторник, 24 Ноября 2009, 01:21:21 |
|
|
|
0x4453 | Дата: Вторник, 24 Ноября 2009, 13:59:28 | Сообщение # 6 |
3 уровень
Группа: Пользователи
Сообщений: 74
Награды: 0
Репутация: 13
Блокировки:
| Quote (Сорнемус) local real x = GetUnitX(unit) + dist * Cos(angle) local real y = GetUnitY(unit) + dist * Sin(angle) а если надо двигать не юнита?
|
|
|
|
Сорнемус | Дата: Вторник, 24 Ноября 2009, 14:06:34 | Сообщение # 7 |
9 уровень
Группа: Проверенные
Сообщений: 854
Награды: 0
Репутация: 120
Блокировки:
| 0x4453, я сказал что можно заменить на что требуеться (ГетИтемИск и так далее).
|
|
|
|
[DUОS] | Дата: Вторник, 24 Ноября 2009, 16:17:33 | Сообщение # 8 |
Группа: Заблокированные
Сообщений: 6279
Награды: 9
Репутация: 1708
Блокировки:
| Quote (Сорнемус) Точки! Координаты надо) Сам же писал в своей статье по оптимизации =) Сорнемус, Есть же точки (!) а есть функция локи. Это локи. Quote (0x4453) а если надо двигать не юнита? GetDestructableX GetDestructableY Это для декора.
|
|
|
|
Сорнемус | Дата: Вторник, 24 Ноября 2009, 16:45:13 | Сообщение # 9 |
9 уровень
Группа: Проверенные
Сообщений: 854
Награды: 0
Репутация: 120
Блокировки:
| Quote (|DUОS|) Есть же точки (!) а есть функция локи. Это локи. Точки и локи одно и тоже -_-
|
|
|
|
[DUОS] | Дата: Вторник, 24 Ноября 2009, 17:59:53 | Сообщение # 10 |
Группа: Заблокированные
Сообщений: 6279
Награды: 9
Репутация: 1708
Блокировки:
| function AdjustCameraBoundsForPlayerBJ takes integer adjustMethod, player whichPlayer, real dxWest, real dxEast, real dyNorth, real dySouth returns nothing if (GetLocalPlayer() == whichPlayer) then // Use only local code (no net traffic) within this block to avoid desyncs. call AdjustCameraBoundsBJ(adjustMethod, dxWest, dxEast, dyNorth, dySouth)// Раскрываем эту BJ и получим нужные нам действия. endif endfunction function AdjustPlayerStateBJ takes integer delta, player whichPlayer, playerstate whichPlayerState returns nothing // If the change was positive, apply the difference to the player's // gathered resources property as well. if (delta > 0) then if (whichPlayerState == PLAYER_STATE_RESOURCE_GOLD) then call AdjustPlayerStateSimpleBJ(whichPlayer, PLAYER_STATE_GOLD_GATHERED, delta) elseif (whichPlayerState == PLAYER_STATE_RESOURCE_LUMBER) then call AdjustPlayerStateSimpleBJ(whichPlayer, PLAYER_STATE_LUMBER_GATHERED, delta) endif endif call AdjustPlayerStateSimpleBJ(whichPlayer, whichPlayerState, delta)// Все проверки можно провести сразу. И раскрыть Simple. endfunction Добавлено (24-11-2009, 17:59) ---------------------------------------------
Quote (Сорнемус) Точки и локи одно и тоже -_- реал и локейшн - одно и то же?
|
|
|
|
Сорнемус | Дата: Вторник, 24 Ноября 2009, 18:58:35 | Сообщение # 11 |
9 уровень
Группа: Проверенные
Сообщений: 854
Награды: 0
Репутация: 120
Блокировки:
| Quote (|DUОS|) реал и локейшн - одно и то же? Создай в редакторе глоб. переменных Точку и посмотри в коде сценария во что она превратиться.
|
|
|
|
HAPKOMAH | Дата: Вторник, 24 Ноября 2009, 22:27:18 | Сообщение # 12 |
5 уровень
Группа: Проверенные
Сообщений: 111
Награды: 0
Репутация: 58
Блокировки:
| Open - Copy - Past
|
|
|
|
Сорнемус | Дата: Вторник, 24 Ноября 2009, 22:48:40 | Сообщение # 13 |
9 уровень
Группа: Проверенные
Сообщений: 854
Награды: 0
Репутация: 120
Блокировки:
| HAPKOMAH, Не катит - Не катит - Не катит
|
|
|
|
HAPKOMAH | Дата: Вторник, 24 Ноября 2009, 23:23:53 | Сообщение # 14 |
5 уровень
Группа: Проверенные
Сообщений: 111
Награды: 0
Репутация: 58
Блокировки:
| Сорнемус, ok Code Ctrl+O blizzard.j [Open] Ctrl+A Ctrl+C Alt+Tab http://warcraft3ft.info/forum/38-14153 Enter Ctrl+P Добавить ответ
|
|
|
|