Seite 1 von 1

spriteausgabe ruckelt, wie abschalten ???

Verfasst: 20.02.2005 11:49
von xverbatimpurebasic
Hallo,

kann mir bitte jemand sagen, warum folgender Code immer noch bei
der Ausgabe ruckelt, wenn ich die Maus schnell hoch und runter bewege,

ruckeln die Sprites, bzw. stocken....

kann mir bitte jemand einen tip geben, wie ich das Abschalten kann und alles flüssig läuft ?

oder geht das nicht ???


Gruß+Danke

Code: Alles auswählen

If InitSprite() = 0 Or InitKeyboard() = 0
  MessageRequester("Error", "Can't open DirectX 7 or later", 0)
  End
EndIf

;
; Now, open a 640*480 - 16 bits (65000 colours) screen
;

If OpenScreen(800, 600, 32, "Sprite")

  ; Load our 16 bit sprite (which is a 24 bit picture in fact, as BMP doesn't support 16 bit format)
  ; 
  LoadSprite(0, "c:\rot.bmp", 0)
   LoadSprite(1, "c:\gelb.bmp", 0)

 ; CopySprite(0,1,0)
   
       
   TransparentSpriteColor(0,0,0,0)
       
         TransparentSpriteColor(1,0,0,0)
   InitMouse()
    
    
   a=0
   s1=0
   g=5
   
   SetFrameRate(60 )
   
     Repeat
   
    ; Inverse the buffers (the back become the front (visible)... And we can do the rendering on the back)
  
    FlipBuffers()
    ClearScreen(0,0,0)
   
    ; Draw our sprite

 ExamineMouse()                      
          
  x2 = MouseX()                         ; Returns actual x pos of our mouse
  y2 = MouseY()                         

If a=0 
x=x+g
EndIf

If x=600 
 a=1
EndIf

If a=1  
x=x-g
EndIf
 
 If x=0 
 a=0
 EndIf
 

   ; ClipSprite(0, 0, 0, x, x/8)


    DisplayTransparentSprite(s1, x , 300)
    
     DisplayTransparentSprite(1, x2, y2) 


 Ergebnis =  SpritePixelCollision(0, x, 300, 1, x2, y2) 
   
     If Ergebnis=1 
 If s1=0 
 s1=1
 Else 
 s1=0
 EndIf
   
      EndIf
     


Verfasst: 20.02.2005 13:09
von bluejoke
Wenn du mit jaPBe arbeitest, benutze doch mal "Einrücken durchführen", da sieht dein Code auch viel ordentlicher aus, danach.
Hier fehlt ja das Ende, das passiert dann nicht so leicht.

Einmal fehlt Until, dann noch ein Endif

EDIT: das ist natürlich ein Copy&Paste-Fehler, denk ich, aber so kann ich nicht mal kurz kucken, obs bei mir auch ruckelt.
Davon abgesehen, dass ich die übrigen Ressourcen nicht hab.

immernoch ruckel problem

Verfasst: 20.02.2005 14:47
von xverbatimpurebasic

Code: Alles auswählen

If InitSprite() = 0 Or InitKeyboard() = 0
  MessageRequester("Error", "Can't open DirectX 7 or later", 0)
  End
EndIf

If OpenScreen(800, 600, 32, "Sprite") 
  ; 32*32 Bitmap Sprite 
  LoadSprite(0, "c:\rot.bmp", 0)
   LoadSprite(1, "c:\gelb.bmp", 0)
       
   TransparentSpriteColor(0,0,0,0)
       
         TransparentSpriteColor(1,0,0,0)
   InitMouse()
        
   a=0
   s1=0
   g=5
   
   SetFrameRate(60 )
        Repeat
       ; Inverse the buffers (the back become the front (visible)... And we can do the rendering on the back)
      FlipBuffers()
    ClearScreen(0,0,0)
       ; Draw our sprite
 ExamineMouse()                      
x2 = MouseX()                         ; Returns actual x pos of our mouse
y2 = MouseY()                         

  If a=0 
x=x+g
  EndIf

  If x=600 
a=1
  EndIf

  If a=1  
x=x-g
  EndIf
 
  If x=0 
a=0
  EndIf
     DisplayTransparentSprite(s1, x , 300)
     DisplayTransparentSprite(1, x2, y2) 
 Ergebnis =  SpritePixelCollision(0, x, 300, 1, x2, y2) 
   
 If Ergebnis=1 
  If s1=0 
 s1=1
 Else 
 s1=0
  EndIf
 EndIf
     
 If x=600 
  t=1:x=0
 EndIf
 
    ExamineKeyboard()
Until KeyboardPushed(#PB_Key_Escape) 
 
Else
  MessageRequester("Error", "Can't open a 640*480 - 16 bit screen !", 0)
EndIf

End    
SORRY, arbeite mit dem normale PureEditor; ja code ist sehr unübersichtlich, will auch nur sehen, ob ich überhaupt sprite in bewegung flüssig darstellen kann...

jedenfalls die Sprite sind 32*32 Bitmaps und ich verstehe einfach nicht, warum das ganze ruckelt....

SetframeRate falsch gesetzt oder flipbuffer ?

hoffentlich kann mir jemand helfen..

Verfasst: 20.02.2005 15:31
von bluejoke
bei mir sieht das gut aus, ruckelt nicht, sondern wird einwandfrei dargestellt.
gelb bleibt oben links stehen und rot fährt in der Mitte hübsch hin und her

Verfasst: 20.02.2005 17:58
von Kaeru Gaman
hmmm....

bei mir ruckelt auch nix, egal wie schnell ich die maus bewege...

wenn ich sehr schnell bewege, dann wird das gelbe sprite natürlich in abständen dargestellt,
weil die maus z.b. 50 pixel weiter ist bis zum nächsten frame,
aber das ist ein normaler effekt, das würde ich nicht ruckeln nennen.

ein tip zum edi:
ich weiss nicht, ob du's wusstest...
wenn du einen absatz (mehr als eine zeile) markierst, und dann TAB drückst,
rückst du alle markierten zeilen einen TAB weiter ein.
das funktioniert auch mit SHIFT-TAB...

ok, danke für die Antworten-ist wohl normal gruß XVPB (eom)

Verfasst: 20.02.2005 22:14
von xverbatimpurebasic
ok, danke für die Antworten-ist wohl normal gruß XVPB (eom)

Verfasst: 21.02.2005 00:02
von Hroudtwolf
>>>FALLS<<< du ein älteres System hast z.B. P1 133 oder ähnlich könnte es schon zum ruckeln kommen. Als ich vor mal auf meinem alten Computer PB installierte weil mein neuer futsch war hatte ich auch solche Ruckelefekte mit Sprites. Teilweise hat mein Systemlautsprecher geschrien wenn ich ein Sprite per Tastatur bewegen wollte und das Sprite nicht mitkam.

Verfasst: 21.02.2005 01:03
von Kaeru Gaman
stimmt...

irgentwo in meinem hinterkopf sagte eine stimme: "frag ihn nach seinem system",
aber die war leider zu schnell wieder still :wink:

Verfasst: 22.02.2005 14:47
von bEEtzY
Hallo Leute,

ich hatte auch das Ruckelproblem, allerdings habe ich einen Athlon XP 3200+ und eine ATI Radeon 9800 Pro!
Als ich einen FPS Zaehler eingebaut hatte ist mir aufgefallen, dass die Eingestellte Hertzzahl mit SetFrameRate (oder weg lassen, dann wird V-Sync vom Monitor benutzt bei FlipBuffer(1)) nicht ueberein stimmt (erwartet 85, erreicht ca. 60)!
Ein anderes mal wird die erwartete Herzzahl angezeigt und es tritt kein Ruckel auf, hat jemand gleiches Festgestellt?
Es sieht aus als koennte sich FlipBuffer nicht mit der Monitorfrequenz synchronisieren, es kann doch wohl nicht sein, dass das bewegen eines Sprites die Programmloop so stark bremst, sodass die Loop nicht mehr in 12ms durchlafen werden koennte (bei 85Hz)!?