Programm beendet immer sofort
Übersicht

![]() |
KlipBetreff: Programm beendet immer sofort |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo,
um es vorweg zu sagen, ich bin absolut neu hier und dementsprechend unerfahren. Suchen hat mir bisher noch keine Antwort auf meine Frage gebracht, sollte sie auch noch zu doof sein. Code: [AUSKLAPPEN] Graphics bla, bla If KeyDown(lala) lala EndIf ; und so weiter Dies ist allerdings schon mein kompletter Code, natürlich mit weiteren If-Abfragen, die alle Pfeiltasten "kontrollieren". Es geht darum, etwas zu steuern, von mir aus einen Punkt oder eine Linie. Mein Problem liegt darin, dass ich nicht fähig bin, das Programm am Laufen zu erhalten. Natürlich kommt nach der If-Abfrage bei mir nichts mehr, demnach wird das Programm sofort beendet und die Steuerung eines Objekts wird unmöglich. Wie löse ich dieses Problem? |
||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Habe unten nen ganz einfachen beispielcode angefügt.
Im FAQ Bereich hat es ein sehr ausführliches Tutorial, das alles sehr gut erklärt. Code: [AUSKLAPPEN] graphics while not keyhit(1) ; tue was auch immer das programm tun soll wend end |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
wunderkind |
![]() Antworten mit Zitat ![]() |
---|---|---|
Zeig mal den kompletten Code. Vermutlich ist tatsächlich noch eine gedrückte Taste zum Zeitpunkt deiner Abfrage nicht abgefragt worden und meldet sich an der Stelle (s.o.) zu Wort. | ||
![]() |
Klip |
![]() Antworten mit Zitat ![]() |
---|---|---|
Vielen Dank für die Hilfe, Dreamora.
Hab mir gedacht, dass die Lösung nur einem Deppen nicht einfallen kann. EDIT: Neues Problem: Code: [AUSKLAPPEN] ; Test zur Bewegung eines Objektes per Tasten. Graphics 640, 480 While Not KeyHit(1) ; Wenn nichts gedrückt wird........ If KeyHit(200) ; Wenn Cursortaste nach oben gedrückt Cls y=y-1 EndIf If KeyHit(208) ; nach unten Cls y=y+1 EndIf If KeyHit(203) ; nach links Cls x=x-1 EndIf If KeyHit(205) ; nach rechts Cls x=x+1 EndIf Plot x,y ; Punkt an die Koordianten xy zeichen Wend ; .... falls doch: End ; beenden. So funktioniert die Sache wunderbar. Wenn ich dasselbe jedoch mit KeyDown probiere, verschwindet der Punkt bei jedem Versuch sofort oder macht große Sprünge. Es geht mir weniger um eine Lösung als um eine Erklärung, warum dies nicht erkannt wird. |
||
David |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hi!
Weil KeyHit nur einmal "true" zurückliefert, auch wenn die Taste gedrückt bleibt. Im Gegensatz zu KeyDown. grüße |
||
![]() |
Hubsi |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du hast da auch unnötig viele Cls drin. Üblicherweise ist ein Programm so aufgebaut:Code: [AUSKLAPPEN] Graphics breite,höhe,farbtiefe,modus
So gibts kein flimmern und kein fluchen und es klappt auch mit den Nachbarn SetBuffer BackBuffer() ; Den Backbuffer initialisieren, näheres dazu siehe Onlinehilfe ; Grafiken laden While Not KeyHit(1) ; Hauptschleife beginnen Cls ; den Bildschirm bereinigen If KeyDown(bla)... ; Tasten abfragen, Berechnungen ausführen, tralala Plot x,y ; \ DrawImage bild,x,y ; / Grafikausgabe Flip ; Die Buffer tauschen, näheres siehe Onlinehilfe Wend ; Ende Hauptschleife End ; Die häßliche Messagebox unterdrücken :) ![]() |
||
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn... |
![]() |
Klip |
![]() Antworten mit Zitat ![]() |
---|---|---|
Es geht mir erst einmal darum, nur einen Punkt zu bewegen, der Buffer ist also gar nicht notwendig.
Verwende ich das Cls am Anfang der While-Schleife und dafür nicht mehr in den If-Abfragen, blinkt der Punkt, weil er ja andauern gelöscht und wieder neu angezeigt wird. Lasse ich das Cls weg, werden die alten Punkte nicht gelöscht und ich ziehe eine Linie beim bewegen. |
||
Edlothiol |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Benutz Doublebuffering, vielleicht wird sich dein Problem dann auch von selbst lösen, da es die Geschwindigkeit des Programms wahrscheinlich durch VWait auf deine Bildschirmwiederholrate zurückdrehen wird. In der aktuellen Form wird dein Programm vermutlich mit ein paar tausend FPS laufen, auf jeden Fall genug, dass du nichts mehr von dem Punkt siehst, wenn du ihn auch nur kurze Zeit jedes Frame um ein Pixel bewegst.
Und das Blinken wird auch durch das DoubleBuffering verhindert. Also: SetBuffer BackBuffer() nach das Graphics und Flip ans Ende der Schleife, fertig. |
||
![]() |
Klip |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das funktioniert, vielen Dank.
Für andere, die Probleme haben hier der Code: Code: [AUSKLAPPEN] ; Spiel
; Test zur Bewegung eines Objektes per Tasten. x=120 y=120 ; ----------------------------- Grafik-Modus Graphics 640, 480 SetBuffer BackBuffer() Locate 20,40 Print "Mit Pfeiltasten bewegen, mit Esc abbechen." Locate 20,55 Print "Taste drücken zum fortsetzen." WaitKey Cls While Not KeyHit(1) ; Wenn Esc gedrückt wird........ Cls If KeyDown(200) ; Wenn Cursortaste 'nach oben' gedrückt ist y=y-1 EndIf If KeyDown(208) ; nach unten y=y+1 EndIf If KeyDown(203) ; nach links x=x-1 EndIf If KeyDown(205) ; nach rechts x=x+1 EndIf Plot x,y Flip Wend ; ........ dann : End ; beenden. |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group