Сейчас 09:17:31 Суббота, 27 апреля, 2024 год
[ x ] Главная ⇒ Форум ⇐ RSS Файлы Cтатьи Картинки В о й т и   или   з а р е г и с т р и р о в а т ь с я


[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: PUVer, SirNikolas, Ty3uK  
Форум о Warcraft 3 » Раздел для картостроителей » GUI / Jass » [Вопрос] Как избежать фаталов при SetUnitXY
[Вопрос] Как избежать фаталов при SetUnitXY
NaturekidДата: Суббота, 29 Декабря 2012, 13:03:11 | Сообщение # 1
Группа: Заблокированные
Сообщений: 4982
Награды: 3
Репутация: 3347
Блокировки:
Блин при юзании location всё норм при выходе за пределы карты, а вот с сетюнит икс игрек фигня-с получается.
Можно как-то проверить, за пределом ли карты абсцисса такая-то?


 

DiabfallДата: Суббота, 29 Декабря 2012, 13:17:14 | Сообщение # 2
Группа: Проверенные
Сообщений: 1231
Награды: 0
Блокировки:
если использовать
Код
call SetUnitPosition(whichUnit, real newX, real newY)

фатала не будет, но это немного тормознуто
 

NaturekidДата: Суббота, 29 Декабря 2012, 13:21:41 | Сообщение # 3
Группа: Заблокированные
Сообщений: 4982
Награды: 3
Репутация: 3347
Блокировки:
Да вроде малость разобрался

Только вопрос - сколько точек в карте размером 32*32?
А всё, посмотрел, игровая - 3272 точек в карте 64*64. Сорри за нубский вопрос.




Сообщение отредактировал Naturekid - Суббота, 29 Декабря 2012, 13:26:46
 

DiabfallДата: Суббота, 29 Декабря 2012, 13:26:07 | Сообщение # 4
Группа: Проверенные
Сообщений: 1231
Награды: 0
Блокировки:
Цитата (Naturekid)
Или лучше - как отобразить в сообщении икс конкретного юнита?

call BJDebugMsg(R2S(GetWidgetX(unit)))
 

ImpregnableДата: Суббота, 29 Декабря 2012, 13:26:24 | Сообщение # 5
6 уровень
Группа: Проверенные
Сообщений: 231
Награды: 0
Репутация: 92
Блокировки:
Пользуйтесь
Код
library SAFEXY initializer Safe_Init
globals
  private real mapMinX
  private real mapMinY
  private real mapMaxX
  private real mapMaxY
endglobals

function SafeX takes real x returns real
     if x < mapMinX then
         return mapMinX
     endif
     if x > mapMaxX then
         return mapMaxX
     endif
     return x
endfunction

function SafeY takes real y returns real
     if y < mapMinY then
         return mapMinY
     endif
     if y > mapMaxY then
         return mapMaxY
     endif
     return y
endfunction

private function Safe_GetBounds takes nothing returns nothing
  set mapMinX = GetRectMinX(bj_mapInitialPlayableArea) + 50.
  set mapMinY = GetRectMinY(bj_mapInitialPlayableArea) + 50.
  set mapMaxX = GetRectMaxX(bj_mapInitialPlayableArea) - 50.
  set mapMaxY = GetRectMaxY(bj_mapInitialPlayableArea) - 50.

  call DestroyTimer(GetExpiredTimer())
endfunction

private function Safe_Init takes nothing returns nothing
  call TimerStart(CreateTimer(), 0., false, function Safe_GetBounds)
endfunction

endlibrary


Если долго мучиться, то может,
все равно нихуя не получится.
 

NaturekidДата: Суббота, 29 Декабря 2012, 13:30:38 | Сообщение # 6
Группа: Заблокированные
Сообщений: 4982
Награды: 3
Репутация: 3347
Блокировки:
Блин, поздно отредактировал)) Ок спс ща попробую всё.

Добавлено (29 Декабря 2012, 13:29:52)
---------------------------------------------
Impregnable, там JNGP требуется по ходу?
Та так то 1 раз вычислить количество точек на картах разного размера, в принципе не трагедия, все размеры карт кратны 32 всё-таки. :) Но спс за код.

Добавлено (29 Декабря 2012, 13:30:38)
---------------------------------------------
Diabfall, ога, ваще затупил, в гуях же есть, а я я там дурака валял


 

