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


[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 2 из 3
  • «
  • 1
  • 2
  • 3
  • »
Модератор форума: PUVer, SirNikolas, Ty3uK  
Утечка
AriusДата: Понедельник, 28 Декабря 2009, 17:41:31 | Сообщение # 26
10 уровень
Группа: Проверенные
Сообщений: 2163
Награды: 2
Репутация: 267
Блокировки:
MTT, сделал термоядерный триггер, каждые 0.01 секунд выделить всех в зоне игровой карты, и еще в пару областях пустых, и добавить всех в группу. игра виснет, теперь сделал триггер 2 который выключает этот триггер где все выделяются и очищает переменную отсюда и всё, перестает глючить, всё чисто.

Добавлено (28-12-2009, 17:41)
---------------------------------------------
Не отсюда а отряда, с телефона сижу...

 

MTTДата: Понедельник, 28 Декабря 2009, 17:52:27 | Сообщение # 27
9 уровень
Группа: Пользователи
Сообщений: 941
Награды: 0
Репутация: 81
Блокировки:
Arius,
Игра перестает виснуть изза отключения триггера и, соответственно если ты его включил опять, будет лагать с тойже интенсивностью, что и до этого
 

[DUОS]Дата: Понедельник, 28 Декабря 2009, 18:08:51 | Сообщение # 28
Группа: Заблокированные
Сообщений: 6279
Награды: 9
Репутация: 1708
Блокировки:
MTT,
Всё дело в тактах процессора. Там не только гора условий с нотами, но ещё и двойной цикл. Я был поаккуратнее и сделал так:
Code
function MoveRocketGroupCondition takes nothing returns boolean
     return GetOwningPlayer(GetFilterUnit()) != GetOwningPlayer(udg_Rocket[udg_a])
endfunction

function MoveRocketGroupActions takes nothing returns nothing
     local integer i = 1
     if(udg_a > 0) then
         call UnitDamageTarget(udg_Rocket[udg_a],GetEnumUnit(),100.00,true,false,ATTACK_TYPE_MELEE,DAMAGE_TYPE_NORMAL,WEAPON_TYPE_WHOKNOWS)
         call RemoveUnit(udg_Rocket[udg_a])
         call TriggerExecute(gg_trg_VzrivRocket)
         set udg_b = udg_a + 1
         loop
             exitwhen i > udg_NumberOfRockets - udg_a
             set udg_Rocket[udg_b - 1] = udg_Rocket[udg_b]
             set udg_Target[udg_b - 1] = udg_Target[udg_b]
             set udg_b = udg_b + 1
             set i = i + 1
         endloop  
     endif
endfunction

function Trig_Move_Rocket_Actions takes nothing returns nothing
     local real x1 = GetUnitX(udg_Rocket[udg_a])
     local real y1 = GetUnitY(udg_Rocket[udg_a])
     local real x2 = GetUnitX(udg_Target[udg_a])
     local real y2 = GetUnitY(udg_Target[udg_a])
     local real dist = SquareRoot((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2))
     local real pa = 57.295827 * Atan2(y2-y1,x2-x1)
     local real px = x1 + udg_RocketSpeed[GetPlayerId(GetOwningPlayer(udg_Rocket[udg_a])) + 1] * Cos(pa * .0174532)
     local real py = y1 + udg_RocketSpeed[GetPlayerId(GetOwningPlayer(udg_Rocket[udg_a])) + 1] * Sin(pa * .0174532)
     local integer i = 1
     local integer i2 = 1
     local group g = CreateGroup()
     loop
         exitwhen i > udg_NumberOfRockets     
         call SetUnitX(udg_Rocket[udg_a],px)
         call SetUnitY(udg_Rocket[udg_a],py)
         call GroupEnumUnitsInRange(g,x1,y1,100.,Condition(function MoveRocketGroupCondition))
         call ForGroup(g,function MoveRocketGroupActions)
         call GroupClear(g)
         call DestroyGroup(g)
         if(dist <= 50.) then
             call RemoveUnit(udg_Rocket[udg_a])
             set udg_b = udg_a + 1
             loop
                 exitwhen i2 > udg_NumberOfRockets - udg_a
                 set udg_Rocket[udg_b - 1] = udg_Rocket[udg_b]
                 set udg_Target[udg_b - 1] = udg_Target[udg_b]
                 set udg_b = udg_b + 1
                 set i2 = i2 + 1
             endloop
             set udg_NumberOfRockets = udg_NumberOfRockets - 1
         endif
         set udg_a = udg_a + 1
         if(udg_a > udg_NumberOfRockets) then
             set udg_a = 0
         endif
         set i = i + 1
     endloop
     set g = null
endfunction
          

//===========================================================================
function InitTrig_Move_Rocket takes nothing returns nothing
     set gg_trg_Move_Rocket = CreateTrigger()
     call TriggerRegisterTimerEventPeriodic(gg_trg_Move_Rocket,0.01)
     call TriggerAddAction(gg_trg_Move_Rocket,function Trig_Move_Rocket_Actions)
endfunction


НУ И ЧТО ТЕПЕРЬ?


Кликайте на дракошку ;)
 

AriusДата: Понедельник, 28 Декабря 2009, 18:14:30 | Сообщение # 29
10 уровень
Группа: Проверенные
Сообщений: 2163
Награды: 2
Репутация: 267
Блокировки:
MTT, когда я использую способность у меня включается триггер на 10 секунд где каждые 0.01 секунд пикаются отряды и смещаются, в это время у меня не тормозит, триггер выключается через 10 секунд, переменная очищается, память не забита. И дальше всё нормально.
 

MTTДата: Понедельник, 28 Декабря 2009, 18:14:52 | Сообщение # 30
9 уровень
Группа: Пользователи
Сообщений: 941
Награды: 0
Репутация: 81
Блокировки:
Блокируется триггер :(
Нашел 25 ошибок :(
 

AriusДата: Понедельник, 28 Декабря 2009, 18:17:53 | Сообщение # 31
10 уровень
Группа: Проверенные
Сообщений: 2163
Награды: 2
Репутация: 267
Блокировки:
А тот термоядерный триггер тормозил скорее всего из-за того что всё юниты на карте пикались, а карта немаленькая, и юнитов много.

Добавлено (28-12-2009, 18:17)
---------------------------------------------
Так вот я не понимаю, триггер где юниты пикаются не постоянно ведь работает, когда он выключается очищай переменную. Это про один подобный триггер говорю, не про все.

 

[DUОS]Дата: Понедельник, 28 Декабря 2009, 18:21:00 | Сообщение # 32
Группа: Заблокированные
Сообщений: 6279
Награды: 9
Репутация: 1708
Блокировки:
Quote (MTT)
Блокируется триггер :(
Нашел 25 ошибок :(

Такс... Сейчас поправим.


НУ И ЧТО ТЕПЕРЬ?


Кликайте на дракошку ;)
 

[DUОS]Дата: Понедельник, 28 Декабря 2009, 18:25:21 | Сообщение # 33
Группа: Заблокированные
Сообщений: 6279
Награды: 9
Репутация: 1708
Блокировки:
Вот тебе карта, там всё сохранилось. Странно, почему у тебя ничего не вышло.
Прикрепления: MapForExample.w3m (13.7 Kb)


НУ И ЧТО ТЕПЕРЬ?


Кликайте на дракошку ;)
 

MTTДата: Понедельник, 28 Декабря 2009, 18:39:04 | Сообщение # 34
9 уровень
Группа: Пользователи
Сообщений: 941
Награды: 0
Репутация: 81
Блокировки:
[DUОS],
Я понял, проблема в том, что у меня переменная Target имеет тип Точка, а у тебя юнит
 

[DUОS]Дата: Понедельник, 28 Декабря 2009, 18:49:51 | Сообщение # 35
Группа: Заблокированные
Сообщений: 6279
Награды: 9
Репутация: 1708
Блокировки:
MTT,
Откуда же я знал, что это точка :)
Стой... тогда триггер будет немножечко другой.

Добавлено (28-12-2009, 18:49)
---------------------------------------------
Р.S. Скинь мне первый триггер, где отлавливается применение способности. Я сделаю тебе таймером и избавлю тебя от назойливой точки.


НУ И ЧТО ТЕПЕРЬ?


Кликайте на дракошку ;)


