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

Anfängerfragen zum Programmieren mit PureBasic.
marco2007
Beiträge: 906
Registriert: 26.10.2006 13:19
Kontaktdaten:

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

Beitrag 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
Zuletzt geändert von marco2007 am 17.03.2007 11:43, insgesamt 1-mal geändert.
Windows 11 - PB 6.03 x64
_________________________________
Benutzeravatar
PureBasic4.0
Beiträge: 785
Registriert: 29.10.2006 17:26
Wohnort: 127.0.0.1

Beitrag 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
PB 4.50 RC1 + Ubuntu 10.04 LTS + Windows 7 x64
marco2007
Beiträge: 906
Registriert: 26.10.2006 13:19
Kontaktdaten:

Beitrag 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
Windows 11 - PB 6.03 x64
_________________________________
Benutzeravatar
Green Snake
Beiträge: 1394
Registriert: 22.02.2005 19:08

Beitrag von Green Snake »

Dein Code funktioniert hier :?



>>Trotzdem: Wie funktioniert der Befehl?
Du musst die #VK_* Konstanten verwenden.
-.-"
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag 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.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
marco2007
Beiträge: 906
Registriert: 26.10.2006 13:19
Kontaktdaten:

Beitrag 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)
Windows 11 - PB 6.03 x64
_________________________________
Benutzeravatar
Green Snake
Beiträge: 1394
Registriert: 22.02.2005 19:08

Beitrag von Green Snake »

>>Wie? Mein Code funktioniert? A
Jep, funkt alles
-.-"
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag 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.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
marco2007
Beiträge: 906
Registriert: 26.10.2006 13:19
Kontaktdaten:

Beitrag 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?
Windows 11 - PB 6.03 x64
_________________________________
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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? :?
Zuletzt geändert von Kaeru Gaman am 17.03.2007 13:14, insgesamt 2-mal geändert.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Antworten