Сообщение от Fatalix3d
Парни поделитесь мыслями как реализовать вспышку от оружия при стрельбе! Вид не от первого лица а от 3-го, то есть как его правильно подстроит под ствол дула, я хочу поставить метку в виде маленького куба, а потом отыскать его через findChild. Но я сомневаюсь в этом подходе, вот хотелось бы узнать кто как делает.
|
Все нормально. Только действительно вместо куба нужно ставить пивот в максе (Helpers/Point). Называешь его в максе FirePoin01 если больше одного FirePoin02....FirePoin03... Создается массив в типе объекта
Field FirePoints%[10] ; 10 или максимальное число точек
При выполнение функции создания этого объекта будем проходится по геометрии
For i=1 To 10
If i < 10 then local add$ = "0"
local f_p% = xFindChild(obj\mesh%."FirePoint"+add$+i)
If f_p% <> 0
obj/FirePoints[i] = f_p% ; Сохраняем сылку
f_p% = 0 : add$ = ""
Else
Exit ; Выходим из цикла если не находим следующий FirePoint
End If
Next
Далее при стрельбе мы будем определять из какого оруия мы стреляем (Их например тоже максимум 10)
Создавать мы будем эффект взрыва на obj\FirePoints[obj\SctWeapon]
obj\SctWeapon - твое текущее оружие.
Например так
. Писал код прямо в сообщении так что если буду ошибки исправь
Сообщение от Fatalix3d
Хм а как узнать ее координаты, ведь надо прилепить туда партикл.?
|
Не волнуйся в б3д файле все координаты чилдов сохранятся при экспорте, не забудь все
FirePoint линковать с оружиями. Узнать координаты можно так
CreateMuzzleStreak(sprite%,obj\FirePoints[obj\SctWeapon]) ; Твоя функция создания вспышки
x#,y#,z# - позиции создания
rx#,ry#,rz# - ротации создания
Тип вспышки:
Type Muzzle
field entity%
field tml%
End Type
Создание вспышки:
Function CreateMuzzleStreak(Sprite%,ent%)
If Sprite% <> 0 And ent% <> 0
local ent% = obj/FirePoints[obj\SctWeapon]
local x# = xEntityX(ent% ,1) : local y# = xEntityY(ent% ,1) : local z# = xEntityZ(ent% ,1)
local rx# = xEntityPitch(ent% ,1) : local ry# = xEntityYaw(ent% ,1) : local rz# = xEntityRoll(ent% ,1)
mz.Muzzle = New Muzzle
mz\entity = xCopyEntity(sprite)
mz\tml = 10
xPositionEntity mz\entity,x#,y#,z#
xRotateEntity mz\entity,rx#,ry#,rz#
End Function
Апдейт вспышки:
Function UpdateMuzzles()
for mz.Muzzle = Each Muzzle
If mz\tml> 0 then
mz\tml= mz\tml- 1
Else
If mz\entity <> 0
xFreeEntity mz\entity
Delete mz
End If
End If
End Funсtion
А вообще, последние это говнокод, копировать это тупо и медленно. Но это самый простой способ.