Сообщение отредактировал [DUОS] - Понедельник, 28 Декабря 2009, 18:48:55
 

MTTДата: Понедельник, 28 Декабря 2009, 19:05:55 | Сообщение # 36
9 уровень
Группа: Пользователи
Сообщений: 941
Награды: 0
Репутация: 81
Блокировки:
[DUОS],
Я вот думаю, может я тебе всю карту кину, на ней ничего нету, кроме 1 модельки и этих триггеров?
Воопщем вот 1 триггер, на выпуск ракет

Добавлено (28-12-2009, 19:05)
---------------------------------------------
Я отправил тебе в Л. С. Свою карту

 

[DUОS]Дата: Понедельник, 28 Декабря 2009, 21:18:48 | Сообщение # 37
Группа: Заблокированные
Сообщений: 6279
Награды: 9
Репутация: 1708
Блокировки:
MTT,
Сейчас посмотрю.


НУ И ЧТО ТЕПЕРЬ?


Кликайте на дракошку ;)
 

MTTДата: Понедельник, 28 Декабря 2009, 23:49:27 | Сообщение # 38
9 уровень
Группа: Пользователи
Сообщений: 941
Награды: 0
Репутация: 81
Блокировки:
[DUОS], надеюсь на тебя :)
 

[DUОS]Дата: Понедельник, 28 Декабря 2009, 23:52:31 | Сообщение # 39
Группа: Заблокированные
Сообщений: 6279
Награды: 9
Репутация: 1708
Блокировки:
MTT,
Просто поменяй у x2 и y2 GetUnitX() и GetUnitY() на GetLocationX() и GetLocationY()


НУ И ЧТО ТЕПЕРЬ?


Кликайте на дракошку ;)
 

MTTДата: Вторник, 29 Декабря 2009, 14:03:47 | Сообщение # 40
9 уровень
Группа: Пользователи
Сообщений: 941
Награды: 0
Репутация: 81
Блокировки:
[DUОS],
Ошибка пропала, но теперь функция действуем совсем нетак.
Все ракеты мгновенно перемещаются к какойта точкеи там дергаются. Но если подойти к ней, то будет происходить действие, которое и должно быть

Добавлено (29-12-2009, 14:03)
---------------------------------------------
Эта точка - центр карты....

 

[DUОS]Дата: Вторник, 29 Декабря 2009, 14:21:35 | Сообщение # 41
Группа: Заблокированные
Сообщений: 6279
Награды: 9
Репутация: 1708
Блокировки:
MTT,
Ракеты взорвутся.
Если ты хочешь, чтобы ракеты двигались, завязывай юзать циклы. По полярной проекции двигаем ракеты таймером.


НУ И ЧТО ТЕПЕРЬ?


Кликайте на дракошку ;)
 

MTTДата: Вторник, 29 Декабря 2009, 17:53:22 | Сообщение # 42
9 уровень
Группа: Пользователи
Сообщений: 941
Награды: 0
Репутация: 81
Блокировки:
[DUОS],
Неумею так...

Добавлено (29-12-2009, 17:53)
---------------------------------------------

Quote (|DUОS|)
По полярной проекции двигаем ракеты таймером

Ты меня проста в тупик поставил :)
Я же их именно так и двигал.
Каждую 0,01 секунду двигал с полярным смещением
 

