:xSorry für den Namen aber mir ist nichts besseres eingefallen. Sorry!
Ich hoffe bin ihr richtig für Fragen zu GLbasic.
Ich frag mal so,
If Key (30) // Zahl dient nur als Beispiel.
Beispielaktion .... Endbeispielaktion
Beim probieren hab ich gemerkt das wenn ich die Taste drücke wird die Aktion ausgeführt aber wen ich gedrückt halte wird die Aktion wieder und wieder ausgeführt. Ich möchte aber das wenn die Aktion ausgeführt wurde muss man zum wiederholten die Taste neu drücken.
Was jemand was ich meine?
Danke im voraus!
Sorry für die Uhrzeit!
You can use a toggle/flag to say that the key is being pressed. eg
GLOBAL pressed%
WHILE TRUE
// Press SPACE
IF KEY(57) and pressed=0
PRINT "HELLO",10,10
pressed=1
ENDIF
IF NOT KEY(57) THEN pressed=0
SHOWSCREEN
WEND
The variable "pressed" is acting like a switch - it is TRUE when SPACE is pressed, but FALSE when it is not. The "HELLO" message only appears when the switch is false.
Thx. Gibt es noch andere Möglichkeiten?
Du kannst dir eine Funktion dazu schreiben oder das ganze in Types packen.
Allerdings gabs glaub in den Samples von GLBasic ein KeyHit im Common-Ordner.
Könnte mir jemand zeigen.wie ich es in eine function umwandele?
Bitte ;)
So?:
FUNCTION Pressjump:
GLOBAL pressed%
WHILE TRUE
pressed=0
Else
pressed=1
....
Das gibt nur fehler egal kann mir jemand helfen einen KeyHit Ordner oder datei gibt es nicht?
dont use GLOBAL inside functions. Its might fails on some platforms for wathever reasons (on iOS im remember).
Personly im do something like this:
GLOBAL JUMPBUTTON=0
FUNCTION PressJump:
IF KEY(57)=1
JUMPBUTTON=JUMPBUTTON+1
ELSE
JUMPBUTTON=0
ENDIF
ENDFUNCTION
JUMPBUTTON is 1 when first pressed, when holding down, its somewhere over 1. But both methods is correct (except moving GLOBAL outside FUNCTION).
I use spacefractal´s method in game too. If it is a debugging key, the I simply throw a sleep to holds things a bit :good:
Hi,
Vielen Dank an alle für die Antworten
Aber ich habe den Key aber verbaut.
So:
IF Key(57)
......
ElseIf ....
Also hab ich doch den Key eingebaut dan mus ich doch eingebaut also muss ich wen ich die Funktion benutze
IF Key(57) and PressJump(Name der Function)
eigeben, Oder doch nicht?
Kann mir jemand helfen? :nw:
Hi, statt
PRINT "Hello", 10,10
schreibst du dann einfach den Funktionsaufruf:
GLOBAL pressed%
SETFONT 0, 3 // Nur damit was lesen kann. 3x vergrössert.
WHILE TRUE
IF KEY(57) AND pressed = 0
Ausgabe()
pressed = 1
ENDIF
IF NOT KEY(57) THEN pressed = 0
SHOWSCREEN
WEND
FUNCTION Ausgabe:
PRINT "Hello", 10,10
ENDFUNCTION
Danke Danke vielen Dank. :good: :nw: :D =D
Ich danke euch!
Hallo, ich bins wieder.
Kurze Frage dazu wenn ich
alles so mache was wäre dan mit einer Funktion?
Also
....
IF Key(57) or *eine function*
Wie würde ich das den machen das die function genauso wieder erneut gedrückt werden muss?
ich weiß nicht genau wie du das mit der Funktion gemeint hast,
aber wenn du zB. sowas meinst:
IF irgendwas = 1
IF irgendwasStart = 0 // Code der nur einmal ausgeführt wird, wenn irgendwas = 1
ENDIF
irgendwasStart = 1
ENDIF
// und dann am ende der Funktion
if irgendwas = 0 THEN irgendwasStart = 0
oder noch einfacher
IF irgendwas = 1
// Code der nur einmal ausgeführt wird, wenn irgendwas = 1
irgendwas = 2 // wenn du an anderen Stellen checken willst ob irgendwas läuft ( also 1 oder 2 ist ) einfach IF irgendwas > 0 verwenden
ENDIF
Ich hab es jetzt so gemacht wie mir das vorgeschlagen wurde:
GLOBAL pressed%
WHILE TRUE
IF KEY(57) AND pressed = 0
Ausgabe()
pressed = 1
ENDIF
IF NOT KEY(57) THEN pressed = 0
SHOWSCREEN
WEND
FUNCTION Ausgabe:
PRINT "Hello", 10,10
ENDFUNCTION
Jetzt wolte ich einen Butten mit einer function einfügen:
If Key(57) or einefunction
Ich wüsste aber nicht wie ich das machen soll.
Mit den Keys gehts aber halt nicht mit einer function.
meinst du einen knopf den man mit der maus klickt?
Ja genau das.
Kann jemand helfen?
Das must du dir selbst bauen, ein ganz einfaches und unoptimiertes beispiel:
FUNCTION Button: x%, y%, w%, h%
LOCAL mx%, my%, b1%, b2%
MOUSESTATE mx, my, b1, b2
DRAWRECT x, y, w, h, RGB(255,0,0)
RETURN b1 AND BOXCOLL(x, y, w, h, mx, my, 1, 1)
ENDFUNCTION
Zu benutzen so:
SYSTEMPOINTER TRUE
IF Button(50,100,200,50) THEN PRINT "pressed", 50,150
Mmh kann man nicht auch das in den Key packen?
Sicher. Aber meinst du nicht das es sinnvoller wäre, wenn du versuchen würdest zumindest solch einfache Dinge selbst hinzubekommen? Am Ende willst du ja mal selbst ein Spiel schreiben und nicht nur den Code von uns kopieren. Übrigens kann es auch sehr hilfreich sein, wenn du mal in die Bespiele siehst, unter GLBasic/Samples findest du jede Menge. Kannst dann damit rum experimentieren, hier und da etwas verändern und sehen was raus kommt. Ist sicher lehrreich. :good:
Um deine letzte Frage doch noch zu beantworten (falls ich sie richtig verstanden habe), dann kannst du in deinem Code da wo bisher KEY() stand jetzt einfach BUTTON(x,y,b,h) einfügen/ersetzen (x,y,b,h müssen natürlich durch die jeweiligen Werte ersetzt werden).
Kann ich es nicht in eine function packen. Und irgendwie einfügen bitte kann mir jemand helfen.
Du hast recht aber ich möchte mich gerne zuerst ihr an euch wenden nimms mir nicht übel bin halt nnur sehr neu und vorsichtig auf dem Gebiet auserdem will ich die Codes sinnlos Rüber kopieren sondern möchte sie selbständig einbauen.
Kannst du das nochmal genau erklären mit dem Key durch Butten ersetzen?
In der Programmierung gibt es immer tausende Wege um das um das gleiche zu erreichen, einen möglichst gut passenden zu finden ist immer Teil des Vergnügens. Das von dir gewünschte würde ich so lösen:
SYSTEMPOINTER TRUE
GLOBAL pressed%
WHILE TRUE
IF Button(50,50,100,50) OR KEY(57)
IF pressed = 0
Ausgabe()
pressed = 1
ENDIF
ELSE
pressed = 0
ENDIF
SHOWSCREEN
WEND
FUNCTION Ausgabe:
PRINT "Hello", 10, 10
ENDFUNCTION
FUNCTION Button: x%, y%, w%, h%
LOCAL mx%, my%, b1%, b2%
MOUSESTATE mx, my, b1, b2
DRAWRECT x, y, w, h, RGB(255,0,0)
RETURN b1 AND BOXCOLL(x, y, w, h, mx, my, 1, 1)
ENDFUNCTION
PS ich glaube, was dir hier gefehlt hat um es selbst zu lösen waren logic operatoren, schauen dir mal AND, OR etc. an.
EDIT zu deinem neuen Post: mit den ersetzen, dass meinte ich wörtlich, an der stelle wo du bisher KEY stehen hast solltest du das einfach entfernen und stattdessen meine Funktion Button einfügen. Dann würde allerdings nur noch der Button funktionieren, nicht mehr der KEY. Willst du dass man beide drücken kann (jeweils eines reicht), dann musst du schreiben KEY() OR Button(), willst du, dass das Ereignis nur dann eintritt, wenn beide gleichzeitg gedrückt werden, dann musst du schreiben KEY() AND Button(). Hoffe das gibt dir eine Idee wo du starten kannst mit lernen. Und fragen ist immer eine gute Idee, kannst du ruhig weiterhin tun. Aber selbst ausprobieren ist genauso gut (und meist schneller), keine sorge, du kannst damit nichts kaputt machen. Bei fehlern passiert nur eines der 3:
-Programm kompiliert nicht (da hast du Glück, das ist einfach zu finden und zu beheben)
-Programm kompiliert und startet, aber crasht irgendwann
-Programm kompiliert und läuft ohne crash, aber macht nicht das was du wolltest (Fehelr ist am schwersten zu finden und zu beheben)
Egal welches davon passiert, keines ist schlimm oder irgendwie gefährlich. Im Gegenteil, das passiert jedem von uns häufig, egal wie viel Erfahrung wir schon haben. Also einfach mutig sein und probieren und wenn du es dann nicht selbst hin bekommst kannst du ja immer noch fragen. Viel Erfolg! :booze:
Ich danke euch ich hab! :nw: