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 |