[DUОS]Дата: Среда, 30 Декабря 2009, 01:44:37 | Сообщение # 43
Группа: Заблокированные
Сообщений: 6279
Награды: 9
Репутация: 1708
Блокировки:
MTT,
Тебе в голову приходило, что нужно полярку разворачивать? :)
Вот смотри. Сейчас тебя научу.
Открываем любой редактор JASS-кода. Вбиваем туда в поиск функции "PolarProjectionBJ". Нам выдаст такую начинку:

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

Здесь можно увидеть серьёзную утечку - не обнуляется точка (location). В данном случае отлично бы подошли координаты. Ты двигаешь udg_Rocket к udg_Target. udg_Rocket у тебя равна GetLastCreatedUnit() .
P.S.: Если хочешь создать юнитов методом CreateNUnitsAtLoc(), то лучше откажись от этой затеи. Всегда возвращается группа юнитов, для одного юнита уместна функция CreateUnit(). Получаем, что CreateNUnitsAtLoc() надо заменить на CreateUnit(). Чтобы это сделать, можно часто используемые элементы или большие фрагменты кода занести в локальные переменные. Распишу по шагам, что и к чему:

1. Тут очень часто используется GetAttacker(). Занесём его в локальную переменную следующим образом:

  local unit attacker = GetAttacker()

Смысл этого шага состоит в том, что мы уменьшаем вызовы функций, что серьёзно влияет на производительность карты.
2. GetAttackedUnitBJ() лучше также занести в локальную переменную. Тут есть один нюанс - GetAttackedUnitBJ() ничего не делает, кроме вызова native-функции GetTriggerUnit(). Поэтому я считаю будет разумно заменить её. Получим:

  local unit attacked = GetTriggerUnit()

3. У тебя используется AngleBetweenPoints(). Лучше развернуть эту функцию до native-примитивов. Посмотрим её начинку:

  bj_RADTODEG * Atan2(GetLocationY(locB) - GetLocationY(locA), GetLocationX(locB) - GetLocationX(locA))

Довольно большая формула. Важный факт о подобных математических функциях - native выдают результат в радинах, а BJ - в градусах. Итак, угол между точками мы заносим в локальную переменную. Есть одно НО - нужно построить эту формулу на координатах. bj_RADTODEG - число конвертационное и равно оно 57.295827. Запомни это. Итак, вносим в локальную переменную нашу безутечную формулу угла между точками:

  local real angle = 57.295827 * Atan2(yb - ya,xb - xa)

4. Перед тем, как объявлять эту локальную переменную, возникает необходимость задать выше неё ещё 4 локальные переменные, которые получат координаты атакующего и атакованного воина. Вносим:

  local real xa = GetUnitX(attacker)
  local real ya = GetUnitY(attacker)
  local real xb = GetUnitX(attacked)
  local real yb = GetUnitY(attacked)

5. Теперь у нас 6 локальных переменных - атакующий воин, атакованный воин, 4 следующих - получение их координат, а последняя - это угол между ними. Их очень удобно регулировать, согласись. У тебя в теле CreateNUnitsAtLoc() есть также полярная проекция. Разворачиваем её по начинке. В качестве угла используем нашу локальную переменную angle, а в качестве координат источника используем координаты атакующего воина. Получается, нам нужно добавить ещё две локальные переменные - полярные координаты X и Y. Кстати, в данном случае можно вообще убрать умножение на конвертационное число в переменной угла, т.к. Sin() и Cos() - это native-функции, требующие радианы. Добавляем такие переменные:

  local real polarx = xa + 150 * Cos(angle)
  local real polary = ya + 150 * Sin(angle)

6. Теперь, собственно, заменяем CreateNUnitsAtLoc() на нативку CreateUnit(), в которой всё просто и понятно:

  set udg_Rocket[udg_NumberOfRockets] = CreateUnit(GetOwningPlayer(attacked),'e000',polarx,polary,angle * 57.295827)

7. Т.к. тип unit наследуется от handle, нужно обнулить переменные attacker и attacked. Делается это следующим образом:

  set attacker = null
  set attacked = null

Вот, в принципе, я рассказал, как убрать локации по начинке функции. Кажись, что статью накатал О_о. :)


