Stockelproblem nicht gelöst

Übersicht BlitzBasic Beginners-Corner

Gehe zu Seite 1, 2, 3  Weiter

Neue Antwort erstellen

mabox

Betreff: Stockelproblem nicht gelöst

BeitragSa, Okt 27, 2007 12:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi, ich poste hier nochmal einen Code von einem kleinen Programm (Der Code war schonmal hierdrin aber der Fehler wurde nicht gefunden).
Das Programm läuft super, aber ca. jede Sekunde stockelt es kurz, das muss unbedingt gelöst werden!
Man kann das Programm mit Bildern oder Rechtecken ausprobieren (leicht zu ändern im Code). Mit Bildern fällt das Problem stärker auf. Mir wurde schon hier im Forum gesagt, dass der eigentlich richtig ist aber es stockelt trotzdem (Ich habs auf schon auf 6 Rechnern getestet die auf jeden Fall nicht zu schlecht waren, deshalb muss es am Code liegen.)

Code: [AUSKLAPPEN]
timer = CreateTimer (60)
Global graph_x = 1280
Global graph_y = 800

Graphics graph_x, graph_y,32,1
SetBuffer BackBuffer()


;wird später zum rechteck erstellen benötigt (timer)
Global counter
Global ms%=MilliSecs()
Global timescale
Global fallgeschwindigkeit# = 200
Global max_speed# = 5
Global min_speed# = 2
Global Punkte
Global fpsrate,loops, fpstime
;Global bildle = LoadImage ("unbenannt.jpg")
;MaskImage bildle,255,255,255

Global ycor = graph_y-30   ;y Koordinate spieler
Global xcor = graph_x/2-25 ;x koordinate spieler
Color 255,255,255

;das ist der rechteck type mit seinen "feldern"(eigenschaften)
Type rechteck
   Field grosse
   Field speed
   Field rechteck_x
   Field rechteck_y
End Type



