Tasten drücken? If Key ()?

Previous topic - Next topic

Felix

 :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!

Ian Price

You can use a toggle/flag to say that the key is being pressed. eg

Code (glbasic) Select

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.
I came. I saw. I played.

Felix

Thx. Gibt es noch andere Möglichkeiten?

Schranz0r

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.
I <3 DGArray's :D

PC:
AMD Ryzen 7 3800X 16@4.5GHz, 16GB Corsair Vengeance LPX DDR4-3200 RAM, ASUS Dual GeForce RTX™ 3060 OC Edition 12GB GDDR6, Windows 11 Pro 64Bit, MSi Tomahawk B350 Mainboard

Felix

Könnte mir jemand zeigen.wie ich es in eine function umwandele?
Bitte ;)

Felix

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?

spacefractal

dont use GLOBAL inside functions. Its might fails on some platforms for wathever reasons (on iOS im remember).

Personly im do something like this:

Code (glbasic) Select

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).
Genius.Greedy Mouse - Karma Miwa - Spot Race - CatchOut - PowerUp Elevation - The beagle Jam - Cave Heroes 2023 - https://spacefractal.itch.io/

erico

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:

Felix

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:

Worebu

#9
Hi, statt

PRINT "Hello", 10,10

schreibst du dann einfach den Funktionsaufruf:

Code (glbasic) Select

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

Intel I5 9600 - RTX 4070, WaKü, 32GB RAM, 1x 512gb + 1x 1Gb NVRAM,  1x4TB + 1x1TB HD

Felix

#10
Danke Danke vielen Dank. :good: :nw: :D =D
Ich danke euch!

Felix

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?

nabz32

ich weiß nicht genau wie du das mit der Funktion gemeint hast,

aber wenn du zB. sowas meinst:

Code (glbasic) Select

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

Code (glbasic) Select

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




Felix

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.

nabz32

meinst du einen knopf den man mit der maus klickt?