GLBasic forum

Other languages => GLBasic - de => Topic started by: Felix on 2015-Jul-22

Title: Tasten drücken? If Key ()?
Post by: Felix on 2015-Jul-22
 :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!
Title: Re: Tasten drücken? If Key ()?
Post by: Ian Price on 2015-Jul-22
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.
Title: Re: Tasten drücken? If Key ()?
Post by: Felix on 2015-Jul-22
Thx. Gibt es noch andere Möglichkeiten?
Title: Re: Tasten drücken? If Key ()?
Post by: Schranz0r on 2015-Jul-22
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.
Title: Re: Tasten drücken? If Key ()?
Post by: Felix on 2015-Jul-22
Könnte mir jemand zeigen.wie ich es in eine function umwandele?
Bitte ;)
Title: Re: Tasten drücken? If Key ()?
Post by: Felix on 2015-Jul-23
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?
Title: Re: Tasten drücken? If Key ()?
Post by: spacefractal on 2015-Jul-23
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).
Title: Re: Tasten drücken? If Key ()?
Post by: erico on 2015-Jul-24
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:
Title: Re: Tasten drücken? If Key ()?
Post by: Felix on 2015-Jul-27
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:
Title: Re: Tasten drücken? If Key ()?
Post by: Worebu on 2015-Jul-27
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

Title: Re: Tasten drücken? If Key ()?
Post by: Felix on 2015-Jul-30
Danke Danke vielen Dank. :good: :nw: :D =D
Ich danke euch!
Title: Re: Tasten drücken? If Key ()?
Post by: Felix on 2015-Aug-11
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?
Title: Re: Tasten drücken? If Key ()?
Post by: nabz32 on 2015-Aug-12
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



Title: Re: Tasten drücken? If Key ()?
Post by: Felix on 2015-Aug-14
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.
Title: Re: Tasten drücken? If Key ()?
Post by: nabz32 on 2015-Aug-14
meinst du einen knopf den man mit der maus klickt?
Title: Re: Tasten drücken? If Key ()?
Post by: Felix on 2015-Aug-17
Ja genau das.
Kann jemand helfen?
Title: Re: Tasten drücken? If Key ()?
Post by: kanonet on 2015-Aug-17
Das must du dir selbst bauen, ein ganz einfaches und unoptimiertes beispiel:

Code (glbasic) Select
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:
Code (glbasic) Select
SYSTEMPOINTER TRUE
IF Button(50,100,200,50) THEN PRINT "pressed", 50,150
Title: Re: Tasten drücken? If Key ()?
Post by: Felix on 2015-Aug-18
Mmh kann man nicht auch das in den Key packen?
Title: Re: Tasten drücken? If Key ()?
Post by: kanonet on 2015-Aug-18
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).
Title: Re: Tasten drücken? If Key ()?
Post by: Felix on 2015-Aug-18
Kann ich es nicht in eine function packen.  Und irgendwie einfügen bitte kann mir jemand helfen.
Title: Re: Tasten drücken? If Key ()?
Post by: Felix on 2015-Aug-18
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?
Title: Re: Tasten drücken? If Key ()?
Post by: kanonet on 2015-Aug-18
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:
Code (glbasic) Select
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:
Title: Re: Tasten drücken? If Key ()?
Post by: Felix on 2015-Aug-18
Ich danke euch ich hab! :nw: