Показать сообщение отдельно
Старый 08.01.2010, 14:40   #4
EvilChaotic
Мастер
 
Аватар для EvilChaotic
 
Регистрация: 05.04.2008
Сообщений: 910
Написано 530 полезных сообщений
(для 3,006 пользователей)
Ответ: Muzle Flash! Огонь из оружия!

Сообщение от 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
А вообще, последние это говнокод, копировать это тупо и медленно. Но это самый простой способ.
__________________

EvilChaotic About
(Offline)
 
Ответить с цитированием
Эти 3 пользователя(ей) сказали Спасибо EvilChaotic за это полезное сообщение:
Arles (08.04.2010), Fatalix3d (08.01.2010), Nex (08.01.2010)