Results 1 to 15 of 19

Thread: NLDJoystick

Threaded View

  1. #1
    Silly member NGLN's Avatar
    Join Date
    Aug 2004
    Location
    Werkendam
    Posts
    5,133

    NLDJoystick

    Omschrijving:
    NLDJoystick is een runtime-unit welke tot maximaal twee joysticks kan monitoren en de gegevens daarvan met behulp van events ter beschikking stelt voor je eigen programma. NLDJoystick is een losstaande unit en werkt op basis van WinAPI (unit MMSystem.pas).

    Oorsprong:
    Laatst tijdens het maken van een spelletje kwam de wens om dat spelletje met een joystick te kunnen besturen om de hoek kijken. Verder komt mijn motivatie voor 32 knoppen-, 6 assen- en "Point Of View"-ondersteuning voornamelijk uit het onderwerp Joystick uitlezen met WinAPI. Hoewel het spelletje slechts 1 knop en 2 assen behoefde, zag ik er wel een uitdaging in om de unit algemeen geschikt te maken.

    Gebruik:
    De joysticks hoeven niet aangemaakt of vrijgegeven te worden. Roep de joysticks aan met de functie's Joystick1 of Joystick2. V????r gebruik moet de betreffende joystick 'opgestart' worden met Initialize:
    Code:
        function Initialize(const NeedAdvanced: Boolean = False): Boolean;
    Het functieresultaat geeft aan of de benodigde driver is geïnstalleerd en of de betreffende joystick überhaupt is aangesloten.

    NLDJoystick heeft per joystick twee mogelijke modi:
    - De simpele modus: voor joysticks met maximaal 2 assen en maximaal 4 knoppen. Ook kun je deze modus gebruiken bij geavanceerde joysticks.
    - De geavanceerde modus: voor joysticks met maximaal 6 assen, maximaal 32 knoppen of een 'Point Of View'-functionaliteit.

    De simpele modus maakt gebruik van een messagehandler voor de standaard Windows joystick-messages. De geavanceerde modus maakt gebruik van een interne timer om de gegevens van de joystick met een gewenst interval uit te lezen.

    Vervolgens zijn er vier events die ingesteld kunnen worden om de joystick aan je programma te koppelen:
    Code:
      TJoyButtonEvent = procedure(Sender: TNLDJoystick;
        const Buttons: TJoyButtons) of object;
      TJoyMoveEvent = procedure(Sender: TNLDJoystick; const JoyPos: TJoyRelPos;
        const Buttons: TJoyButtons) of object;
      TJoyPOVChangedEvent = procedure(Sender: TNLDJoystick;
        const Degrees: Single) of object;
    
      ...
        property OnButtonDown: TJoyButtonEvent read FOnButtonDown
          write FOnButtonDown;
        property OnButtonUp: TJoyButtonEvent read FOnButtonUp write FOnButtonUp;
        property OnMove: TJoyMoveEvent read FOnMove write FOnMove;
        property OnPOVChanged: TJoyPOVChangedEvent read FOnPOVChanged
          write FOnPOVChanged;
    Je kunt voor meerdere joysticks eventueel dezelfde eventhandlers gebruiken: controleer dan op Sender.ID (0: Joystick1, 1: Joystick2).

    Verder zijn er nog een tweetal property's die ingesteld kunnen worden:
    - PollingInterval: Cardinal: het interval waarop de interne timer de joystickgegevens uitleest (alleen in geavanceerde modus). Standaardwaarde = 40, of het minimale PollingInterval dat voor de betreffende joystick van toepassing is.
    - ThresholdFactor: Single: het drempelpercentage waarbinnen de joystickbewegingen niet worden geregistreerd (alleen in simpele modus). Bijvoorbeeld ThresholdFactor = 0.1, dan moet de joystick minstens 10% worden bewogen voordat er een OnMove-event optreedt. Standaardwaarde = 0.

    Dan zijn er nog een aantal alleen-lezen property's zoals: AbsCenter, AbsMax, AbsMin, Advanced, AxisCount, Axises, ButtonCount en HasPOV.

    Voordelen:
    Geen apart componenten-package nodig.

    Nadelen:
    Geen.

    Bugs:
    Voor zover ik weet zijn er geen bugs. Meldt ze alsjeblieft wel!

    Disclaimer:
    Het component is ongetwijfeld in vele gedaantes via andere componentensets verkrijgbaar, maar zou de wereld er niet stukken beter uitzien met de standaard componentenset van Borland, slechts aangevuld met die van NLDelphi?
    Ik heb de unit zelf getest met slechts een game-pad met 2 assen, 10 knoppen en geen Point-Of-View.
    En ik zet mijn vraagtekens bij de constante JOY_POVCENTERED = -1 (zie MMSystem.pas) die men vervolgens in een Cardinal wil stoppen. Overigens wordt die constante niet gebruikt in deze unit.

    Waar te vinden?
    Op de Subversion server, zie http://svn.nldelphi.com/nldelphi/ope...n/NLDJoystick/

    Veel plezier...
    Last edited by NGLN; 28-Apr-08 at 21:10. Reason: Bijlage verwijderd, link naar SVN toegevoegd
    (Sender as TNLDUser).Signature := 'Groeten van Albert';

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •