3D Explosion(Partikeleffekte) von ???
Hi,

Wollte mal bissl was in Sachen Partikeleffekten machen.

Mit den Werten, die teilweise übergeben, teilweise in den Funktionen sind, könnt ihr euch n bisschen rumspielen!

[code:1:fc902b9b8b]; Consts
Const screenwidth = 800
Const screenheight = 600
Const colormode = 16

Const maxparticles = 500
Const maxshrapnels = 20

; Grafikmodus setzten
Graphics3D screenwidth,screenheight,colormode,2
AppTitle("3D")
SetBuffer BackBuffer()

;
; Type
;
Type explo_t
Field partikelanz
Field middle,partikel[maxparticles],pverz[maxparticles]
Field shrapanz,midshrap[maxshrapnels],shrap[maxshrapnels],shrapx,sverz[maxshrapnels]
Field time,update,speed#
End Type


; Kamera
Global camera = CreateCamera()
AmbientLight 255,255,255
PositionEntity camera,0,0,-100

;
; Funktionen
;
Function CreateExplosion(x#,y#,z#,partikel,radius#,time,shrapanz=0,sverz=25)
Local expl.explo_t
expl.explo_t = New explo_t
explmiddle = CreatePivot()
PositionEntity explmiddle,x#,y#,z#
expl ime = time
explspeed# = (radius#/time)*20.0
explupdate = MilliSecs()
explpartikelanz=partikel-1
For i=0 To explpartikelanz
explpartikel[i] = CreateSprite()
EntityParent explpartikel[i],explmiddle,0
EntityColor explpartikel[i],255,127,0
TurnEntity explpartikel[i],Rand(360),Rand(360),Rand(360)
ScaleSprite explpartikel[i],0.1,0.1
explpverz[i] = Rand(0,Ceil(speed#*25))
Next
If shrapanz <> 0 Then
explshrapx = -20
explshrapanz = shrapanz-1
For i=0 To shrapanz-1
explmidshrap[i] = CreatePivot()
EntityParent explmidshrap[i],explmiddle,0
TurnEntity explmidshrap[i],0,Rand(360),0
explshrap[i] = CreateSprite()
EntityParent explshrap[i],explmidshrap[i],0
EntityColor explshrap[i],100,100,100
ScaleSprite explshrap[i],0.2,0.2
explsverz[i] = Rand(0,sverz)
Next
End If
End Function

Function UpdateExplosions()
Local x
For et.explo_t = Each explo_t
If et ime > 0 Then
If MilliSecs()-etupdate > 20 Then
etupdate = MilliSecs()
et ime = et ime - 20
For i=0 To etpartikel[i]
If etpverz[i]<0 Then
MoveEntity etpartikel[i],0,0,etspeed
Else
etpverz[i] = etpverz[i]-etspeed
End If
Next
If etshrapanz <> 0 Then
For i=0 To etshrapanz
x = etshrapx-etsverz[i]
If x < -20 Then x = -20
PositionEntity etshrap[i],x*1+20,-(x*x)/20+20,0
Next
End If
etshrapx = etshrapx+1
End If
Else
FreeEntity etmiddle
Delete et.explo_t
End If
Next
End Function

;
; Hauptschleife
;
Repeat
If MouseHit(1) Then CreateExplosion((MouseX()-400)/4.0,(-MouseY()+300)/4.0,0,500,150,2000,20)
UpdateExplosions
UpdateWorld
RenderWorld
Flip
Until KeyDown(1)
End[/code:1:fc902b9b8b]

Viel Spass, Skate
===
von ???
na hat ja doch geklappt ;)
===
von ???
Jep, schaut doch schonmal recht gut aus. Zwar ein bisschen langsam, aber was solls, ist ne massigfette explo xD
===
von ???
Thx, ich werd das in meinem akt. game einbauen.

Mfg Skate
===
von ???
hi,
es gibt einen felher: bei ca. 50 explosionen kommt memory acces violation ;-)
ansonsten ganz kewl.
cu



Suche:
(unterstützt mySQL Wildcards ala %)
Titel:
Text:
Autor: