Verwendung von FlushKeys
Übersicht

![]() |
SereyanneBetreff: Verwendung von FlushKeys |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo,
könnte mir denn mal jemand die genaue Verwendung von FlushKeys erklären? Wo schreibe ich das wann hin? Ich wollte ein Pausenmenü erstellen, und es ist ja doof wenn ich ein Item auswähle und den Knopf fürs Menü drücke, passiert erst mal nix, aber wenn ich aus den Items wieder raus bin ist das ganze Menü weg. Code: [AUSKLAPPEN] If KeyHit(OK) ; ist global deklariert
If ay=11 Then ; Position des Auswahlpfeiles ;FlushKeys??? Repeat Cls Text 170,170, "Gesammelte Items" ; es sollen die items angezeigt werden ;Items ;FlushKeys??? Flip 0 Until KeyHit(OK) ; damit man aus den Items wieder raus kommt EndIf Noch schlimmer isses beim Speichern, wenn ich den falschen Knopf drücke komm ich aus dem Pausenmenü überhaupt nicht mehr raus! Habt ihr ein paar grundlegende Tipps für mich? Danke im Voraus! |
||
![]() |
The_Nici |
![]() Antworten mit Zitat ![]() |
---|---|---|
FlushKeys nach
Code: [AUSKLAPPEN] If ay=11 Then ... EndIf ;Hier |
||
![]() |
RallimenSieger des 30-EUR-Wettbewerbs |
![]() Antworten mit Zitat ![]() |
---|---|---|
Flushkeys löscht den Tastaturpuffer und zwar so als wenn du keine gedrückt hätteset
In deinem Beispiel wartest du auf eine spezielle Taste und solange die nichtgedrückt wird kommst du aus der Schleife nicht raus. Aber alle Tasten die zwischenzeitlich gedrückt worden können immer noch abgerufen werden, was dann dazu führt das beim abfragen der Keys in der nächsten Schleife zu Problemen führt. Flushkeys benutzt man immer bevor man ein neues Menue aufruft um Falscheingaben zu verhindern. Also in deinem Fall nach der Schleife (Until KeyHit(OK)) |
||
[BB2D | BB3D | BB+]
|
![]() |
Sereyanne |
![]() Antworten mit Zitat ![]() |
---|---|---|
Herzlichen Dank. Das wäre geklärt. Ich glaube mein Problem liegt gar nicht in dem Flushkeys. Ich komme nur aus dem Menü nicht mehr raus. Kann ich von der Hauptschleife zur Funktion springen und innerhalb der Funktion zu einer anderen Funktion? Wenn die zweite Funktion dann beendet ist, wohin springt der Compiler dann? | ||
![]() |
The_Nici |
![]() Antworten mit Zitat ![]() |
---|---|---|
Dort wo du die 1. Funktion ausgeführt hast. | ||
![]() |
Sereyanne |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ok ich hab blöd gefragt. Zur Veranschaulichung:
Code: [AUSKLAPPEN] Repeat
;Hauptschleife (...) If KeyHit(menu) Then Menu() (...) Flip Forever End Function Menu() (...) ; Abfrage der Möglichkeiten If pos_y=17 Then beenden() ClsColor 29,88,15 FlushKeys End Function Function beenden() If pos_y=15 Then menu() End Function Wenn ich nun von der Function Menu() in Function beenden() wechsle und dann die If Bedingung erfülle, wohin springt das Prog dann? An den Anfang der Function Menu() oder dorthin in die Function von wo aus die andere gestartet wurde? |
||
![]() |
RallimenSieger des 30-EUR-Wettbewerbs |
![]() Antworten mit Zitat ![]() |
---|---|---|
das Programm macht genau nach der aufgerufenen Function weiter.
Also egal ob die If in der Funktion beenden erfüllt ist oder nicht , kommst du automatisch wieder ins Menue, nur das bei erfüffung der If mehere functionen noch aktiv |
||
[BB2D | BB3D | BB+]
|
![]() |
Sereyanne |
![]() Antworten mit Zitat ![]() |
---|---|---|
![]() ![]() ![]() ![]() ![]() ![]() ![]() kannst du mir das bitte nochmal genauer erklären^^ |
||
![]() |
RallimenSieger des 30-EUR-Wettbewerbs |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das ist nicht der ideale Weg für für ein Menue da es zu sogenannten Spagetticode führt
damit meine ich eine Function die die gleiche Function startet aus der sie aufgerufen wurde Code: [AUSKLAPPEN] Repeat
;Hauptschleife (...) ;verwende bitte nicht gleiche Namen "menu!" für Functionen und Variablen ;da sind Probleme vorprogrammiert If KeyHit(menu) Then Menu() ; hier ist klar Menue wird aufgerufen ;ist die Function menue beendent dann geht es direkt hier weiter (...) Flip Forever End Function Menu() (...); ; Abfrage der Möglichkeiten If pos_y=17 Then beenden() ;Beenden wird aufgerufen ClsColor 29,88,15 FlushKeys ; wenn hier angekommen gehts endweder in ; die Hauptschleife wenn Menu dort aufgerufen wurde ; oder nach beenden wenn es durch die if da aufgerufen worden ist End Function Function beenden() If pos_y=15 Then menu() ;wenn die pos_y=15 nicht das menu aufgeruft beendet die Funktion und geht trotzdem ins menue direkt nach dem Aufruf ;also beendet das Spiel nicht End Function Besser ist es das zentral aus der Hauptschleife zu steuern. |
||
[BB2D | BB3D | BB+]
|
![]() |
Sereyanne |
![]() Antworten mit Zitat ![]() |
---|---|---|
Zitat: Besser ist es das zentral aus der Hauptschleife zu steuern.
aus der hauptschleife??? was soll ich denn da noch alles reinpacken???? *umfall* Herzlichen Dank für deine ausführliche Erklärung. Jetzt kann ich wenigstens nachvollziehen wo das Prog hinhüpft und warum ich nicht mehr aus dem Menü rauskomme. Stell dir das mal vor: du gehst ins menü, sagst beenden, sagst nein lieber doch nicht beenden. jetzt bist du wieder im menü. du willst aus dem menü raus, drückst die taste, und kriegst wieder vorgesetzt: willst du wirklich beenden? toller bug. der jetzt behoben ist denn dank deiner erklärung habe ich eine sprungmarke eingebaut. Danke!!! ![]() |
||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Alles
Sagt ja niemand das es auch effektiv da stehen muss, dafür gibts ja funktionen die man aufrufen kann. |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
Sereyanne |
![]() Antworten mit Zitat ![]() |
---|---|---|
Dreamora hat Folgendes geschrieben: Alles
Sagt ja niemand das es auch effektiv da stehen muss, dafür gibts ja funktionen die man aufrufen kann. jaja ich hatte ja auch z.B. meinen bewegungscode inner funktion ausgelagert. weiß auch nich warum das nich mehr ging, jedenfalls hab ich solange gebastelt bis ich die figur wieder steuern konnte und siehe da, auf einmal war der bewegungscode in der hauptschleife statt in der funktion.... |
||
![]() |
Artemis |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das liegt dann wahrscheinlich daran, dass du Variablen in der Funktion veränderst, die nur lokal in der Funktion existieren bzw. nicht global sind.
Beispiel bei dem die variablen x und y immer 100 bleiben. Code: [AUSKLAPPEN] x = 100 y = 100 repeat bewegen() until keyhit(1) function bewegen() if (keydown(12)) then x = x + 10 if (keydown(13)) then x = x - 10 if (keydown(14)) then y = y + 10 if (keydown(15)) then y = y - 10 end function Du musst dann entweder mit Globalen arbeiten oder das ganze mit types lösen. |
||
![]() |
Sereyanne |
![]() Antworten mit Zitat ![]() |
---|---|---|
Zitat: Das liegt dann wahrscheinlich daran, dass du Variablen in der Funktion veränderst, die nur lokal in der Funktion existieren bzw. nicht global sind.
hmmm das könnte allerdings sein dass ich das übersehen hab ![]() jaja ich verlier so langsam den überblick bei so langen codes ^^^ danke dass du mich darauf aufmerksam gemacht hast! |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group