Erweiterte Joystickbefehle

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Stefan
Beiträge: 125
Registriert: 29.08.2004 10:51
Kontaktdaten:

Erweiterte Joystickbefehle

Beitrag von Stefan »

Hallo

Hab gerade ein paar Joystickfunktionen programmiert, mit denen man
den Status des Joystick genauer abfragen kann als mit JoystickAxisX() bzw. JoystickAxisY(). :wink:

Code: Alles auswählen

Structure DIJOYSTATE 
  lX.l 
  lY.l 
  lZ.l 
  lRx.l 
  lRy.l 
  lRz.l 
  rglSlider.l[2] 
  rgdwPOV.l[4] 
  rgbButtons.b[32] 
EndStructure 

Structure DIDEVICEINSTANCE 
  dwSize.l 
  guidInstance.guid 
  guidProduct.guid 
  dwDevType.l 
  tszInstanceName.b[#MAX_PATH] 
  tszProductName.b[#MAX_PATH] 
  guidFFDriver.guid 
  wUsagePage.w 
  wUsage.w 
EndStructure 

Structure DIDEVCAPS 
  dwSize.l
  dwFlags.l
  dwDevType.l 
  dwAxes.l
  dwButtons.l 
  dwPOVs.l
  dwFFSamplePeriod.l
  dwFFMinTimeResolution.l 
  dwFirmwareRevision.l
  dwHardwareRevision.l 
  dwFFDriverVersion.l
EndStructure

Procedure GetJoystickDevice() 
  !extrn _PB_Joystick_Current 
  !MOV Eax,[_PB_Joystick_Current] 
  ProcedureReturn 
EndProcedure 


Procedure JoystickX();returns a number from -1000 to 1000 
  *Joystick.IDirectInputDevice7A=GetJoystickDevice() 
  *Joystick\GetDeviceState(SizeOf(DIJOYSTATE),State.DIJOYSTATE) 
  ProcedureReturn State\lX 
EndProcedure 

Procedure JoystickY();returns a number from -1000 to 1000 
  *Joystick.IDirectInputDevice7A=GetJoystickDevice() 
  *Joystick\GetDeviceState(SizeOf(DIJOYSTATE),State.DIJOYSTATE) 
  ProcedureReturn State\lY 
EndProcedure 

Procedure JoystickZ();returns a number from -1000 to 1000 
  *Joystick.IDirectInputDevice7A=GetJoystickDevice() 
  *Joystick\GetDeviceState(SizeOf(DIJOYSTATE),State.DIJOYSTATE) 
  ProcedureReturn State\lZ
EndProcedure 

Procedure JoystickU();returns a number from -1000 to 1000 
  *Joystick.IDirectInputDevice7A=GetJoystickDevice() 
  *Joystick\GetDeviceState(SizeOf(DIJOYSTATE),State.DIJOYSTATE) 
  ProcedureReturn State\rglSlider[0]
EndProcedure

Procedure JoystickV();returns a number from -1000 to 1000 
  *Joystick.IDirectInputDevice7A=GetJoystickDevice() 
  *Joystick\GetDeviceState(SizeOf(DIJOYSTATE),State.DIJOYSTATE) 
  ProcedureReturn State\rglSlider[1]
EndProcedure

Procedure GetNumberOfButtons()
  *Joystick.IDirectInputDevice7A=GetJoystickDevice() 
  Caps.DIDEVCAPS\dwSize=SizeOf(DIDEVCAPS)
  *Joystick\GetCapabilities(Caps)
  ProcedureReturn Caps\dwButtons
EndProcedure

Procedure GetNumberOfAxes()
  *Joystick.IDirectInputDevice7A=GetJoystickDevice() 
  Caps.DIDEVCAPS\dwSize=SizeOf(DIDEVCAPS)
  *Joystick\GetCapabilities(Caps)
  ProcedureReturn Caps\dwAxes
EndProcedure

Procedure.s JoystickName() 
  *Joystick.IDirectInputDevice7A=GetJoystickDevice() 
  Info.DIDEVICEINSTANCE\dwSize=SizeOf(DIDEVICEINSTANCE) 
  *Joystick\GetDeviceInfo(Info) 
  ProcedureReturn PeekS(@Info\tszProductName[0]) 
EndProcedure 






;Example: 
If InitJoystick()=0 Or InitSprite()=0 
  MessageRequester("Error","Can't initialize DirectX 7.") 
  End 
EndIf 


flags=#PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_ScreenCentered 
OpenWindow(1,0,0,250,250,flags,"enhanced Joystick-commands") 
OpenWindowedScreen(WindowID(),0,0,250,250,0,0,0) 

Repeat 
  ExamineJoystick() 
  
  ClearScreen(0,0,0) 
  
  StartDrawing(ScreenOutput()) 
  
  LineXY(0,125,250,125,#white) 
  LineXY(125,0,125,250,#white) 
  
  Locate(0,0) 
  FrontColor(255,255,0) 
  BackColor(0,0,0) 
  DrawingFont(GetStockObject_(#ANSI_VAR_FONT)) 
  DrawText(JoystickName()) 
  
  Circle(JoystickX()/8+125,JoystickY()/8+125,10,#red) 
  
  StopDrawing() 
  
  FlipBuffers() 
Until WindowEvent()=#PB_Event_CloseWindow 
Gruß
Stefan
Zuletzt geändert von Stefan am 08.02.2005 21:22, insgesamt 1-mal geändert.
Benutzeravatar
Hroudtwolf
Beiträge: 1416
Registriert: 30.10.2004 23:33
Kontaktdaten:

Beitrag von Hroudtwolf »

Net schlecht Herr Specht.
Darf ich das für ein Spiel verwenden ? Natürlich mit deinen Credits.
Stefan
Beiträge: 125
Registriert: 29.08.2004 10:51
Kontaktdaten:

Beitrag von Stefan »

@Hroudtwolf

Klar, ich würde mich freuen. :D
Gruß
Stefan
Benutzeravatar
Hroudtwolf
Beiträge: 1416
Registriert: 30.10.2004 23:33
Kontaktdaten:

Beitrag von Hroudtwolf »

OK.Danke
:allright:
mipooh
Beiträge: 226
Registriert: 12.12.2004 04:49
Kontaktdaten:

Beitrag von mipooh »

Fragt das nur x y ab oder hab ich nicht genau genug geguckt?
Gruss
Mipooh
Benutzeravatar
Hroudtwolf
Beiträge: 1416
Registriert: 30.10.2004 23:33
Kontaktdaten:

Beitrag von Hroudtwolf »

Wenn du da jetzt noch ForceFeedback und Z-Achse (Pod) rein machen würdest. Dann würden dir einige die Füße küssen (Inklusive ich(War nur symbolisch gemeint))
orange-blue
Beiträge: 556
Registriert: 04.09.2004 22:23
Kontaktdaten:

Beitrag von orange-blue »

am besten sollten alle achsen abfragbar sein.
Benutzeravatar
remi_meier
Beiträge: 1078
Registriert: 29.08.2004 20:11
Wohnort: Schweiz

Beitrag von remi_meier »

Kleiner Tipp:
Include Pack von GPI unter Joystick (ohne FF aber sonst viel)
http://gpihome.de/purebasic/jaPBe/IncludePack.exe
Benutzeravatar
hardfalcon
Beiträge: 3447
Registriert: 29.08.2004 20:46

Beitrag von hardfalcon »

Jepp, da hat remi_meier wieder mal recht. Ihr solltet sowieso mal jaPBe ausprobieren, ihr werdet das Programm nicht mehr missen wollen. Der Unterschied zwischen dem Standard-PB-Editor und jaPBe istungefähr vergleichbar mit dem Unterschied zwischen Paint und Photoshop 7.
Oder wie zwischen Notepad und UltraEdit 10. Oder wie zwischen Word und OpenOffice (von der Stabilität her gesehen!).

cya
Pascal
Stefan
Beiträge: 125
Registriert: 29.08.2004 10:51
Kontaktdaten:

Beitrag von Stefan »

Hallo

Hab noch folgende Funktionen hinzugefügt:
JoystickZ(),JoystickU(),JoystickV(),GetNumberOfButtons(),GetNumberOfAxes()

Beim Thema Force-Feedback kann ich euch leider nicht helfen.
Mein Joystick unterstützt leider kein Force-Feedback. :(
Hier ein Code mit dem ihr testen könnt ob euer Joystick Force-Feedback unterstützt:

Code: Alles auswählen

#DIDC_FORCEFEEDBACK=256 

Structure DIDEVCAPS 
  dwSize.l 
  dwFlags.l 
  dwDevType.l 
  dwAxes.l 
  dwButtons.l 
  dwPOVs.l 
  dwFFSamplePeriod.l 
  dwFFMinTimeResolution.l 
  dwFirmwareRevision.l 
  dwHardwareRevision.l 
  dwFFDriverVersion.l 
EndStructure 

Procedure GetJoystickDevice() 
  !extrn _PB_Joystick_Current 
  !MOV Eax,[_PB_Joystick_Current] 
  ProcedureReturn 
EndProcedure 

InitJoystick() 

*Joystick.IDirectInputDevice7A=GetJoystickDevice() 
Caps.DIDEVCAPS\dwSize=SizeOf(DIDEVCAPS) 
*Joystick\GetCapabilities(Caps) 


If Caps\dwFlags & #DIDC_FORCEFEEDBACK 
Debug "Force-Feedback is supported !" 
Else 
Debug "Force-Feedback is NOT supported !" 
EndIf 
Gibt es hier Jemanden bei dem es unterstützt wird ?

Gruß
Stefan
Zuletzt geändert von Stefan am 09.02.2005 08:09, insgesamt 1-mal geändert.
Antworten