[Вопрос] Как избежать фаталов при 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
Блокировки:
| я сдаюсь
Если долго мучиться, то может, все равно нихуя не получится.
|
|
|
|
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
Блокировки:
| Ааааааа, вот оно что! Семён Семёныч
|
|
|
|
Ty3uK | Дата: Суббота, 29 Декабря 2012, 17:30:45 | Сообщение # 23 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| А не проще проверкой координат с ректМин/Макс сделать? Ифом. Если удовлетворяет - двигаем юнита
|
|
|
|
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, но уже об это написали выше
а вообще я обычно делаю так создаю точку в нужный координатах, а потом двигаю в эту точку юнита юнита никогда не выкинет за карту потому что тока создаётся только в пределах карты ))
|
|
|
|