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