ParticleSystem , Start - Endsprite loop möglich?

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
True29
Beiträge: 283
Registriert: 18.08.2012 19:18
Computerausstattung: Windows 8 64bit .Profan x2,Purebasic 5.5
Wohnort: Worms
Kontaktdaten:

ParticleSystem , Start - Endsprite loop möglich?

Beitrag 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

i7,12gb ram , Windows 10 ,Purebasic 5.50
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3857
Registriert: 13.09.2004 17:48
Kontaktdaten:

Re: ParticleSystem , Start - Endsprite loop möglich?

Beitrag 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

‮pb aktuell5.7 - windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
True29
Beiträge: 283
Registriert: 18.08.2012 19:18
Computerausstattung: Windows 8 64bit .Profan x2,Purebasic 5.5
Wohnort: Worms
Kontaktdaten:

Re: ParticleSystem , Start - Endsprite loop möglich?

Beitrag von True29 »

ok danke ;) ich schaus mir an.
i7,12gb ram , Windows 10 ,Purebasic 5.50
True29
Beiträge: 283
Registriert: 18.08.2012 19:18
Computerausstattung: Windows 8 64bit .Profan x2,Purebasic 5.5
Wohnort: Worms
Kontaktdaten:

Re: ParticleSystem , Start - Endsprite loop möglich?

Beitrag 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
i7,12gb ram , Windows 10 ,Purebasic 5.50
Antworten