ImpregnableДата: Суббота, 29 Декабря 2012, 13:36:32 | Сообщение # 7
6 уровень
Группа: Проверенные
Сообщений: 231
Награды: 0
Репутация: 92
Блокировки:
Цитата (Naturekid)
Та так то 1 раз вычислить количество точек на картах разного размера, в принципе не трагедия, все размеры карт кратны 32 всё-таки. Но спс за код.
Это не просто вычисление размера, а ответ на вопрос:
Цитата (Naturekid)
И вообще - как грамтно написать в КС "Если икс юнита < 0" чтобы потом использовать сет юнит икс (после проверки канеш)


Если долго мучиться, то может,
все равно нихуя не получится.
 

NaturekidДата: Суббота, 29 Декабря 2012, 13:49:52 | Сообщение # 8
Группа: Заблокированные
Сообщений: 4982
Награды: 3
Репутация: 3347
Блокировки:
Impregnable, тут небольшая путаница тоже, я думал 0 0 - это верхний левый угол карты, такое вот нубло. А это центр карты %)
Так то мне в принципе без разницы (в плане сабжа) - использовать константу, вычисленную единожды для каждой карты либо функцию. Для карты 64*64 со стандартным ограничением обзора вроде так получилось

Добавлено (29 Декабря 2012, 13:49:52)
---------------------------------------------
В смысле можно считать проблему решёной вроде, если я опять чего то не упустил, но вроде всё пашет хорошо теперь.




Сообщение отредактировал Naturekid - Суббота, 29 Декабря 2012, 13:48:27
 

DiabfallДата: Суббота, 29 Декабря 2012, 13:53:08 | Сообщение # 9
Группа: Проверенные
Сообщений: 1231
Награды: 0
Блокировки:
p.s.
есть же "and"
if GetWidgetX(...) > -3272 and GetWidgetX(...) < 3272 then
...
endif
 

NaturekidДата: Суббота, 29 Декабря 2012, 13:55:48 | Сообщение # 10
Группа: Заблокированные
Сообщений: 4982
Награды: 3
Репутация: 3347
Блокировки:
да я боюсь лишний символ не так написать в кс, ок, спс.

 

ImpregnableДата: Суббота, 29 Декабря 2012, 13:58:53 | Сообщение # 11
6 уровень
Группа: Проверенные
Сообщений: 231
Награды: 0
Репутация: 92
Блокировки:
я сдаюсь facepalm

Если долго мучиться, то может,
все равно нихуя не получится.
 

NaturekidДата: Суббота, 29 Декабря 2012, 14:19:26 | Сообщение # 12
Группа: Заблокированные
Сообщений: 4982
Награды: 3
Репутация: 3347
Блокировки:
=(
Почему?

Добавлено (29 Декабря 2012, 14:19:26)
---------------------------------------------
ну не шарю я джасс, не шарю. Совсем.
Но Сетюнит икс игрек меня куда больше привлекает чем автостоп при смене локации и + утечки и лишние переменные.
Тупить по текстовому написанию могу в элементарном. Но только по джассу ;)


 

ImpregnableДата: Суббота, 29 Декабря 2012, 14:28:20 | Сообщение # 13
6 уровень
Группа: Проверенные
Сообщений: 231
Награды: 0
Репутация: 92
Блокировки:
Вот как выглядит решение твоей задачи, с использованием функций, которые я написал.
Custom Script: call SetUnitX(udg_Dum[udg_A], SafeX(GetWidgetX(udg_Dum[udg_A]) + 30.*Cos(GetUnitFacing(udg_Dum[udg_A])*bj_DEGTORAD)))
Custom Script: call SetUnitY(udg_Dum[udg_A], SafeY(GetWidgetY(udg_Dum[udg_A]) + 30.*Sin(GetUnitFacing(udg_Dum[udg_A])*bj_DEGTORAD)))


Если долго мучиться, то может,
все равно нихуя не получится.


Сообщение отредактировал Impregnable - Суббота, 29 Декабря 2012, 14:46:00
 

NaturekidДата: Суббота, 29 Декабря 2012, 14:34:27 | Сообщение # 14
Группа: Заблокированные
Сообщений: 4982
Награды: 3
Репутация: 3347
Блокировки:
Impregnable, то есть без всяких проверок что ли?
А куды его вставить, в нестандартный код? Ща попробую.

Добавлено (29 Декабря 2012, 14:34:27)
---------------------------------------------
Impregnable, слетело.
При попытке пустить стрелу за нижний предел экрана.
За правый пускал - норм было


 

ImpregnableДата: Суббота, 29 Декабря 2012, 14:35:21 | Сообщение # 15
6 уровень
Группа: Проверенные
Сообщений: 231
Награды: 0
Репутация: 92
Блокировки:
В любое удобное для тебя место, главное убедись, что установлен JNPG.

Если долго мучиться, то может,
все равно нихуя не получится.
 

NaturekidДата: Суббота, 29 Декабря 2012, 14:37:58 | Сообщение # 16
Группа: Заблокированные
Сообщений: 4982
Награды: 3
Репутация: 3347
Блокировки:
Все стороны норм кроме низа с эти кодом.

Добавлено (29 Декабря 2012, 14:36:39)
---------------------------------------------

Цитата (Impregnable)
главное убедись, что установлен JNPG.

ну ясен пень, без него вообще море ошибок, 0 действия.

Добавлено (29 Декабря 2012, 14:37:58)
---------------------------------------------
http://rghost.ru/42596505
проверил несколько раз.

Цитата (Naturekid)
Все стороны норм кроме низа


 

ImpregnableДата: Суббота, 29 Декабря 2012, 14:39:45 | Сообщение # 17
6 уровень
Группа: Проверенные
Сообщений: 231
Награды: 0
Репутация: 92
Блокировки:
Щас глянем

Если долго мучиться, то может,
все равно нихуя не получится.
 

NaturekidДата: Суббота, 29 Декабря 2012, 14:39:46 | Сообщение # 18
Группа: Заблокированные
Сообщений: 4982
Награды: 3
Репутация: 3347
Блокировки:
И да, ещё есть замечание - дамми улетает за границы обзора.

 

ImpregnableДата: Суббота, 29 Декабря 2012, 14:48:38 | Сообщение # 19
6 уровень
Группа: Проверенные
Сообщений: 231
Награды: 0
Репутация: 92
Блокировки:
Arrow2

Если долго мучиться, то может,
все равно нихуя не получится.
 

NaturekidДата: Суббота, 29 Декабря 2012, 14:53:56 | Сообщение # 20
Группа: Заблокированные
Сообщений: 4982
Награды: 3
Репутация: 3347
Блокировки:
Мерси, а что было изменено, код или я где то ляп упустил?

 

ImpregnableДата: Суббота, 29 Декабря 2012, 14:55:36 | Сообщение # 21
6 уровень
Группа: Проверенные
Сообщений: 231
Награды: 0
Репутация: 92
Блокировки:
Ты упустил.
Так на будущее:
SetUnitX(юнит, SafeX(тут вычисления))
SetUnitY(юнит, SafeY(тут вычисления))


Если долго мучиться, то может,
все равно нихуя не получится.
 

NaturekidДата: Суббота, 29 Декабря 2012, 14:57:11 | Сообщение # 22
Группа: Заблокированные
Сообщений: 4982
Награды: 3
Репутация: 3347
Блокировки:
Ааааааа, вот оно что! Семён Семёныч :D

 

Ty3uKДата: Суббота, 29 Декабря 2012, 17:30:45 | Сообщение # 23
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
А не проще проверкой координат с ректМин/Макс сделать? Ифом. Если удовлетворяет - двигаем юнита

╭∩╮(︶︿︶)╭∩╮
"Ульта Тайда мне в жопу!" © k0fe1n
Статьи: MUI-1|MUI-2|Шрифт
Полезности: JASP|JNGP|Уголок библиотек
 

SirNikolasДата: Суббота, 29 Декабря 2012, 18:06:32 | Сообщение # 24
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
Ty3uK,
Цитата (Impregnable)
Сообщение # 5


 

ExtrematorДата: Суббота, 29 Декабря 2012, 20:03:25 | Сообщение # 25
10 уровень
Группа: Проверенные
Сообщений: 3199
Награды: 0
Репутация: 1018
Блокировки:
Хотел сказать что нужно смотреть на макс/мин границы карты по X/Y, но уже об это написали выше :D

а вообще я обычно делаю так
создаю точку в нужный координатах, а потом двигаю в эту точку юнита
юнита никогда не выкинет за карту потому что тока создаётся только в пределах карты ))
 

Форум о Warcraft 3 » Раздел для картостроителей » GUI / Jass » [Вопрос] Как избежать фаталов при SetUnitXY
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

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