;;Hauptschleife -------------------------
Repeat
   
   
   Geschwindigkeitsnormung()
   rechtecke_erstellen()
   rechtecke_machen_lassen()
   
   Rect xcor,ycor,50,2 ;rechteck
   If xcor >= graph_x-55 Then xcor = graph_x-55
   If xcor <= 5 Then xcor = 5
   
   If KeyDown(203) Then xcor = (xcor -5-(.1*timescale));Links
   If KeyDown(205) Then xcor = (xcor +5+(.1*timescale));Rechts
   
   Text 10,10,fallgeschwindigkeit
   Text 10,25,"maximaler speed: " + Floor (max_speed#)
   Text 10,40,"minimaler speed: " + Floor (min_speed#)
   Text 10,55,"Punkte: " + Punkte
   Text 10,70,"Frames: " + fps()
   
   
   
 
   WaitTimer timer
   Flip 0
   Cls
Until KeyHit(1)
;---------------------------------------


;hier werden die rechtecke in zeitichen abständen erstellt
Function rechtecke_erstellen()
   
   counter = (counter +1+(.1*timescale))
   
   If counter >= fallgeschwindigkeit# Then
      counter = 0
      info.rechteck = New rechteck
      info\grosse = 15

      ;info\speed = Rnd(2,5)
      info\speed = Rnd(Floor (min_speed#), Floor (max_speed#))
      
      info\rechteck_x = Rnd(0,graph_x-info\grosse)
      info\rechteck_y = -5
   End If
   
End Function




Function rechtecke_machen_lassen()
   For info.rechteck = Each rechteck                 
      info\rechteck_y = (info\rechteck_y + info\speed+(.1* timescale))
      ;DrawImage bildle,info\rechteck_x ,Floor( info\rechteck_y)
      Rect info\rechteck_x , Ceil( info\rechteck_y) , info\grosse , info\grosse ;Rechteck erstellen
      ;Wenn der rechteck das ander rechteck berührt oder aus dem Bildschirm fährt: löschen
      If RectsOverlap (info\rechteck_x , info\rechteck_y , info\grosse , info\grosse, xcor,ycor,50,2) Then 
         Delete info.rechteck
         fallgeschwindigkeit# = fallgeschwindigkeit# -.8
         max_speed# = max_speed# +.05
         min_speed# = min_speed# +.05
         Punkte = Punkte + 10
      ElseIf info\rechteck_y >graph_y Then
         fallgeschwindigkeit# = fallgeschwindigkeit# -.8
         Delete info.rechteck
         Punkte = Punkte - 5
      EndIf
   Next
End Function


Function Geschwindigkeitsnormung()
   msa=MilliSecs()
   timescale=msa-ms
   ms=msa
End Function


Function fps()
   loops = loops+1
   If MilliSecs() - fpstime > 1000 Then
      fpsrate = loops
      loops = 0
      fpstime = MilliSecs()
   End If
   Return fpsrate
   
End Function


Ich hoffe mir kann einer helfen Wink
Fujitsu-Siemens Laptop, 2Ghz Intel Core2Duo Prozessor, 2GB Ram, 120GB Festplatte, ATI Mobility Radeon X1400, Windows Vista Ultimate
www.mausoft.de.tl
Dönerfresser Homepage
  • Zuletzt bearbeitet von mabox am Sa, Okt 27, 2007 14:06, insgesamt einmal bearbeitet

Shogo

BeitragSa, Okt 27, 2007 13:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Koennte daran liegen das du fuer x und y Kommazahlen nimmst.
Es kann ja kein Bild bei 2.5 Pixeln gezeichnet werden. Und so kanns ein bisschen Flackern.
Ist aber nur ne Vermutung.

mabox

BeitragSa, Okt 27, 2007 13:53
Antworten mit Zitat
Benutzer-Profile anzeigen
hm.......kann kaum sein. Hab grad die Zeile:
Code: [AUSKLAPPEN]
Rect info\rechteck_x , info\rechteck_y , info\grosse , info\grosse ;Rechteck erstellen

in
Code: [AUSKLAPPEN]
Rect info\rechteck_x , Ceil( info\rechteck_y) , info\grosse , info\grosse ;Rechteck erstellen
umgeändert und stockelte immernoch.
Fujitsu-Siemens Laptop, 2Ghz Intel Core2Duo Prozessor, 2GB Ram, 120GB Festplatte, ATI Mobility Radeon X1400, Windows Vista Ultimate
www.mausoft.de.tl
Dönerfresser Homepage

BladeRunner

Moderator

BeitragSa, Okt 27, 2007 13:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
Man kann das Programm mit Bildern oder Rechtecken ausprobieren (leicht zu ändern im Code).

Das hättest Du auch erledigen können. Warum sollte ich mir die Arbeit machen?
Das Ceil wird btw. nichts am Grundproblem ändern, denn das ist genau das was die Zeichenroutine von bb eh macht, da es ja keine halben Pixel gibt.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragSa, Okt 27, 2007 14:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Da du frameunabhängig programmiert hast denke mal das es daran liegt...
Code: [AUSKLAPPEN]
   WaitTimer timer
   Flip  0
   Cls


versuchs mal mit
Code: [AUSKLAPPEN]

;WaitTimer timer
   Flip 
   Cls
[BB2D | BB3D | BB+]

mabox

BeitragSa, Okt 27, 2007 14:12
Antworten mit Zitat
Benutzer-Profile anzeigen
BladeRunner hat Folgendes geschrieben:
Zitat:
Man kann das Programm mit Bildern oder Rechtecken ausprobieren (leicht zu ändern im Code).

Das hättest Du auch erledigen können. Warum sollte ich mir die Arbeit machen?
Ich dachte nur, ich lass die Version mit den Bildern weil man da den Fehler besser sieht (auch wenn man dann eigene Bilder einfügen muss). Hab den Code aber jetzt geändert (mit Rechtecken).

Zitat:
Das Ceil wird btw. nichts am Grundproblem ändern, denn das ist genau das was die Zeichenroutine von bb eh macht, da es ja keine halben Pixel gibt.
Heißt das es liegt nicht an den halben Pixeln? oder heißt das der PC versucht immmernoch halbe Pixel zu zeichnen?
Fujitsu-Siemens Laptop, 2Ghz Intel Core2Duo Prozessor, 2GB Ram, 120GB Festplatte, ATI Mobility Radeon X1400, Windows Vista Ultimate
www.mausoft.de.tl
Dönerfresser Homepage

Xeres

Moderator

BeitragSa, Okt 27, 2007 15:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn ich zum testen eine vernünftige Auflösung eingebe und den Timer auch erstelle den du benutzt
Code: [AUSKLAPPEN]
Graphics 800,600,32,2
Global graph_x = GraphicsWidth()
Global graph_y = GraphicsHeight()
timer = CreateTimer(60)
kann ich eigentlich keine wirklichen Probleme erkennen.
Kommazahlen dabei zu verwenden sollte keine großen Probleme aufwerfen, die werden zwangsläufig automatisch gerundet.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

PSY

BeitragSa, Okt 27, 2007 15:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
Heißt das es liegt nicht an den halben Pixeln? oder heißt das der PC versucht immmernoch halbe Pixel zu zeichnen?

dein pc kann und wird nicht versuchen, halbe pixel zu zeichen Wink
wie rallimen schon sagte, liegts am sync. ersetz einfach mal flip 0 durch flip 1 zwecks demonstration...
mit der auflösung hats auch nix zu tun. wenn der bildschirm später mit grafiken gefüllt ist, wird das ruckeln allerdings weniger auffallen...musst du halt mal testen.

mabox

BeitragSa, Okt 27, 2007 15:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Ok, also Flip habe ich auch schon versucht aber mit flip 0 braucht das Programmm viel weniger CPU Leistung und das ist auch ein Ziel bei dem Programm weil es auch auf sehr alten Rechnern laufen soll.

und Hier: https://www.blitzforum.de/foru...hp?t=25242 habe ich gelesen wie das mit dem Flip 0 und dem Frameunabhängig programmieren geht................das wollte ich eigentlich schon so machen. Soll ich doch Frameabhängig programmieren? Wenn ja wie geht das am besten (mit sowenig CPU Leistung wie möglich)?

Abrexxes hat Folgendes geschrieben:
timer = createtimer (60)
Graphics 640,480,0,2
SetBuffer BackBuffer()

While Not KeyHit (1) ; ESC
;
; Ihrgend was Frame unabhängiges
;
Waittimer timer
Flip 0
Wend
End
Fujitsu-Siemens Laptop, 2Ghz Intel Core2Duo Prozessor, 2GB Ram, 120GB Festplatte, ATI Mobility Radeon X1400, Windows Vista Ultimate
www.mausoft.de.tl
Dönerfresser Homepage

DATIS

BeitragSo, Okt 28, 2007 13:32
Antworten mit Zitat
Benutzer-Profile anzeigen
dann setz doch mal eine höhere taktfrequenz:
Code: [AUSKLAPPEN]
timer=CreateTimer(120)
Frauen und Technik?
Männer und BHs?

Beides möglich.

mabox

BeitragSo, Okt 28, 2007 16:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Das bringt leider auch nichts.

Könnt ihr das Programm bitte bei euch testen??? und mir sagen ob das Problem bei euch auch ist?

wäre echt nett!

mfg
Maurits
Fujitsu-Siemens Laptop, 2Ghz Intel Core2Duo Prozessor, 2GB Ram, 120GB Festplatte, ATI Mobility Radeon X1400, Windows Vista Ultimate
www.mausoft.de.tl
Dönerfresser Homepage
 

Marek

BeitragSo, Okt 28, 2007 16:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Es liegt eindeutig am flip 0! Wenn du das Problem unbedingt verhindern musst, dann musst du zwingenderweise flip 1 verwenden.
MfG Marek
Wer lesen kann ist klar im Vorteil...

mabox

BeitragSo, Okt 28, 2007 16:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Ok, da bleibt mir ja nichts anderes übrig!

vielen Dank!
Fujitsu-Siemens Laptop, 2Ghz Intel Core2Duo Prozessor, 2GB Ram, 120GB Festplatte, ATI Mobility Radeon X1400, Windows Vista Ultimate
www.mausoft.de.tl
Dönerfresser Homepage
 

Mr Hopp

BeitragSo, Okt 28, 2007 23:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Also bei mir läuft das Programm problemlos. Und soweit ich weiß, kann es auch nicht an der Synchronisation liegen, da ja eh nur gezeichnet wird, wenn der Bildschirm so weit ist...
Zitat:
Wie poste ich falsch?

Nachdem ich Google, die FAQ's und die Boardsuche erfolgreich ignoriert habe, erstelle ich zwei bis fünf neue Themen, in den falschen Unterforen, mit kreativen Titeln und undeutlichem Text, unter dem sich jeder etwas anderes vorstellen kann.

mabox

BeitragMo, Okt 29, 2007 1:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Das hat Abrexxes auch schon gesagt aber bei meinen Rechnern stockelt es trotzdem immer. Crying or Very sad
Fujitsu-Siemens Laptop, 2Ghz Intel Core2Duo Prozessor, 2GB Ram, 120GB Festplatte, ATI Mobility Radeon X1400, Windows Vista Ultimate
www.mausoft.de.tl
Dönerfresser Homepage

Markus2

BeitragMo, Okt 29, 2007 13:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Bei Global timescale noch nen # hinter machen .
Auch mal versuchen es fest einzustellen wenn du den Wert auf deinem PC weist .

Ansich ist diese Technik ok aber denke daran das eine Zeitschwankung
alles zum ruckeln bringt .

Function Geschwindigkeitsnormung()
msa=MilliSecs()
timescale=msa-ms
ms=msa
End Function

mabox

BeitragMo, Okt 29, 2007 16:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Markus2 hat Folgendes geschrieben:
Bei Global timescale noch nen # hinter machen .
Auch mal versuchen es fest einzustellen wenn du den Wert auf deinem PC weist .

Ansich ist diese Technik ok aber denke daran das eine Zeitschwankung
alles zum ruckeln bringt .

Das versteh ich nicht ganz. timescale ist doch immer 0 oder? Kannst du das nochmal etwas genauer erläutern bitte?

vielen Dank!
Maurits

~EDIT: Ok die timescale ist dochnicht 0 (ich habs jetzt getestet) sondern konstante 16 aber ist das nicht auf jedem Rechner anders???
Fujitsu-Siemens Laptop, 2Ghz Intel Core2Duo Prozessor, 2GB Ram, 120GB Festplatte, ATI Mobility Radeon X1400, Windows Vista Ultimate
www.mausoft.de.tl
Dönerfresser Homepage

Markus2

BeitragMo, Okt 29, 2007 19:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja ist auf jedem Rechner anders .
Die Zeit die du da mist ist aber die der letzten Schleife und nicht
der aktuellen .
In der aktuellen Schleife könnte z.B. ein Dienst das System bremsen .

Bist du sicher das es konstant 16 ms sind ???
Woran siehst du das denn ?
 

Dreamora

BeitragMo, Okt 29, 2007 20:08
Antworten mit Zitat
Benutzer-Profile anzeigen
16ms klingt nach einem notebook wo die schirme mit 60hz laufen. Auf einem Desktop führt das zu ganz schön hässlichem gestockel weil die schirme meist 72hz oder höher sind.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

mabox

BeitragMo, Okt 29, 2007 23:25
Antworten mit Zitat
Benutzer-Profile anzeigen
und was kann ich dagegen tun?
Fujitsu-Siemens Laptop, 2Ghz Intel Core2Duo Prozessor, 2GB Ram, 120GB Festplatte, ATI Mobility Radeon X1400, Windows Vista Ultimate
www.mausoft.de.tl
Dönerfresser Homepage

Gehe zu Seite 1, 2, 3  Weiter

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group