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 ;-)



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