Stockelproblem nicht gelöst
Übersicht

![]() |
maboxBetreff: Stockelproblem nicht gelöst |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 ![]() |
||
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() |
RallimenSieger des 30-EUR-Wettbewerbs |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
BladeRunner hat Folgendes geschrieben: Zitat: 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).
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? 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 |
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
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
kann ich eigentlich keine wirklichen Probleme erkennen.
Global graph_x = GraphicsWidth() Global graph_y = GraphicsHeight() timer = CreateTimer(60) 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 THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
PSY |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 ![]() 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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
dann setz doch mal eine höhere taktfrequenz:
Code: [AUSKLAPPEN] timer=CreateTimer(120)
|
||
Frauen und Technik?
Männer und BHs? Beides möglich. |
![]() |
mabox |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das hat Abrexxes auch schon gesagt aber bei meinen Rechnern stockelt es trotzdem immer. ![]() |
||
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group