НУ И ЧТО ТЕПЕРЬ?


Кликайте на дракошку ;)
 

СорнемусДата: Среда, 30 Декабря 2009, 02:30:15 | Сообщение # 44
9 уровень
Группа: Проверенные
Сообщений: 854
Награды: 0
Репутация: 120
Блокировки:
[DUОS], и ты думаешь ГУИшник что-либо поймёт?
Quote (|DUОS|)
bj_RADTODEG - число конвертационное и равно оно 57.295827. Запомни это.

Можно не париться с константами, если включить библиотеку от БЖ, идущую в комплекте с АсидХелпером.
 

[DUОS]Дата: Среда, 30 Декабря 2009, 12:25:41 | Сообщение # 45
Группа: Заблокированные
Сообщений: 6279
Награды: 9
Репутация: 1708
Блокировки:
Quote (Сорнемус)
АсидХелпером.

Он называется АдикХелпер ))
Quote (Сорнемус)
библиотеку от БЖ

Какими только ленивыми не становятся современные кодеры...


НУ И ЧТО ТЕПЕРЬ?


Кликайте на дракошку ;)
 

СорнемусДата: Среда, 30 Декабря 2009, 17:47:46 | Сообщение # 46
9 уровень
Группа: Проверенные
Сообщений: 854
Награды: 0
Репутация: 120
Блокировки:
Quote (|DUОS|)
Какими только ленивыми не становятся современные кодеры...

Это не лень, а удобство. Что лучше, постоянно лазить в список функций, потом думать как оптимизировать функцию, или не тратя времени инклуднуть 1 библиотеку, которая это всё сделает за тебя? Это далеко не лень. Лень, это когда у кодера один раз что-то не получилось и он приходит на форум, говоря "Сделайте мне то-то то-то", а не пробует это всё сам сделать. И раз уш тема на то зашла, то удачно тебе посидеть на JASS2 в то время когда выйдут уже dJass, c++Jass и т.п. Тоже самое с твоими координатами. Вместо простейших операций с векторами, ты решаешь делать муторную работу с координатами. Это, случаем, не для понта? Чтобы сказать "видите какой я крутой кодер, без ваших быдлоДжассов всё сделал, все прогибайтесь под меня" и так далее.
Quote (|DUОS|)
Он называется АдикХелпер ))

Это называется коверканье.
 

[DUОS]Дата: Среда, 30 Декабря 2009, 18:09:26 | Сообщение # 47
Группа: Заблокированные
Сообщений: 6279
Награды: 9
Репутация: 1708
Блокировки:
Сорнемус,
Лол. Понимаешь, не у всех нубов какие кодят тупые карты, юзая быдлотригги типа тебя есть JNGP, обычный World Editor не поддерживает ваши быдлов и быдос Jass'ы. А скажи, зачем вообще юзать жалкие пародии на JASS? Кодь на C++! Бери оригинал! Или ты свыкся с быдлосJass'oм? Учи DGUI, иди дальше. Не все здесь понимают быдлоcJass. И никто мне не запретит называть быдлоcJass ИМЕННО ТАК! Вскрой парсер этого быдлоудобства и обрати свой взор на эту антибыдлобж. -_-


НУ И ЧТО ТЕПЕРЬ?


Кликайте на дракошку ;)
 

СорнемусДата: Среда, 30 Декабря 2009, 18:36:38 | Сообщение # 48
9 уровень
Группа: Проверенные
Сообщений: 854
Награды: 0
Репутация: 120
Блокировки:
И c/vJass созданы не для "быдлокодеров" как ты считаешь, а для других целей:
vJass - разширение возможностей Jass'а, например, структурами, так как они действуют быстрей кеша.
cJass - для упрощения написания кода, так как JASS2 синтаксически походит на Turing и не отличается лаконичностью. Кроме того, благодаря дефайнам можно делать очень интересные вещи, например, сделать из одного integer 3 коротких числа, в которых можно хранить цвет, или ещё что-то.


