Plattformunabhängigen Zugriff auf den JoyWarrior

Dies ist das deutsche Forum für alle Themen um den JoyWarrior. Beiträge bitte nur in Deutsch.

Moderator: Guido Körber

Post Reply
Elektron
Posts: 19
Joined: Tue Sep 30, 2008 12:57 am

Plattformunabhängigen Zugriff auf den JoyWarrior

Post by Elektron »

Hier im Forum gab es einige Fragen bezüglich dem Zugriff auf den JoyWarrior auf verschiedenen Plattformen, insbesondere auch wie man auf die x/y/z-Werte direkt zugreifen kann. Abhilfe schafft hier eine Spielebibliothek, die die für das jeweilige Betriebssystem spezifischen Dinge kapselt. Mit Hilfe dieser Bibliothek lassen sich auch kommerzielle Projekte verwirklichen, denn sie ist "Giftware". Das nachfolgende Programm ist unter Linux, MacOS und Windows ohne Veränderungen im Code kompilierbar.

Die jeweiligen Installationsanweisungen finden sich auf der Homepage. Die Menschen dort im Forum sind sehr hilfsbereit und beantworten Fragen gerne: http://www.allegro.cc

Ich habe für das kleine Programm die Version 4.2 unter Ubuntu Lucid Lynx verwendet. Hier ein kurzes Programm, welches den ersten angeschlossenen Joystick erkennt, prüft, ob er ein analoges Signal liefern kann und die Messwerte dann in Form von Balken auf dem Bildschirm ausgibt. Sicherlich lässt sich das Programm noch bis zu einem beliebigen Grad optimieren, es soll hier nur als "Minibeispiel" dienen:

Code: Select all

#include <stdio.h>
#include <allegro.h>

int main()
{
    int i;
    int midx, midy;

    allegro_init();
    install_keyboard();
    install_mouse();
    install_timer();
    install_joystick(JOY_TYPE_AUTODETECT);

    printf("%d joysticks found.\n", num_joysticks);

    if(!num_joysticks)
    {
        printf("Please connect a joystick.\n");
        exit(0);
    }

    for(i=0;i<num_joysticks;i++)
        if(joy[i].flags&JOYFLAG_ANALOGUE)
            printf("Joystick %d provides full analogue input.\n", i+1);

    set_color_depth(desktop_color_depth());
    set_gfx_mode(GFX_AUTODETECT_WINDOWED, 300, 300, 0, 0);

    BITMAP* backbuffer=create_bitmap(SCREEN_W, SCREEN_H);
    midx=SCREEN_W/2;
    midy=SCREEN_H/2;

    while(!key[KEY_ESC])
    {
        poll_joystick();
        clear_to_color(backbuffer, makecol(0,0,0));

        rect(backbuffer, midx, midy-5, midx+joy[0].stick[0].axis[0].pos, midy+5, makecol(255,0,0));
        rect(backbuffer, midx-5, midy, midx+5, midy+joy[0].stick[0].axis[1].pos, makecol(0,255,0));
        rect(backbuffer, midx, 280, midx+joy[0].stick[1].axis[0].pos, 290, makecol(0,0,255));

        textprintf_ex(backbuffer, font, 10, 10, makecol(255, 255, 255), -1, "x-Axis: %d", joy[0].stick[0].axis[0].pos);
        textprintf_ex(backbuffer, font, 10, 20, makecol(255, 255, 255), -1, "y-Axis: %d", joy[0].stick[0].axis[1].pos);
        textprintf_ex(backbuffer, font, 10, 30, makecol(255, 255, 255), -1, "z-Axis: %d", joy[0].stick[1].axis[0].pos);

        blit(backbuffer, screen, 0, 0, 0, 0, SCREEN_W, SCREEN_H);
    }

    return 0;
}
Angehängt zwei Screenshots.
Attachments
Bildschirmfoto-1.png
Bildschirmfoto-1.png (5.45 KiB) Viewed 9378 times
Bildschirmfoto.png
Bildschirmfoto.png (5.66 KiB) Viewed 9378 times
User avatar
Christoph Jung
Posts: 670
Joined: Sun Oct 08, 2006 3:43 pm
Location: Germany / Berlin
Contact:

Re: Plattformunabhängigen Zugriff auf den JoyWarrior

Post by Christoph Jung »

Sieht interessant aus. Ich werd mir das bei Zeiten mal anschauen.
Abteilung: Softwareentwicklung
Folge uns auf Twitter
Follow us on twitter
Elektron
Posts: 19
Joined: Tue Sep 30, 2008 12:57 am

Re: Plattformunabhängigen Zugriff auf den JoyWarrior

Post by Elektron »

Hallo Herr Jung,

hier noch ein kleines Video dazu:
http://www.youtube.com/watch?v=d9Y1bEbf07c
Elektron
Posts: 19
Joined: Tue Sep 30, 2008 12:57 am

Re: Plattformunabhängigen Zugriff auf den JoyWarrior

Post by Elektron »

Nochmal ein Nachtrag,

ich habe das gleiche Programm unter Windows kompiliert und ausgeführt. Dabei ist mir aufgefallen, dass unter Linux (Ubuntu 10.04) der JoyWarrior als Joystick mit zwei Sticks erkannt wird. Folgende Belegung:

Stick 1, 1. Achse: x
Stick 1, 2. Achse: y
Stick 2, 1. Achse: z

Unter Windows XP wird der Joystick mit nur einem dreiachsigen Stick erkannt, also

Stick 1, 1. Achse: x
Stick 1, 2. Achse: y
Stick 1, 3. Achse: z
User avatar
Christoph Jung
Posts: 670
Joined: Sun Oct 08, 2006 3:43 pm
Location: Germany / Berlin
Contact:

Re: Plattformunabhängigen Zugriff auf den JoyWarrior

Post by Christoph Jung »

Evtl. kennt Linux keine 3-Achsen JoySticks und macht daraus 2. Ich kenn mich nicht sonderlich gut mit Linux aus.
Abteilung: Softwareentwicklung
Folge uns auf Twitter
Follow us on twitter
Post Reply