Seite 1 von 2

#PB_Key_Up + #PB_Key_Left + #PB_Key_Space unverträglich?

Verfasst: 17.03.2007 10:17
von marco2007
Hi,

kann mir jemand erklären, warum ich nicht schießen kann, wenn ich #PB_Key_Up + #PB_Key_Left gleichzeitig drücke und #PB_Key_Space die Feuertaste ist?

"Links unten + schießen" funktioniert jedoch, wenn man anstatt #PB_Key_Space eine andere KeyID (z.b.: #PB_Key_H) verwendet.

Code: Alles auswählen

If InitSprite()=0 Or InitKeyboard()=0 Or InitMouse()=0
  MessageRequester("Error!!!", "Can't open DirectX 7 or later", 0)
End
EndIf

Structure schuss
  xr.l
  yr.l
  speed.l
EndStructure

NewList feuer.schuss()

OpenScreen(800,600,16,"Screen")

x=40
y=100

Repeat
ExamineKeyboard()
ClearScreen(RGB(0,0,0))

  If KeyboardPushed(#PB_Key_Escape)
    End
  EndIf
  
CreateSprite(59,20,20)
  StartDrawing(SpriteOutput(59))
    Circle(10,10,10,$00ff00)
  StopDrawing()

DisplaySprite(59,x,y)

If KeyboardPushed(#PB_Key_Right):x+2:EndIf
If KeyboardPushed(#PB_Key_Left):x-2:EndIf
If KeyboardPushed(#PB_Key_Up):y-2:EndIf
If KeyboardPushed(#PB_Key_Down):y+2:EndIf

If KeyboardReleased(#PB_Key_Space)  
  AddElement(feuer()) 
    feuer()\xr=x
    feuer()\yr=y
    feuer()\speed=4
EndIf

ForEach feuer()
feuer()\xr+feuer()\speed

  StartDrawing(ScreenOutput())
    Circle(feuer()\xr,feuer()\yr,5,$000FF) 
  StopDrawing()
Next

FlipBuffers()
 
Until KeyboardPushed(#PB_Key_Escape)
Ursprünglich dachte ich, ich habe einen saublöden Fehler, aber im Codearchiv (z.b: move&shot.pb) ist ein ähnliches Beispiel.

Hat jemand eine Erklärung?

Danke
Marco


...habe soeben bemerkt, dass bei KeyboardReleased(#PB_Key_V) rechts unten nicht funktioniert....


bearbeitet: Einrückungen

Verfasst: 17.03.2007 10:49
von PureBasic4.0
hab's nicht getestet, aber versuche mal GetAsyncKeyState_(KeyID), wenn das andere nicht geht.

PureBasic4.0

P.S.: Bitte verwende zwecks besserer Übersichtlichkeit Einrückungen in deinem Programm

Verfasst: 17.03.2007 11:58
von marco2007
Kaeru Gaman hat geschrieben:> benutze Getasynckeystate_()

auf gar keinen Fall!

wozu gibts 'ne Keyboard-Lib.
Trotzdem: Wie funktioniert der Befehl? Benötige ich hier Winapi-Konstante? Folgender Code funktioniert nicht:

Code: Alles auswählen

If GetAsyncKeyState_(#PB_Key_Right):x+2:EndIf
If GetAsyncKeyState_(#PB_Key_Left):x-2:EndIf
If GetAsyncKeyState_(#PB_Key_Up):y-2:EndIf
If GetAsyncKeyState_(#PB_Key_Down):y+2:EndIf

If GetAsyncKeyState_(#PB_Key_Space)  
  AddElement(feuer()) 
    feuer()\xr=x
    feuer()\yr=y
    feuer()\speed=4
EndIf

Verfasst: 17.03.2007 12:27
von Green Snake
Dein Code funktioniert hier :?



>>Trotzdem: Wie funktioniert der Befehl?
Du musst die #VK_* Konstanten verwenden.

Verfasst: 17.03.2007 12:33
von DarkDragon
Vielleicht liegts an den sich gegenseitig blockierenden Tasten?! Bei manchen PCs kommt dann normalerweise son gepiepse über den PC Lautsprecher, bei manch anderen kommt nichts.

Verfasst: 17.03.2007 12:37
von marco2007
GreenSnake:

Wie? Mein Code funktioniert? Am Laptop und am Stand-Pc funktioniert es bei mir nicht....

DD:
Mich wundert`s halt, denn wenn ich die KeyID ändere, geht eine andere Richtungskombination nicht (kein Gepiepse)

Verfasst: 17.03.2007 12:48
von Green Snake
>>Wie? Mein Code funktioniert? A
Jep, funkt alles

Verfasst: 17.03.2007 13:03
von DarkDragon
marco2006 hat geschrieben:DD:
Mich wundert`s halt, denn wenn ich die KeyID ändere, geht eine andere Richtungskombination nicht (kein Gepiepse)
Liegt trotzdem an der Tastatur für gewöhnlich. Meines Wissens kann man das gepiepse irgendwo ausschalten oder einfach den PC Lautsprecher ausbauen.

Verfasst: 17.03.2007 13:05
von marco2007
Greensnake:

Mist. Gibt`s ja nicht, daß es auf meinen beiden Rechnern nicht funkt. Beide WinXp, USB-Keyboard beim Stand-Pc....

Hat wer einen Tip?

Verfasst: 17.03.2007 13:07
von Kaeru Gaman
marco2006 hat geschrieben:
Kaeru Gaman hat geschrieben:> benutze Getasynckeystate_()

auf gar keinen Fall!

wozu gibts 'ne Keyboard-Lib.
hä? was is los? was soll ich geschrieben haben? :?