Оу, нервишки пошаливают.
Quote (|DUОS|)
И никто мне не запретит называть быдлоcJass ИМЕННО ТАК!

А я и не запрещаю тебе называть его так. Твоё право.
Quote (|DUОS|)
какие кодят тупые карты, юзая быдлотригги типа тебя

Да? А ты хоть видел что я делал, кроме того что я кидал в школе?
Quote (|DUОS|)
А скажи, зачем вообще юзать жалкие пародии на JASS?

Читай выше.
Quote (|DUОS|)
Учи DGUI, иди дальше.

Что я и делаю. А тебе удачно посидеть, пое попарить себе мозги с JASS2.
Quote (|DUОS|)
Кодь на C++! Бери оригинал!

Дай мне исходник Вара.
Quote (|DUОS|)
Не все здесь понимают быдлоcJass.

Да тут вобще нормальных людей нет. Такие тупейшие вопросы задают, что ужас.
Quote (|DUОS|)
Вскрой парсер этого быдлоудобства

Нарушаю авторское право, и изза уважения к его создателям не хочу.
Quote (|DUОS|)
и обрати свой взор на эту антибыдлобж

Ну и? Обратил. Что дальше?

Добавлено (30-12-2009, 18:20)
---------------------------------------------
Кстати, я практически уверен, что тебе это всё не нравится так как ты просто не можешь это освоить. У меня так-же было. Не осваивал - не нравилось. А теперь понял насколько это всё удобно.

Добавлено (30-12-2009, 18:36)
---------------------------------------------
Эх, видели бы это Векс и Адольф с ВД.

 

[DUОS]Дата: Среда, 30 Декабря 2009, 18:39:25 | Сообщение # 49
Группа: Заблокированные
Сообщений: 6279
Награды: 9
Репутация: 1708
Блокировки:
Я знаю, что есть типы shortint ...
Quote (Сорнемус)
Кстати, я практически уверен, что тебе это всё не нравится так как ты просто не можешь это освоить

Лол. Я уважаю работу по парсеру, проделанную Вексом. Да знаю я, что векторы быстрее коордов. Знаю, что такое #include. Но я НЕ БУДУ и НЕ СОБИРАЮСЬ юзать это извращение.

Добавлено (30-12-2009, 18:38)
---------------------------------------------

Quote (Сорнемус)
Эх, видели бы это Векс и Адольф с ВД.

Пускай они это видят. Ну и что? Вот пусть снимут требование JNGP, тогда мб поговорим.

Добавлено (30-12-2009, 18:39)
---------------------------------------------

Quote (Сорнемус)
Нарушаю авторское право, и изза уважения к его создателям не хочу.

Просто не можешь освоить и осилить в нём находящееся.


НУ И ЧТО ТЕПЕРЬ?


Кликайте на дракошку ;)
 

СорнемусДата: Среда, 30 Декабря 2009, 18:52:28 | Сообщение # 50
9 уровень
Группа: Проверенные
Сообщений: 854
Награды: 0
Репутация: 120
Блокировки:
Quote (|DUОS|)
Просто не можешь освоить и осилить в нём находящееся.

А смысл мне это делать-то? Создать свой "быдлоджасс"? А зачем? Вот ответь мне зачем я должен, по-твоему, вскрывать парсер сДжасса?
Quote (|DUОS|)
Пускай они это видят. Ну и что? Вот пусть снимут требование JNGP, тогда мб поговорим.

А что так трудно скачать один архивчик и распаковать его в папку с варом?
Quote (|DUОS|)
Но я НЕ БУДУ и НЕ СОБИРАЮСЬ юзать это извращение.

И чем же извращение, то, что делает работу приятней?

Добавлено (30-12-2009, 18:52)
---------------------------------------------

Quote (|DUОS|)
Я знаю, что есть типы shortint ...

Где мой питон? ©
Там далеко не это.
 

  • Страница 2 из 3
  • «
  • 1
  • 2
  • 3
  • »
Поиск:

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