Probleme mit der eingabe Teste im Spiel?

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

blackmaster

Betreff: Probleme mit der eingabe Teste im Spiel?

BeitragDi, Nov 07, 2006 0:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,
ich hab mein Spiel fast fertig geproggt, aber mir ist aufgefallen das da etwas nicht stimmt, wenn man gewinnt oder so, dann kommt ja eine Meldung die ich mit der Enter Taste Fortsetzen kann, aber wenn ich es so mache:
Code: [AUSKLAPPEN]
If KeyDown(28) And KeyHit(28) Then

EndIf


Dann wird es garnicht ausgeführt, ich habs auch so probiert:
Code: [AUSKLAPPEN]
If KeyHit(28) Then

EndIf


geht auch net, erst wenn ich mindestens 4 oder 5 mal schnell hintereinander drücke, dann wird sie erst ausgeführt.

Wenn ich KeyDown(28) benutze, dann wirds sofort ausgeführt, aber ich brauche KeyHit.

Wisst ihr zufälligerweise woran das liegen kann?

achso, hier mal der code was nicht sofort ausgeführt wird:
Code: [AUSKLAPPEN]
If Spiel  = 1 Then
  If KeyDown(28) And KeyHit(28) Then
    ;Mindestens wenn ich ganz schnell 4 oder 5 mal die Entertaste gedrückt habe, dann wirds erst ausgeführt
  EndIf
EndIf


Ich bin euch schonmal sehr dankbar für die hilfe.

MFG Markus

Schranz0r

BeitragDi, Nov 07, 2006 1:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
If Spiel  = 1 And  KeyHit(28)  Then
    ; Mach was
EndIf



So muss das gehn.

Wenn nicht Poste mal den ganzen Code hier rein , weil sonnst können wir nur raten.
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!HAUPTSACH et kost VIEL!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 

Ava

Gast

BeitragDi, Nov 07, 2006 3:21
Antworten mit Zitat
Wenn es nicht geht, dann fragst Du KeyHit(28) öfter in Deiner Schleife ab - und das ist nicht möglich!

TheMatrix

BeitragDi, Nov 07, 2006 13:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Schreibe entweder if keydown(28) or keyhit(28), aber nicht "and".

Wenn du nämlich mit keydown abfragst, dann gibt BB eine 1 zurück und entfernt den gedrückten Knopf aus der Queue und gibt daher eine 0 bei erneuter Abfrage mit keyhit wieder.

mfg
°_° °.° °~° °v° .. -.-
 

Ava

Gast

BeitragDi, Nov 07, 2006 14:13
Antworten mit Zitat
TheMatrix hat Folgendes geschrieben:
Wenn du nämlich mit keydown abfragst, dann gibt BB eine 1 zurück und entfernt den gedrückten Knopf aus der Queue und gibt daher eine 0 bei erneuter Abfrage mit keyhit wieder.


Ein Mythos...

Die Taste wird nur bei KeyHit() zurückgesetzt.
Dennoch ist die doppelte Abfrage natürlich etws sinnfrei. Very Happy
 

c64

BeitragDi, Nov 07, 2006 14:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi, hier damit kannst du sehr einfach ein Keystate abfragen wenn du es benutzen möchtest, brauchst du es nur per Include einbinden.

Einfach deine Keys per
KEY_HANDLE = GL_Create_Key ( Key_SCANCODE1, [KEY_SCANCODE2] ) definieren und in deinem Mainloop sollte dann ganz oben einfach GL_UpdateInputs () stehen um die Keyroutine Upzudaten Smile. Dann kannst du, wenn du eine Taste abfragen möchtest einfach mit GL_Keystate (KEY_HANDLE) deine Taste abfragen zurückgeliefert wird entweder GL_KeyHit oder GL_Keydown, also eine 1 oder eine 2 oder eine 0 wenn nix gedrückt wird.

Man kann einem KEY_Handle zwei keys zuweisen also eine Alternativtaste Wink .

Code: [AUSKLAPPEN]

;////////////////////////////////////////////////////////////////////////
;/
;/ GL_KeyControl.bb
;/ ----------------
;/
;/ Gamelib file.
;/
;/ -------------
;/
;/ Keycontrol file
;/
;/ Define Key's and get states by GL_Keystate (Key_ID)
;/
;////////////////////////////////////////////////////////////////////////



Global GL_Mousekey [5]

         
Const GL_keyHit  = 1
Const GL_keyDown = 2

;////////////////////////////////////////////////////////////////////////


Global GL_KeyControl

Global GL_Key.TGL_Key

Type TGL_Key

    Field ID      

    Field Key
    Field Key2
   
    Field State
      
End Type
         
;////////////////////////////////////////
;/
;/

Function GL_Create_Key(Key,Key2=0)
      
       GL_Key      = New TGL_Key
   
       GL_Key\ID   = Handle (GL_Key)
       GL_Key\Key  = Key
       GL_Key\Key2 = Key2
                  
       Return GL_Key\ID      
      
End Function

;/
;/
;////////////////////////////////////////

;////////////////////////////////////////
;/
;/

Function GL_HANDLE_Key(Key_ID)
      
        GL_key = Object TGL_Key(Key_ID)

End Function

;/
;/
;////////////////////////////////////////

;////////////////////////////////////////
;/
;/

Function GL_Delete_Key (Key_ID)

       If Key_ID
      
         GL_Handle_Key (Key_ID)
         
         Delete GL_Key
         
       EndIf

End Function

;/
;/
;////////////////////////////////////////

;-------------------------------------------------------------------------------------------

;////////////////////////////////////////
;/
;/

Function GL_UpdateInputs ()
      
       For GL_key = Each TGL_Key

                    GL_Key\State=0
         
          If KeyDown (GL_key\Key)  GL_key\state= 2
          If KeyHit  (GL_key\Key)  GL_key\state= 1
   
          If KeyDown (GL_key\Key2) GL_key\state= 2
          If KeyHit  (GL_key\Key2) GL_key\state= 1
               

       Next

       For c=1 To 5
                        GL_Mousekey [c] = 0   
          If MouseDown  (c) GL_Mousekey [c] = GL_keyDown
          If MouseHit   (c) GL_Mousekey [c] = GL_keyhit                                     
         
       Next
      
                 FlushKeys()

End Function


;/
;/
;////////////////////////////////////////


;////////////////////////////////////////
;/
;/

Function GL_keyState   (Key_ID)
      
       GL_Handle_Key (Key_ID)
      
       Return GL_Key\State         
      
End Function                                     

;/
;/
;////////////////////////////////////////
Betreten verboten! Kinder haften für ihre Eltern!
  • Zuletzt bearbeitet von c64 am Di, Nov 07, 2006 17:19, insgesamt einmal bearbeitet
 

blackmaster

BeitragDi, Nov 07, 2006 17:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke euch, ich hab den fehler gedunden, des ist weil weiter oben nochmal If KeyDown(28) And Keyit(28) Then steht, das habe ich jetzt in einer Variable gepackt, das es dann auf false gesetzt wird.
Und jetzt gehts, trotzdem vielen dank für die hilfen Very Happy

Markus

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group