Seite 1 von 2

Sprite zieht Spur hinter sich...?? wie bekomme ich den weg?

Verfasst: 03.09.2012 09:53
von Skyhawk
Also ich habe in einem Fenster ein Bild und vor dem Bild soll sich ein SPrite bewegen.

Da ich jetzt erstmal nur zum Teste eine Bewegung haben möchte (Links-->Rechts)
ist mir aufegefallen das das Sprite eine "Spur" zieht.

Meine Vermutung, das Sprite wird gezeichnet und wieder gezeichnet...aber wie bekomme ich das weg?

Das Sprite ist in PNG und hat ALPHA, wenn ich es nur anzeigen lasse auf dem Bild ist es auch richtig.
Ist jetzt nur ein Ausszug aus dem Code (logisch).

Code: Alles auswählen

LoadSprite(1, "D:\LenaX2.png", #PB_Sprite_AlphaBlending | #PB_Sprite_Texture)

 x=0     
    
    ClipSprite(1,0,0,282,93)
    
    Repeat
      x=x+1
      DisplayTransparentSprite(1, x, 10)
  
    Until x=268

Re: Sprite zieht Spur hinter sich...?? wie bekomme ich den w

Verfasst: 03.09.2012 10:00
von ts-soft
Skyhawk hat geschrieben:Ist jetzt nur ein Ausszug aus dem Code (logisch).
Nein, ist nicht logisch. Ein auf ein minimum reduzierter, lauffähiger Code darf hier von Dir
erwartet werden.

Bei Deinem Code fehlt zumindest das FlipBuffers()

Re: Sprite zieht Spur hinter sich...?? wie bekomme ich den w

Verfasst: 03.09.2012 10:01
von RSBasic

Code: Alles auswählen

EnableExplicit

InitSprite()
InitKeyboard()

If OpenScreen(1024,768,32,"Screen")
 
  Repeat
    FlipBuffers()
    ClearScreen(RGB(0,0,0))
   
    ;...
   
    ExamineKeyboard()
   
    If KeyboardReleased(#PB_Key_Escape)
      End
    EndIf
   
  ForEver
EndIf

Re: Sprite zieht Spur hinter sich...?? wie bekomme ich den w

Verfasst: 03.09.2012 11:39
von Skyhawk
ts-soft hat geschrieben:
Skyhawk hat geschrieben:Ist jetzt nur ein Ausszug aus dem Code (logisch).
Nein, ist nicht logisch. Ein auf ein minimum reduzierter, lauffähiger Code darf hier von Dir
erwartet werden.

Bei Deinem Code fehlt zumindest das FlipBuffers()

sorry, mit Logisch meinte ich eigentlich da ich Objekte Lade und die ihr ja nicht habt, deswegen nur der auszug...aber gut du hast natürlich recht, zum besseren verständniss
wäre der ganze code besser. Da habe ich nicht drüber nachgedacht. Sorry.

Hier der ganze code:

Code: Alles auswählen

If InitSprite() = 0
    MessageRequester("Error", "Can't open screen & sprite enviroment!", 0)
    End
EndIf
    
  
If OpenWindow(0, 550, 550, 550, 550, "Lena X-perience Patcher", #PB_Window_SystemMenu |#PB_Window_MinimizeGadget| #PB_Window_ScreenCentered)
  
  If OpenWindowedScreen(WindowID(0), 0, 0, 550, 480, 0, 0, 0)
    
    UsePNGImageDecoder()
    
    LoadImage(0, "d:\PB-Test.bmp")
    LoadSprite(1, "D:\LenaX2.png", #PB_Sprite_AlphaBlending | #PB_Sprite_Texture)
    LoadSprite(2, "D:\LenaX2alpha.png", #PB_Sprite_AlphaBlending | #PB_Sprite_Texture)
    
    
    ButtonGadget(0, 460, 500, 80, 40, "EXIT")
    GadgetToolTip(0, "schade das du uns verlassen möchtest")
    
    
    ButtonGadget(1, 10, 500, 80, 40, "PLAY")
    GadgetToolTip(1, "Tauche ein in die Fantastische Welt")
    
    
    FlipBuffers()
    
    If StartDrawing(ScreenOutput())
      
     
      DrawingMode(#PB_2DDrawing_Default)
      DrawImage(ImageID(0), 0, 0, 550, 480)
      
      StopDrawing()
      
    EndIf
    
    Repeat
      Select WaitWindowEvent()
        Case #PB_Event_CloseWindow
          
          End
          
        Case #PB_Event_Gadget
          If EventGadget() = 0
            event = 1
          EndIf
          
          
      EndSelect
          
     
          If EventGadget() = 1
            event = 2
            MessageRequester("ups...Sorry", "i`m so sorry, but this Loader ist still in progress", 0)
          EndIf
          
    x=0     
    
    ClipSprite(1,0,0,282,93)
    
    Repeat
      
      x=x+1
      DisplayTransparentSprite(1, x, 10)
      DisplayAlphaSprite(2, x, 10)
      
      
    Until x=268
     
    Until event = 1
        
  EndIf
EndIf 
End
Wie man sieht habe ich mit "DisplayAlphaSprite" versucht so eine Transparenz bzw. löschung der spur zu versuchen..im nachhinein merke ich selber das der Gedanke total falsch ist. :lol:

Re: Sprite zieht Spur hinter sich...?? wie bekomme ich den w

Verfasst: 03.09.2012 11:48
von ts-soft
Skyhawk hat geschrieben:

Code: Alles auswählen

    FlipBuffers()
    
    If StartDrawing(ScreenOutput())
      
     
      DrawingMode(#PB_2DDrawing_Default)
      DrawImage(ImageID(0), 0, 0, 550, 480)
      
      StopDrawing()
      
    EndIf

Dieser Teil gehört in die Schleife.
Es wird immer alles neugezeichnet! Dann sollte auch Deine Bremsspur weg sein.

Den bereits erwähnten Fehler in Deiner EventAbfrage hast Du auch noch nicht korrigiert.
Außerdem sollte das WaitWindowEvent(20) einen Timeout haben.

Re: Sprite zieht Spur hinter sich...?? wie bekomme ich den w

Verfasst: 03.09.2012 11:56
von Kiffi
<OT>
ts-soft hat geschrieben:Dann sollte auch Deine Bremsspur weg sein.
wenn das jetzt mal keine Steilvorlage für rolaf ist... :lol:

</OT>

Re: Sprite zieht Spur hinter sich...?? wie bekomme ich den w

Verfasst: 03.09.2012 12:09
von ts-soft
PS: In der Signatur von Kiffi findest Du einen Link um Deine Bilder kostenlos hochzuladen:
PureBasic Projekthosting
Ansonsten gibt es noch die Möglichkeit, Bilder aus dem Examples-Ordner von PB zu nutzen.
Bilder als Datazeilen posten (div. Routinen über die Suchfunktion, z.B. Bin2Data von mir)
oder einfach selber malen (gefüllte Rechtecke oder Kreise sollten meist genügen)

Gruß
Thomas

Re: Sprite zieht Spur hinter sich...?? wie bekomme ich den w

Verfasst: 03.09.2012 12:21
von Skyhawk
hmm, ok, also mit deinem Hinweiß das der von dir markierte Bereich auch in die Schleife sollte, klappt es...nur sind jetzt die Buttons weg bis der "until X=268" Fall eingetreten ist...was ja logisch ist...erst dann macht er weiter mit dem Code.

Ich dachte eigentlich das man das Bild lassen kann und NUR das sprite neuzeichnen lässt...oder geht das so nicht?

(komme mir grad total blöde vor mit meinen Fragen) :lamer:

Re: Sprite zieht Spur hinter sich...?? wie bekomme ich den w

Verfasst: 03.09.2012 14:30
von STARGÅTE
Was heißt, "Bild lassen kann".
Das Bild ist "auf dem Bildschirm gezeichnet" und dein Sprite wird auch auf den Bildschirm gezeichnet.
Somit wurde "das Bild" schon verändert, und muss somit auch neu gezeichnet werden.

Re: Sprite zieht Spur hinter sich...?? wie bekomme ich den w

Verfasst: 03.09.2012 16:05
von Skyhawk
ah ok....

hmm, gehe ich dann recht in der annahme das wen ich CREATESPRITE nutzen würde dies als eigene Ebene generiert wird und unabhängig vom Bildscreen ist?