forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   3D-программирование (http://forum.boolean.name/forumdisplay.php?f=12)
-   -   Muzle Flash! Огонь из оружия! (http://forum.boolean.name/showthread.php?t=11683)

Fatalix3d 08.01.2010 14:20

Muzle Flash! Огонь из оружия!
 
Парни поделитесь мыслями как реализовать вспышку от оружия при стрельбе! Вид не от первого лица а от 3-го, то есть как его правильно подстроит под ствол дула, я хочу поставить метку в виде маленького куба, а потом отыскать его через findChild. Но я сомневаюсь в этом подходе, вот хотелось бы узнать кто как делает.

IgorOK 08.01.2010 14:27

Ответ: Muzle Flash! Огонь из оружия!
 
Лучше не куб ставь, а Helpers -> Point
Лишняя геометрия в файле ни к чему. А вообще можно сделать вспышку как часть модели оружия.

Fatalix3d 08.01.2010 14:34

Ответ: Muzle Flash! Огонь из оружия!
 
Хм а как узнать ее координаты, ведь надо прилепить туда партикл.?

EvilChaotic 08.01.2010 14:40

Ответ: Muzle Flash! Огонь из оружия!
 
Цитата:

Сообщение от Fatalix3d (Сообщение 132651)
Парни поделитесь мыслями как реализовать вспышку от оружия при стрельбе! Вид не от первого лица а от 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 (Сообщение 132653)
Хм а как узнать ее координаты, ведь надо прилепить туда партикл.?

Не волнуйся в б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

А вообще, последние это говнокод, копировать это тупо и медленно. Но это самый простой способ.

Fatalix3d 08.01.2010 15:58

Ответ: Muzle Flash! Огонь из оружия!
 
EvilChaotic! Огромное спасибо что не поленился и все расписал!

Colossus 14.01.2010 12:12

Ответ: Muzle Flash! Огонь из оружия!
 
а как можна замутить вспышку от выстрела как в макс пейн 2??? там она красивая ИМХО

Reizel 14.01.2010 22:03

Ответ: Muzle Flash! Огонь из оружия!
 
На блице чем красивей тем тормозней :) А вообще можно тупым подбором найти локальные координаты кончика ствола у оружия, тогда вспышку можно будет припарентить с оружию и ставить в эти координаты но это уменьшает гибкость.


когда был нубом делал вспышку МОДЕЛЬЮ, вы прикидываете, загрузил модель оружия, и когда стрелял делал FreeEntity для пушки, загружал (прямо в цикле :)) пушку со вспышкой, давал полюбоваться ею 1 кадр и опять FreeEntityЮ загружаем модель пушки и радуемся лагам :)

RegIon 16.01.2010 07:19

Ответ: Muzle Flash! Огонь из оружия!
 
А как прикрутить нормальный прицел к 3 личному шутеру( навёл прицел - попал, а не промазал)


Часовой пояс GMT +4, время: 12:55.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot