Seite 1 von 1
ParticleSystem , Start - Endsprite loop möglich?
Verfasst: 01.04.2014 23:16
von True29
Hallo Grüßt euch

sorry für den Komischen Thread Titel mir viel kein Besserer ein
Ich habe ein Particlesystem bei welchem ich das Start und Endsprite angeben kann wärend der Laufzeit wird dann das Sprite gewechselt.
Nun hätte ich gerne das wenn ich eine Flag setze loop = True , er wenn er am ende angelangt is bei 0 anfängt.
Kp wie am besten ? Grüße und danke für eure Vorschläge.
Einen Demo , oder funktionierend code habe ich nun leider nicht parrat.
Code ausschnitt.
Code: Alles auswählen
Prozedur ADD_PARTICLE2(*ParticleTemplate.Particle .....)
Protected.f fInvLifeTime = 1.0 / fLifeTime
AddElement(Particle())
With Particle()
;// Start und Endsprite bestimmen
\Particle = *ParticleTemplate\StartParticle
\DeltaParticle = (*ParticleTemplate\EndParticle - *ParticleTemplate\StartParticle) * fInvLifeTime
;...... Rest
endwith()
endprozedur()
procedure MOVE_PARTICLE(fTime.f)
;// Partikel animieren
\Particle + \DeltaParticle * fTime.f
endprozedur
Procedure RENDER_PARTICLE(fTime.f)
DisplaySprite()
Endprozedur
Re: ParticleSystem , Start - Endsprite loop möglich?
Verfasst: 02.04.2014 17:27
von bobobo
Ich weiß nicht, ob Dir das nun direkt weiterhilft, aber ich hab hier 'nen Code, der dynamisch mit Sprites
rumfuhrwerkt. Fleisch bringt Dich das in die richtige Spur.
Code: Alles auswählen
;
;SpriteGimmick
;
InitSprite()
OpenWindow(0,0,0,500,500,"Stuss",#PB_Window_ScreenCentered|#PB_Window_SystemMenu)
OpenWindowedScreen(WindowID(0),0,0,500,500,1,0,0)
Structure sp
id.l
x.f
y.f
zoom.f
transpa.f
EndStructure
NewList spryte.sp()
CreateSprite(0,3,3);,#PB_Sprite_AlphaBlending )
StartDrawing(SpriteOutput(spryte0))
Circle(1,1,1)
StopDrawing()
max=20
For s=1 To max ;0 ist das BasisSprite
AddElement(spryte())
spryte()\id=s
spryte()\x=Random(480)
spryte()\y=Random(480)
spryte()\zoom=1
spryte()\transpa=255
CopySprite(0,spryte()\id)
Next s
Repeat
event=WaitWindowEvent(10)
TransparentSpriteColor(0, #Black)
ClearScreen(#Black)
ForEach spryte()
If spryte()\id=1
Debug StrF(spryte()\zoom,2)+" "+StrF(zombie.f,2) +" "+StrF(spryte()\transpa,2)
EndIf
DisplayTransparentSprite(spryte()\id,spryte()\x,spryte()\y,spryte()\transpa,RGB(spryte()\zoom,spryte()\transpa,spryte()\transpa))
zombie.f=Random(500)/250
spryte()\zoom+zombie
spryte()\transpa=255-spryte()\zoom
If spryte()\transpa<0
spryte()\transpa=0
EndIf
If spryte()\transpa>255
spryte()\transpa=255
EndIf
ZoomSprite(spryte()\id,spryte()\zoom,spryte()\zoom)
spryte()\x=Spryte()\x-zombie/2
spryte()\y=Spryte()\y-zombie/2
If spryte()\zoom>255
If spryte()\id=1
run+1
EndIf
spryte()\zoom=1
ZoomSprite(spryte()\id,spryte()\zoom,spryte()\zoom)
spryte()\x=Random(480)
spryte()\y=Random(480)
spryte()\transpa=255
If run>4
DeleteElement(spryte(),spryte()\id)
EndIf
EndIf
Next
If ListSize(spryte())=0
quit+1
EndIf
FlipBuffers()
Select event
Case #PB_Event_CloseWindow
quit+1
EndSelect
Until quit
Re: ParticleSystem , Start - Endsprite loop möglich?
Verfasst: 02.04.2014 17:58
von True29
ok danke

ich schaus mir an.
Re: ParticleSystem , Start - Endsprite loop möglich?
Verfasst: 02.04.2014 20:34
von True29
hab nun einen weg gefunden.
ich habe in meinem Particle system ein Animations system integriert

sieht nun so aus. Funktioniert auch

noch bisl feinarbeit steht dann an.
Grüße
Code: Alles auswählen
Procedure RENDER_PARTICLE(fTime.f)
ForEach Particle()
If Particle()\AnimationTemplate <> ""
Sprite3DBlendingMode(Particle()\BlendingModeSource,Particle()\BlendingModeDesti)
With AnimationTemplates(Particle()\AnimationTemplate)
Define frame = ((ElapsedMilliseconds() - \startTime)/\frameDuration)%\frames
ClipSprite(\sprite,Mod(frame,\framesPerRow)*\frameWidth,Int(frame/\framesPerRow)*\frameHeight,\frameWidth,\frameHeight)
GraphicSize(\sprite,\frameWidth,\frameHeight)
;// particle define
ZoomSprite(\sprite,Particle()\fSize,Particle()\fSize)
GraphicColor(\sprite,RGB(Particle()\color[0],Particle()\color[1],Particle()\color[2]))
;// display
DisplaySprite(\sprite,Particle()\Vector3_position[0],Particle()\Vector3_position[1])
EndWith
Sprite3DBlendingMode(#D3DBLEND_SRCALPHA,#D3DBLEND_INVSRCALPHA)
Else
With Particle()
Sprite3DBlendingMode(\BlendingModeSource,\BlendingModeDesti)
ZoomSprite(\Particle,\fSize,\fSize)
GraphicColor(\Particle,RGB(\color[0],\color[1],\color[2]))
DisplaySprite(\Particle,\Vector3_position[0],\Vector3_position[1],\StartTransparenz)
Sprite3DBlendingMode(#D3DBLEND_SRCALPHA,#D3DBLEND_INVSRCALPHA)
EndWith
EndIf
Next
ProcedureReturn #True
EndProcedure
Grüße