Сейчас 04:08:41 Пятница, 29 марта, 2024 год
[ x ] Главная ⇒ Форум ⇐ RSS Файлы Cтатьи Картинки В о й т и   или   з а р е г и с т р и р о в а т ь с я


[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: PUVer, SirNikolas, Ty3uK  
Форум о Warcraft 3 » Раздел для картостроителей » Вопросы по картостроению » Нужно что-то типо системы определения высот... ([JASS])
Нужно что-то типо системы определения высот...
GraF251996Дата: Понедельник, 24 Января 2011, 22:50:32 | Сообщение # 1
8 уровень
Группа: Проверенные
Сообщений: 756
Награды: 1
Репутация: 321
Блокировки:
Надо чтобы пуля при столкновении с рельефом уничтожалась,сейчас обьясню:
Вот как в варе

Вот как надо:

Также если,скажем,юнит стоит выше,линия движения пули должна быть тоже,соответственно выше.
Пишу тут,поскольку джасс не знаю.
Примечание: надо чтобы юнит также умирал при столкновении с декором(юнитов не трогать - осуществленно)
Если не поняли что я хочу,напишите,и я нарисую еще пару схем)
Прикрепления: 5338012.jpg (27.1 Kb) · 7207824.jpg (28.0 Kb)


12Gb RAM 1333@1600 | AMD Phenom II x4 B50 3.1Ghz@3.70Ghz | Asus Xonar D1 | Asus GTX560Ti 1Gb GDDR5 820Mhz@965Mhz | Asus VW225N


Сообщение отредактировал GraF251996 - Понедельник, 24 Января 2011, 22:57:17
 

KаratДата: Понедельник, 24 Января 2011, 23:11:45 | Сообщение # 2
3 уровень
Группа: Пользователи
Сообщений: 69
Награды: 0
Репутация: 10
Блокировки:
Quote (rixt7956)
забей, вар не потдерживает работу с 3d векторами

На jass поддерживает.
 

rixt7956Дата: Понедельник, 24 Января 2011, 23:13:59 | Сообщение # 3
9 уровень
Группа: Проверенные
Сообщений: 1097
Награды: 0
Репутация: 153
Блокировки:
нет.если да то сделай пример и этим ты сделаешь прорыв в картостраение.

Сообщение отредактировал rixt7956 - Вторник, 25 Января 2011, 20:58:53
 

KаratДата: Понедельник, 24 Января 2011, 23:15:59 | Сообщение # 4
3 уровень
Группа: Пользователи
Сообщений: 69
Награды: 0
Репутация: 10
Блокировки:
Quote (rixt7956)
нет.если да то сделай пример и этим ты сделаешь прорыв в картостраение.

http://www.youtube.com/watch?v=l3cVS9G0lBg&feature=player_embedded
Теперь скажи мне, что это 2d движение.
 

rixt7956Дата: Понедельник, 24 Января 2011, 23:19:21 | Сообщение # 5
9 уровень
Группа: Проверенные
Сообщений: 1097
Награды: 0
Репутация: 153
Блокировки:
за исключением молний

Добавлено (24-01-2011, 23:18)
---------------------------------------------
я не с компа. объясни мне что на том видео.

Добавлено (24-01-2011, 23:19)
---------------------------------------------
и ты сам jass знаешь?

 

KаratДата: Понедельник, 24 Января 2011, 23:20:22 | Сообщение # 6
3 уровень
Группа: Пользователи
Сообщений: 69
Награды: 0
Репутация: 10
Блокировки:
Quote (rixt7956)
забей, вар не потдерживает работу с 3d векторами

http://xgm.ru/p/wc3/math_mov
Вот ещё.
Quote (rixt7956)
я не с компа. объясни мне что на том видео.

Посмотришь сам, когда зайдёшь с компа.
 

Manko_OДата: Понедельник, 24 Января 2011, 23:20:24 | Сообщение # 7
7 уровень
Группа: Проверенные
Сообщений: 296
Награды: 0
Репутация: 23
Блокировки:
rixt7956,
Не работал с этим так что уверенным быть не могу.
local unit u = наш дамми
local real fld = GetUnitFlyHeight(u)//высота полёта даммика.
local location lo = Location(GetUnitX(u),GetUnitY(u))
local real fl2 = GetLocationZ (lo)
if fl < fl2 then
//если высота рельефа больше высоты полёта даммика то делаем свои действия.(взрываем и т.д)
else
//двигаем дальше например.
endif
 

rixt7956Дата: Понедельник, 24 Января 2011, 23:29:46 | Сообщение # 8
9 уровень
Группа: Проверенные
Сообщений: 1097
Награды: 0
Репутация: 153
Блокировки:
высота полета всегда будет одинаковой не зависимо от рельефа.

Добавлено (24-01-2011, 23:29)
---------------------------------------------
это идея не возможна потому что ты не сможешь определить высоту z юнита в воздухе, именно z , а не высоту полета.

 

Manko_OДата: Понедельник, 24 Января 2011, 23:33:17 | Сообщение # 9
7 уровень
Группа: Проверенные
Сообщений: 296
Награды: 0
Репутация: 23
Блокировки:
rixt7956,
А зачем находить z юнита? Высоты тебе будет мало?
 

rixt7956Дата: Понедельник, 24 Января 2011, 23:38:10 | Сообщение # 10
9 уровень
Группа: Проверенные
Сообщений: 1097
Награды: 0
Репутация: 153
Блокировки:
хотя можно определить z точки, а потом добавить к ней высоту полета дами, завтра попытаюсь сделать наработку

Добавлено (24-01-2011, 23:36)
---------------------------------------------
повторяю, высота полета это число равное указанное число высоты+высота рельефа.

Добавлено (24-01-2011, 23:38)
---------------------------------------------
но при определение ее тебе появиться только указанное тобой число.

 

Manko_OДата: Вторник, 25 Января 2011, 00:05:01 | Сообщение # 11
7 уровень
Группа: Проверенные
Сообщений: 296
Награды: 0
Репутация: 23
Блокировки:
Хм... Ещё проблема нельзя использовать будет на возвышенности) Сразу сработает. Не вариант...
 

FkoFFДата: Вторник, 25 Января 2011, 00:23:09 | Сообщение # 12
Группа: Заблокированные
Сообщений: 4356
Награды: 1
Репутация: 1413
Блокировки:
все реально, уже делалось неоднократно.. Суть:

globals
location udg_LocZ_Point = Location(0,0)
endglobals

function GetUnitZ takes unit u returns real
call MoveLocation(udg_LocZ_Point, GetUnitX(u),GetUnitY(u))
return GetLocationZ(udg_LocZ_Point)
endfunction

function GetUnitZEx takes unit u returns real
return GetUnitZ(u)+GetUnitFlyingHeight(u)
endfunction

function SetUnitZ takes unit u, real z returns nothing
call SetUnitFlyingHeight(u, z-GetUnitZ(u), 0)
endfunction

а дальше - классический Comparison:

if GetLocationZ(PolarX(GetUnitX(u),FaceAngle(u),20),PolarY(GetUnitY(u),FaceAngle(u),20)) >= GetUnitZEx(u) then
call KillUnit(u)
endif

Добавлено (25-01-2011, 00:23)
---------------------------------------------
или даже компарисон можно проще:

if GetUnitFlyingHeight(u) != 5 then
call KillUnit(u)
endif


 

rixt7956Дата: Вторник, 25 Января 2011, 07:27:15 | Сообщение # 13
9 уровень
Группа: Проверенные
Сообщений: 1097
Награды: 0
Репутация: 153
Блокировки:
ты не понял, при движение юнита надо будет все время менять высоту полета, подстраивая ее под начальное положение, так как при передвижение, если этого не будет, пуля будет все время к примеру на расстояние 400 от высоты рельефа.
 

FkoFFДата: Вторник, 25 Января 2011, 07:35:22 | Сообщение # 14
Группа: Заблокированные
Сообщений: 4356
Награды: 1
Репутация: 1413
Блокировки:
rixt7956, неужели до тебя дошло )

 

rixt7956Дата: Вторник, 25 Января 2011, 08:30:26 | Сообщение # 15
9 уровень
Группа: Проверенные
Сообщений: 1097
Награды: 0
Репутация: 153
Блокировки:
я это с самого начала понял
 

[DUОS]Дата: Вторник, 25 Января 2011, 08:40:00 | Сообщение # 16
Группа: Заблокированные
Сообщений: 6279
Награды: 9
Репутация: 1708
Блокировки:

Так сделать можно.

Формула для вычисления высоты юнита над ландом: landZ + unitFlyHeight, где landZ - высота рельефа, а unitFlyHeight - высота полёта этой самой пули.
Таким образом, при каждой смене позиции пули нужно устанавливать высоту юнита, равную предыдущей (она должна быть const), записывая куда-нибудь высоту пули изначальную и меняя итоговое Z на это значение с проверкой, что юнит не ниже ланда.
Если кому интересно, напишу подобный спелл.


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


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

[stebashka]Дата: Вторник, 25 Января 2011, 09:11:18 | Сообщение # 17
пути и нити разными бывают
Группа: Библиотекари
Сообщений: 4719
Награды: 5
Блокировки:
Quote (|DUОS|)
интересно

многим думаю это будет интересно


 

moped555Дата: Вторник, 25 Января 2011, 15:49:51 | Сообщение # 18
4 уровень
Группа: Пользователи
Сообщений: 92
Награды: 0
Репутация: 0
Блокировки:
Если делаете выложите это будет оч. жестоко
 

[DUОS]Дата: Вторник, 25 Января 2011, 16:12:35 | Сообщение # 19
Группа: Заблокированные
Сообщений: 6279
Награды: 9
Репутация: 1708
Блокировки:
Quote (|stebashka|)
многим думаю это будет интересно

Хорошо.

