Сейчас 23:00:55 Четверг, 26 декабря, 2024 год
[ x ] Главная ⇒ Форум ⇐ RSS Файлы Cтатьи Картинки В о й т и   или   з а р е г и с т р и р о в а т ь с я


[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: Bru  
[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  
Добавить ответ
 

  • Страница 1 из 1
  • 1
Поиск:

Copyright © 2006 - 2024 Warcraft3FT.info При копировании материалов c сайта ставьте, пожалуйста, активную обратную ссылку на нас • Design by gReeB04ki ©
Хостинг от uCoz