spriteausgabe ruckelt, wie abschalten ???

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
xverbatimpurebasic
Beiträge: 5
Registriert: 20.02.2005 11:44

spriteausgabe ruckelt, wie abschalten ???

Beitrag 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
     

Benutzeravatar
bluejoke
Beiträge: 1244
Registriert: 08.09.2004 16:33
Kontaktdaten:

Beitrag 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.
Ich bin Ausländer - fast überall
Windows XP Pro SP2 - PB 4.00
xverbatimpurebasic
Beiträge: 5
Registriert: 20.02.2005 11:44

immernoch ruckel problem

Beitrag 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..
Benutzeravatar
bluejoke
Beiträge: 1244
Registriert: 08.09.2004 16:33
Kontaktdaten:

Beitrag 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
Ich bin Ausländer - fast überall
Windows XP Pro SP2 - PB 4.00
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
xverbatimpurebasic
Beiträge: 5
Registriert: 20.02.2005 11:44

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

Beitrag von xverbatimpurebasic »

ok, danke für die Antworten-ist wohl normal gruß XVPB (eom)
Benutzeravatar
Hroudtwolf
Beiträge: 1416
Registriert: 30.10.2004 23:33
Kontaktdaten:

Beitrag 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.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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:
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
bEEtzY
Beiträge: 27
Registriert: 03.02.2005 23:46

Beitrag 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)!?
solong IRL
bEEtzY

Bild
Antworten