EXPLOSION GENERATOR von ??? |
ich weiss nicht ob eure code seite einen explosionsgenerator besitzt, aber wenn nicht dann poste ich hier mal einen (ihr werdet mich lieben) :wink: das teil ist echt geil und kann die bilder gleich als eine einzige bmp speichern (vorischt bei movies die grösser als 10MB sind, da wird er ziemlich langsam mit dem speichern) das ganze ist mehr od. weniger ein spinnof von meinem eigentlichen projekt siehe "mein actionshooter" ich werde das teil noch modifizieren, alle die mit meiner schreibweise klarkommen, können das natürlich selbst tun ;-) **benötigt blitz3D ** kurze readme dazu linke maustaste ist explosion erzeugen wenn bereits eine explosions im gange ist kommt die zweite dazu rechte maustaste ist das movie abspeichern. [code:1:93ef610dfc] Const resolutionx= 400 Const resolutiony= 400 Const movieresolutionx= 200 Const movieresolutiony= 200 Graphics3D resolutionx+80,resolutiony,16,2 Global camera Global spritemesh Global emeshnr Dim emeshes(1000) Const framejump= 5 Const ID_std= 1 Const ID_ring= 2 Global makemovie Global moviesize Type explosion Field x# Field y# Field z# Field speedx# Field speedy# Field speedz# Field size# Field realsize# Field time# Field progress# Field mesh Field starttime End Type Type bigexplosion Field pivot Field ID End Type Type movie Field image End Type Function loadmeshes() emeshnr= 0 ; emeshes(0)= LoadMesh("bombex.x") ; etex= LoadTexture("bombex.jpg") emeshes(0)= CreateSphere(3) ScaleMesh emeshes(0),0.5,0.7,0.5 EntityColor emeshes(0),247,83,17 ; EntityColor emeshes(0),20,83,255 ; EntityColor emeshes(0),50,255,100 HideEntity emeshes(0) emeshes(1)= CreateSphere(3) ScaleMesh emeshes(1),0.5,0.7,0.5 EntityColor emeshes(1),20,183,17 HideEntity emeshes(1) End Function Function generateexplosion() Local xscale#,yscale#,size,generalsize#,ringsize#,ringpos#,ringspeed# generalsize#= 3 ringsize#= 10 ringspeed#= 1 bigexplosion.bigexplosion= New bigexplosion bigexplosionID= ID_std bigexplosionpivot= CreatePivot() For x= 0 To 500 explosion.explosion= New explosion explosionmesh= CopyEntity( emeshes(0),bigexplosionpivot ) HideEntity explosionmesh RotateEntity explosionmesh,Rand(360),Rand(360),Rand(360) EntityAlpha explosionmesh,0.7 EntityBlend explosionmesh,3 explosionx= 0 explosiony= 0 explosionz= 0 explosionspeedx= Rand(100) -50 explosionspeedx= explosionspeedx /100 explosionspeedy= Rand(100) -50 explosionspeedy= explosionspeedy /100 explosionspeedz= Rand(100) -50 explosionspeedz= explosionspeedz /100 size= Rand(100) If size >= 0 And size < 10 explosionsize= Rand(70)+30 EndIf If size >= 10 And size < 30 explosionsize= Rand(30)+30 EndIf If size >= 30 And size < 100 explosionsize= Rand(5)+5 EndIf explosion ime= Rand(200)+200 explosionprogress= 0 explosionstarttime= Rand(50) Next bigexplosion.bigexplosion= New bigexplosion bigexplosionID= ID_ring bigexplosionpivot= CreatePivot() For x= 0 To 1000 explosion.explosion= New explosion explosionmesh= CopyEntity( emeshes(1),bigexplosionpivot ) HideEntity explosionmesh RotateEntity explosionmesh,Rand(360),Rand(360),Rand(360) EntityAlpha explosionmesh,0.7 EntityBlend explosionmesh,3 ringpos#= Rand(3600) ringpos#= ringpos# /10 explosionx= Sin(ringpos#)*ringsize explosiony= Cos(ringpos#)*ringsize explosionz= 0 explosionspeedx= Rand(100) -50 explosionspeedx= explosionspeedx /1000 + Sin(ringpos#)*ringspeed explosionspeedy= Rand(100) -50 explosionspeedy= explosionspeedy /1000 + Cos(ringpos#)*ringspeed explosionspeedz= Rand(100) -50 explosionspeedz= explosionspeedz /1000 size= Rand(100) If size >= 0 And size < 10 explosionsize= Rand(70)+30 EndIf If size >= 10 And size < 30 explosionsize= Rand(30)+30 EndIf If size >= 30 And size < 100 explosionsize= Rand(5)+5 EndIf explosion ime= Rand(200)+200 explosionprogress= 0 explosionstarttime= Rand(50) Next End Function Function computeexplosions() Local alpha# Local alphastrenght# alphastrenght= 0.2 For explosion.explosion= Each explosion If explosionstarttime<= 0 ShowEntity explosionmesh explosion ealsize= Sin(90* (explosionprogress/ explosion ime) ) *explosionsize explosionx= explosionx+Sin(200* (explosionprogress/ explosion ime) )*explosionspeedx explosiony= explosiony+Sin(200* (explosionprogress/ explosion ime) )*explosionspeedy explosionz= explosionz+Sin(200* (explosionprogress/ explosion ime) )*explosionspeedz alpha= (explosionprogress/ explosion ime)*2 -1 If alpha < 0 alpha= alphastrenght Else alpha= ((1-alpha)^2) *alphastrenght EndIf EntityAlpha explosionmesh,alpha PositionEntity explosionmesh,explosionx,explosiony,explosionz ScaleEntity explosionmesh, explosion ealsize, explosion ealsize, explosion ealsize TurnEntity explosionmesh, Sin(180* (explosionprogress/ explosion ime)),Sin(100* (explosionprogress/ explosion ime)),Sin(280* (explosionprogress/ explosion ime)) ; ScaleEntity explosionmesh, 5, 5, 5 explosionprogress= explosionprogress+1 If explosionprogress > explosion ime FreeEntity explosionmesh Delete explosion EndIf Else explosionstarttime= explosionstarttime-1 EndIf Next For bigexplosion.bigexplosion= Each bigexplosion If bigexplosionID= ID_ring TurnEntity bigexplosionpivot,0,0,0 EndIf If CountChildren(bigexplosionpivot) = 0 FreeEntity bigexplosionpivot Delete bigexplosion EndIf Next End Function Function explosionactive() explosion.explosion= First explosion If explosion= Null Return 0 EndIf Return 1 End Function Function deletemovie() For movie.movie= Each movie FreeImage movieimage Delete movie Next moviesize= 0 End Function Function addmovie() image.movie= New movie imageimage= CreateImage(movieresolutionx,movieresolutiony) SetBuffer FrontBuffer() GrabImage imageimage,0,0 SetBuffer BackBuffer() moviesize= moviesize+1 End Function Function draw2d() Local datasize Color 150,150,150 Rect resolutionx,0,80,resolutiony Color 255,0,0 If makemovie= 1 Oval resolutionx +20-5,20-5,10,10 EndIf Text resolutionx+5,30, "frames:" Text resolutionx+5,45, Str(moviesize) Text resolutionx+5,60, "Datasize" datasize= (moviesize*movieresolutionx*movieresolutiony*3) /1024 Text resolutionx+5,75, datasize+" KB" End Function Function savemovie() Local image, xoffs,nr,fileflag If moviesize= 0 Return time = MilliSecs() Color 40,40,40 Rect 0,0,resolutionx+80,resolutiony Color 255,255,255 Text (resolutionx+80)/2, resolutiony/2,"SAVING IMAGE...",1,1 Flip Color 100,100,100 Rect 0,0,resolutionx+80,resolutiony image= CreateImage(movieresolutionx*moviesize,movieresolutiony, moviesize) SetBuffer ImageBuffer(image) xoffs= 0 For movie.movie= Each movie DrawImage movieimage,xoffs,0 xoffs= xoffs+ movieresolutionx Next path$= CurrentDir() ChangeDir(path+"images") If CurrentDir() <> path+"images" CreateDir(path+"images") ChangeDir(path+"images") EndIf nr= 1 fileflag= 0 Repeat file= OpenFile("explosion"+Str(nr)+".bmp") fileflag= 0 If file <> 0 nr= nr+1 CloseFile file Else fileflag= 1 EndIf Until fileflag= 1 SaveImage (image,"explosion"+Str(nr)+".bmp") SetBuffer BackBuffer() FreeImage image ChangeDir(path) time= MilliSecs()-time If time < 1000 Delay (1000-time) EndIf End Function loadmeshes() ; generateexplosion() camera= CreateCamera() CameraViewport camera,0,0,movieresolutionx,movieresolutiony CameraRange camera,100,10000 MoveEntity camera, 0,0,-1000 CameraZoom camera,3.5 AmbientLight 255,255,255 makemovie= 0 Color 100,100,100 Rect 0,0,resolutionx+80,resolutiony Repeat If makemovie= 0 And explosionactive() =1 makemovie= 1 deletemovie() EndIf If makemovie= 1 And explosionactive()= 0 makemovie= 0 EndIf If makemovie = 1 addmovie() EndIf For x= 0 To framejump computeexplosions() Next If MouseHit(1) generateexplosion() If MouseHit(2) savemovie() RenderWorld() draw2d() Flip Until KeyDown(1) [/code:1:93ef610dfc] mfg stfighter |
von ??? |
hübsch. aber kein projekt. [b:c3242ba886]VERSCHOBEN INS CODEARCHIV[/b:c3242ba886] |
von ??? |
vielleicht wird noch eins draus ;-) |