Code
function IsZLargerThanZ takes real x1, real x2, real y1, real y2 returns boolean
     local location l1 = Location(x1,y1)     
     local location l2 = Location(x2,y2)   
     local real z1 = GetLocationZ(l1)
     local real z2 = GetLocationZ(l2)
      
     call RemoveLocation(l1)
     call RemoveLocation(l2)
      
     set l1 = null
     set l2 = null
     if z1 > z2 then
         return true
     else
         return false     
     endif
endfunction

function GetPointUnitPropHeight takes real x, real y, unit u, real prop returns real
     local location l = Location(x,y)
     local location loc = GetUnitLoc(u)
     local real z1 = GetLocationZ(l)
     local real z2 = GetLocationZ(loc)
     local real fh = GetUnitFlyHeight(u)
      
     call RemoveLocation(loc)
     call RemoveLocation(l)
      
     set loc = null  
     if z2 + fh != prop then
         return prop - z2
     else
         return z2 + fh
     endif
endfunction

Эти две замечательные функции нам помогут. Всё, что от вас требуется - вставить их в общий код карты, а в функции движение написать следующий код:
Code
if IsZLargerThanZ(GetWidgetX(bullet),GetWidgetY(bullet),GetWidgetX(bullet)+dist*Cos(a),GetWidgetY(bullet)+dist*Sin(a)) then
         call KillUnit(bullet)
     else
         call SetUnitFlyHeight(bullet,GetPointUnitPropHeight(GetWidgetX(bullet),GetWidgetY(bullet),bullet,prop),0.)
     endif
bullet - Дамми-пуля;
dist - Расстояние, на которое перемещается пуля за единицу времени;
a - Угол, под которым происходит перемещение;
prop - Значение, которое показывает, какую поддерживать пуле высоту.


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


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

DreiiДата: Вторник, 25 Января 2011, 16:28:57 | Сообщение # 20
10 уровень
Группа: Проверенные
Сообщений: 4991
Награды: 0
Репутация: 603
Блокировки:
[DUОS], Ты не перестаешь радовать)

 

rixt7956Дата: Вторник, 25 Января 2011, 20:54:57 | Сообщение # 21
9 уровень
Группа: Проверенные
Сообщений: 1097
Награды: 0
Репутация: 153
Блокировки:
Quote (|DUОS|)
function IsZLargerThanZ takes real x1, real x2,real y1, real y2 returns boolean

Quote (|DUОS|)
if IsZLargerThanZ(GetWidgetX(bullet),GetWidgetY(bullet),GetWidgetX(bullet)+dist*Cos(a),GetWidgetY(bullet)+dist*Sin(a)) then

Ты тут напутал


Сообщение отредактировал rixt7956 - Вторник, 25 Января 2011, 20:56:47
 

[DUОS]Дата: Среда, 26 Января 2011, 14:55:22 | Сообщение # 22
Группа: Заблокированные
Сообщений: 6279
Награды: 9
Репутация: 1708
Блокировки:
rixt7956,
Ойблин, да. Напутал.
Спасибо тебе.


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


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

GraF251996Дата: Среда, 26 Января 2011, 16:50:56 | Сообщение # 23
8 уровень
Группа: Проверенные
Сообщений: 756
Награды: 1
Репутация: 321
Блокировки:
Оу,сейчас розгребу)
Кстати видел подобную систему в карте UnRes она является открытой,но я ничего в джассе не смыслю так что.)))
Кому интересно можете вскрыть посмотреть.
Карта с хгм.

Добавлено (26-01-2011, 16:50)
---------------------------------------------
[DUОS], можешь выложить в карте?
плз))


12Gb RAM 1333@1600 | AMD Phenom II x4 B50 3.1Ghz@3.70Ghz | Asus Xonar D1 | Asus GTX560Ti 1Gb GDDR5 820Mhz@965Mhz | Asus VW225N
 

Vova5009Дата: Среда, 26 Января 2011, 18:47:28 | Сообщение # 24
8 уровень
Группа: Проверенные
Сообщений: 577
Награды: 0
Репутация: 125
Блокировки:
Незнаю, может то, что нужно.
P.S.
Да простит меня администрация за ссылку на другой сайт)


Сообщение отредактировал Vova5009 - Среда, 26 Января 2011, 18:47:56
 

GraF251996Дата: Четверг, 27 Января 2011, 18:33:56 | Сообщение # 25
8 уровень
Группа: Проверенные
Сообщений: 756
Награды: 1
Репутация: 321
Блокировки:
Vova5009, очень непохоже на то что надо
это вообще нужно для стрельбы ПКМ

Добавлено (27-01-2011, 18:33)
---------------------------------------------
ап


12Gb RAM 1333@1600 | AMD Phenom II x4 B50 3.1Ghz@3.70Ghz | Asus Xonar D1 | Asus GTX560Ti 1Gb GDDR5 820Mhz@965Mhz | Asus VW225N
 

Форум о Warcraft 3 » Раздел для картостроителей » Вопросы по картостроению » Нужно что-то типо системы определения высот... ([JASS])
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

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