Dank Timer bewegt sich RetroSnake nicht sauber
Übersicht

![]() |
FunctionBauerBetreff: Dank Timer bewegt sich RetroSnake nicht sauber |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich arbeite an einem kleinen Retro-Snake Projekt und will dementsprechend auch den Timer zur Simulation niedriger Frameraten nutzen. Da mein Spielfeld auf 32 mal so grosse einzelfelder aufgeteilt ist, passiert es manchmal, dass die (noch sehr kleine) Snake sich nicht sauber auf die Y-Achse bewegt sondern noch ein "Tile" auf der X-Achse weiterfaehrt. Ich hoffe ihr versteht was ich meine. hier der Code: Code: [AUSKLAPPEN] ;Variablen
Const gwidth = 1024 Const gheight = 768 Const tile=32 x=1 : y=1 : length=1 ;Voreinstellungen Graphics gwidth, gheight, 32, 1 SetBuffer BackBuffer() timer=CreateTimer (5) ;Hauptschleife Repeat WaitTimer(timer) Cls ;kasten Rect 0,0, 1024, 30 Rect 0,0, 30, 768 Rect 994,0, 30, 768 Rect 0,738, 1024, 30 ;keyabfragen If KeyHit(205) Or dire=1 Then x = x + 1 : dire = 1 If KeyHit(203) Or dire=2 Then x = x - 1 : dire = 2 If KeyHit(208) Or dire=3 Then y = y + 1 : dire = 3 If KeyHit(200) Or dire=4 Then y = y - 1 : dire = 4 ;kollision If x <= 1 Then x = 1 If x => 30 Then x = 30 If y <= 1 Then y = 1 If y => 22 Then y = 22 ;aufmalen Rect x*tile, y*tile, tile*length, tile Flip Until KeyHit(1) |
||
Intel Quad Core 6600 Geforce 9500 GT
4 GB DDR-2 RAM 500 GB-Samsung |
![]() |
Pummelie |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ein Timer von 5 ist einfach zu wenig, um ein Spiel gute Eingabe zu gewähren...
Versuch es mal ohne Timer, und mit Millisecs ![]() Da kannst du zb. festlegen das das Bild nur 5 mal die Sekunde gemalt wird, wenn du folgenden Pseudocode verwendest: BlitzBasic: [AUSKLAPPEN] ;grafik zeug |
||
It's done when it's done. |
![]() |
Megamag |
![]() Antworten mit Zitat ![]() |
---|---|---|
Mit Timer benutzt man eigentlich Flip 0. | ||
Mein DeviantArt Profil
Gewinner des BAC #136 |
Blitzjockey |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Oder, um den Belastung der Processor zu minimieren, eine Kombination.
Pummelie hat recht, ein Timer von (5) bedeutet das dass ganze Programm nur 5 mal pro Sekunde Sachen wie Tastatur abfragen erledigt. Das ist, wie Du gesehen hast, zu wenig. Allerdings läuft Pummelies Version mit maximale Geschwindigkeit. Das heisst, er kontrolliert 100.000 mal pro Sekunde ob er schon wieder ein Bild malen darf. Dass ist übertrieben, das würde bedeuten das er nur alle 20.000 durchläufen 1 mal malen muss. Stattdessen kann man Timer (60) benutzen. Dann wird der Hauptschleife 60 mal pro Sekunde durchlaufen, dass ist schon mal eine gute Richtwert was Tasten eingabe auslesen angeht. Daneben kann man dann, für das Auffrischen der Monitor-inhalt, der von Pummelie verwendete MacGyver-Timer benutzen. Der sorgt dafür das Dein Programm dann innerhalb den Schleife der 60 mal pro Sekunde läuft, nur 5 mal pro Sekunde das Bild auffrischt. Damit hast Du den ersparnissen von eine reduzierte Leistung regelmäßige abfrage der Tastatur, und zusätzlich eine sehr ruhige Update vom angezeigtem Bild. |
||
- Zuletzt bearbeitet von Blitzjockey am Fr, Jul 23, 2010 23:41, insgesamt einmal bearbeitet
![]() |
FunctionBauer |
![]() Antworten mit Zitat ![]() |
---|---|---|
@pummelchen
Sieht nach einer guten Loesung aus.. ![]() Hab es bei mir nur noch nicht verwendbar einsetzen koennen. es flackert nur alles und laeuft nicht mehr stabil. irgendeine idee? |
||
Intel Quad Core 6600 Geforce 9500 GT
4 GB DDR-2 RAM 500 GB-Samsung |
Blitzjockey |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hast Du "Flip" jetzt innerhalb Pummelchens If-abfrage gestellt, oder steht der auch noch mal in der Hauptschleife? | ||
![]() |
FunctionBauer |
![]() Antworten mit Zitat ![]() |
---|---|---|
noch innerhalb der normalschleife
Code: [AUSKLAPPEN] ;Variablen
Const gwidth = 1024 Const gheight = 768 Const tile=32 x=1 : y=1 : length=1 ;Voreinstellungen Graphics gwidth, gheight, 32, 1 SetBuffer BackBuffer() millisekunden=MilliSecs() + 200 ;Hauptschleife Repeat WaitTimer(timer) Cls ;keyabfragen If KeyHit(205) Or dire=1 Then x = x + 1 : dire = 1 If KeyHit(203) Or dire=2 Then x = x - 1 : dire = 2 If KeyHit(208) Or dire=3 Then y = y + 1 : dire = 3 If KeyHit(200) Or dire=4 Then y = y - 1 : dire = 4 ;kollision If x <= 1 Then x = 1 If x => 30 Then x = 30 If y <= 1 Then y = 1 If y => 22 Then y = 22 If MilliSecs()>millisekunden Then ;kasten Rect 0,0, 1024, 30 Rect 0,0, 30, 768 Rect 994,0, 30, 768 Rect 0,738, 1024, 30 ;aufmalen Rect x*tile, y*tile, tile*length, tile millisekunden=MilliSecs() + 200 End If |
||
Intel Quad Core 6600 Geforce 9500 GT
4 GB DDR-2 RAM 500 GB-Samsung |
![]() |
FunctionBauer |
![]() Antworten mit Zitat ![]() |
---|---|---|
ach geil jetzt kommt auch noch "memory access violation" hinzu ![]() |
||
Intel Quad Core 6600 Geforce 9500 GT
4 GB DDR-2 RAM 500 GB-Samsung |
![]() |
Pummelie |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du must cls![]() ![]() ![]() Du kannst dir das ganze so vorstellen, das die Grafik erstmal zu Nebenache gemaht wird, und der Rest die CPU-Leistung bekommt. PS: Doppelpost sind böse, nutze den Edit Buton ![]() |
||
It's done when it's done. |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du tust ja förmlich so, als ob BlitzBasic nur scheiße wäre und keine Fehler von dir aus gingen...
Hier mal ein Beispiel einer möglichen Steuerung: Code: [AUSKLAPPEN] Graphics 1024,768,0,2
SetBuffer BackBuffer() Const TILE=32 Const KEINE=0 ;Keine Const NACHL=1 ;Links Const NACHR=2 ;Rechts Const NACHO=3 ;Oben Const NACHU=4 ;Unten Local Timer=CreateTimer(6) Local Richtung Local Letzte Local KCode Local X=10 Local Y=10 While Not KeyHit(1) KCode=GetKey() Letzte=Richtung ; Richtung=KEINE If KCode>0 Then Select KCode Case 28 Richtung=NACHO Case 29 Richtung=NACHU Case 30 Richtung=NACHR Case 31 Richtung=NACHL End Select Else If Letzte=NACHL Or Letzte=NACHR Then If KeyDown(205) Then Richtung=NACHR If KeyDown(203) Then Richtung=NACHL If KeyDown(200) Then Richtung=NACHO If KeyDown(208) Then Richtung=NACHU Else If KeyDown(200) Then Richtung=NACHO If KeyDown(208) Then Richtung=NACHU If KeyDown(205) Then Richtung=NACHR If KeyDown(203) Then Richtung=NACHL End If End If If Richtung=NACHL Then X=X-1: If X<01 Then X=01 If Richtung=NACHR Then X=X+1: If X>30 Then X=30 If Richtung=NACHO Then Y=Y-1: If Y<01 Then Y=01 If Richtung=NACHU Then Y=Y+1: If Y>22 Then Y=22 Rect 0,0,1024,30 Rect 0,0,30,768 Rect 994,0,30,768 Rect 0,738,1024,30 Rect X*TILE,Y*TILE,TILE,TILE,1 WaitTimer Timer Flip 0 Cls Wend End |
||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
Blitzjockey |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Und der MAV kommt vielleicht wegen der Timer den Du benutzt in der Schleife, den ich aber in Deine gepostete Code nicht initiert sehe? Aber ich glaube Du hast ohnehin nur eine Abschnitt gezeigt? | ||
![]() |
Pummelie |
![]() Antworten mit Zitat ![]() |
---|---|---|
Leute, wir stehen doch gerade wieder mal an so einer Situation (oder kanpp davor):
![]() SO jetzt mal an FunctionBauer: Du solltest dich wirklich noch ein bisschen mehr mit BB auseinadersetzen (damit mein ich die Tuts). |
||
It's done when it's done. |
![]() |
rambo256 |
![]() Antworten mit Zitat ![]() |
---|---|---|
OT:Klasse Pic, kannte ich ja noch gar nicht. Es spiegelt aber genau meine Erfahrungen mit ihm wieder *G*
@Topic: Normalerweise zeigt dir der Compiler auch an, wo genau der MAV auftritt, dann sucht man im Regelfall in dieser Zeile nach Objekten btw eher Referenzen und überprüft, ob man diese im vorherigen Ablauf entweder nicht initialisiert oder sogar gelöscht hat. |
||
Asus F53z
Das Leben ist eine reine Konkatenation... |
![]() |
FunctionBauer |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also jetzt regt euch mal ab Leute . ![]() Ich mein klar hat mich das aufgeregt mit der MAV, aber dennoch muss (!) dieses Problem ja wohl vom Benutzer ausgehen, da eine Maschine keine Fehler macht. Es war wohl einfach nur ein bisschen zu spaet gestern. Und zu der (witzigen) Illustration: Ich weiss gar nicht warum das ploetzlich auf alle so gewirkt hat, als habe ich einen wutausbruch. Ich danke Hectic fuer seinen Loeungsvorschlag, funktioniert sehr gut. ![]() Und Pummelie ist ja schoen, dass du dieses tolle Bild den anderen Mitgliedern zeigen musstest, nur denke ich war das hier in diesem Moment wohl nicht zwingend angebracht. Und klar bin ich noch ein Lernender aber es lag gestern echt an der Uhrzeit, zumal wir in Indien noch 3 einhalb Stunden + haben. Okay trotzdem Danke an alle. |
||
Intel Quad Core 6600 Geforce 9500 GT
4 GB DDR-2 RAM 500 GB-Samsung |
Blitzjockey |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
FunctionBauer hat Folgendes geschrieben: Und Pummelie ist ja schoen, dass du dieses tolle Bild den anderen Mitgliedern zeigen musstest, nur denke ich war das hier in diesem Moment wohl nicht zwingend angebracht. Stimmt, aber es war richtig witzig! (Ausser für Dich vielleicht, aber nimm's bitte nicht al zu persönlich..) |
||
![]() |
Hubsi |
![]() Antworten mit Zitat ![]() |
---|---|---|
FunctionBauer hat Folgendes geschrieben: ...das ploetzlich auf alle so gewirkt hat, als habe ich einen wutausbruch... Nein, nein. Du bist dieser niedliche Noob links vorne ![]() |
||
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn... |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group