:: PlayerAdvance.org ::  

Précédent   :: PlayerAdvance.org :: > :: Développement Amateur :: > Tutoriels

Publicité

Réponse
 
Outils de la discussion Modes d'affichage
Vieux 16/08/2008, 15h49   #1
Cortes48
Modérateur
 
Date d'inscription: 28/02/2007
Localisation: Grenoble
Messages: 576
Par défaut Dévelloper sur Wii [Annexe] WPAD

Développer sur Wii [Annexe] WPAD



Avec ce tuto vous allez devenir un maitre de la wiimote.



1 - Les Boutons

Voilà un petit exemple sur l'utilisation des bouton de la wiimote


Code PHP:
#include <stdio.h>
#include <stdlib.h>
#include <gccore.h>
#include <wiiuse/wpad.h>
#include <fat.h>
#include <string.h>
#include <unistd.h>
#include <sys/dir.h>
#include <malloc.h>
#include <ogcsys.h>
#include <errno.h>
#include <network.h>

static void *xfb NULL;
static 
GXRModeObj *rmode NULL;

int main(int argcchar **argv) {

    
VIDEO_Init();
    
PAD_Init();
    
fatInitDefault();
    
fatEnableReadAhead(PI_INTERNAL_SD6432768/512);
    
srand (time (NULL));
    
    switch(
VIDEO_GetCurrentTvMode()) {
        case 
VI_NTSC:
            
rmode = &TVNtsc480IntDf;
            break;
        case 
VI_PAL:
            
rmode = &TVPal528IntDf;
            break;
        case 
VI_MPAL:
            
rmode = &TVMpal480IntDf;
            break;
        default:
            
rmode = &TVNtsc480IntDf;
            break;
    }

    
xfb MEM_K0_TO_K1(SYS_AllocateFramebuffer(rmode));
    
console_init(xfb,20,20,rmode->fbWidth,rmode->xfbHeight,rmode->fbWidth*VI_DISPLAY_PIX_SZ);
    
    
VIDEO_Configure(rmode);
    
VIDEO_SetNextFramebuffer(xfb);
    
VIDEO_SetBlack(FALSE);
    
VIDEO_Flush();
    
VIDEO_WaitVSync();
    if(
rmode->viTVMode&VI_NON_INTERLACEVIDEO_WaitVSync();

    
WPAD_Init();//Initialisation des wiimote
    
    
while(1) {
        
        
WPAD_ScanPads();//Obtention du statut des wiimote
        
        
u32 held WPAD_ButtonsHeld(WPAD_CHAN_0);
        
        
        if(
held WPAD_BUTTON_HOME)printf("Home Held");
        if(
held WPAD_BUTTON_A)printf("A Held");
        if(
held WPAD_BUTTON_B)printf("B Held");
        if(
held WPAD_BUTTON_UP)printf("Home Held");
        if(
held WPAD_BUTTON_DOWN)printf("Down Held");

        
        
        

        
VIDEO_WaitVSync();
    }

    return 
0;

Le debut sert juste à initialisé une console pour pouvoir utilisé la fonction printf.

Voici nos lignes de code qui nous interesse :
  • WPAD_Init Cette fonction initialise les wiimote.
  • WPAD_ScanPads Cette fonction nous permet d'obtenir le statut des wiimotes .
  • u32 held = WPAD_ButtonsHeld(WPAD_CHAN_0) Ici nous créons une variable held qui contiendra tous les bouton enfoncé (Held) de la wiimote WPAD_CHAN_0 qui est la wiimote du channel 0 donc la wiimote numero 1.
  • if(held & WPAD_BUTTON_HOME)printf("Home Held"); Ici rien de compliqué sauf ce "&".

Je vous explique la dernière ligne de la liste.

La valeur held correspond à tout les bouton de statut held (donc appuyé) de la wiimote.La valeur WPAD_BUTTON_HOME correspond au bouton Home.
Aprés je ne peux pas plus vous expliqué car cela demanderai de connaitre l' héxadécimal et ce tuto n'est pas la pour vous éxpliqué cela.
Le & n'est pas un comme un &&.

Voila un exemple:

Code:
1111 && 1111 = true
1111 && 1011 = false

1010 &  1111=1010
1100 & 1010 =1000
Si vous avez bien compris, le && est absolu,il compare les deux grandeur d'un coup et il dis soit c'est vrai (true=1) soit c'est faux (false=0).
Alors que le & compare byte par byte et donne plusieur résultat dans un même nombre.

Maintenant je vais vous donné la liste de tous les bouton de la wiimote et de ses extensions

Code:
WPAD_BUTTON_2						
WPAD_BUTTON_1						
WPAD_BUTTON_B						
WPAD_BUTTON_A						
WPAD_BUTTON_MINUS					
WPAD_BUTTON_HOME					
WPAD_BUTTON_LEFT					
WPAD_BUTTON_RIGHT					
WPAD_BUTTON_DOWN					
WPAD_BUTTON_UP						
WPAD_BUTTON_PLUS					
WPAD_BUTTON_UNKNOWN					
									
WPAD_NUNCHUK_BUTTON_Z				
WPAD_NUNCHUK_BUTTON_C				
									
WPAD_CLASSIC_BUTTON_UP				
WPAD_CLASSIC_BUTTON_LEFT			
WPAD_CLASSIC_BUTTON_ZR				
WPAD_CLASSIC_BUTTON_X				
WPAD_CLASSIC_BUTTON_A				
WPAD_CLASSIC_BUTTON_Y				
WPAD_CLASSIC_BUTTON_B				
WPAD_CLASSIC_BUTTON_ZL				
WPAD_CLASSIC_BUTTON_FULL_R			
WPAD_CLASSIC_BUTTON_PLUS			
WPAD_CLASSIC_BUTTON_HOME			
WPAD_CLASSIC_BUTTON_MINUS			
WPAD_CLASSIC_BUTTON_FULL_L			
WPAD_CLASSIC_BUTTON_DOWN			
WPAD_CLASSIC_BUTTON_RIGHT
			
WPAD_GUITAR_HERO_3_BUTTON_STRUM_UP	
WPAD_GUITAR_HERO_3_BUTTON_YELLOW	
WPAD_GUITAR_HERO_3_BUTTON_GREEN		
WPAD_GUITAR_HERO_3_BUTTON_BLUE		
WPAD_GUITAR_HERO_3_BUTTON_RED		
WPAD_GUITAR_HERO_3_BUTTON_ORANGE	
WPAD_GUITAR_HERO_3_BUTTON_PLUS		
WPAD_GUITAR_HERO_3_BUTTON_MINUS		
WPAD_GUITAR_HERO_3_BUTTON_STRUM_DOWN
C'est pas trop dure . WPAD_GUITAR_HERO est bien sûr la guitare de Guitar Hero 3.

2 - IR

Maintenant nous allons voire le système de pointage infrarouge de la wiimote.
Tout d'abord nous devons dire à la wiimote que nous voulons ses données infrarouge grace à la fonction :
Code:
s32 WPAD_SetDataFormat(s32 chan, s32 fmt);
Voilà ce que nous devons faire :

Code:
WPAD_Init();
WPAD_SetDataFormat(WPAD_CHAN_0, WPAD_FMT_BTNS_ACC_IR);
La fonction prends en paramètre le channel de la wiimote puis les donné que nous voulons.
Voilà toutes les possibilité pour le deuxième argument :
  • WPAD_FMT_BTNS Pour seulement les boutons.
  • WPAD_FMT_BTNS_ACC Pour seulement le capteur de mouvement.
  • WPAD_FMT_BTNS_ACC_IR Pour le capteur de mouvement et l' infra-rouge.

Ensuite nous devons déclaré une structure qui va contenir toutes les donné infrarouge:
Code:
ir_t ir;

Et ensuite dans notre boucle while principale ,nous devons mettre :
Code:
WPAD_IR(WPAD_CHAN_0, &ir);
Cela va enregistré dans la structure ir les donné infra-rouge de la wiimote de la channel 0.

Ensuite vous pouvez accédé au donné par :

Code:
ir.sx;    //Pour la cordonnée X
ir.sy;    //Pour la cordonnée Y
Et voilà pour l'IR.

3 - Accéléromètre

L'accéléromètre n'est pas la chose la plus difficile à utilisé mais le faite d'y pensé donne mal à la tête puisque il nous oblige à imaginé des mouvement dans les 3 dimensions (x,y,z).

Voici un petits schéma de wiibrew bien sympathique:

Les valeurs de la wiimote ne sont pas ses coordonné dans l'espace mais ses inclinaisons.
Si vous inclinez la wiimote vers la gauche, x sera plus grand que zero.
Si vous inclinez la wiimote vers la droite , x sera plus petit que zero.

Pareil pour Y. Mais pour Z, sa valeur est égale à l'accération de la wiimote sur l'axe bleu. Z n'est jamais égale à zero puisque la gravité lui donne une force.

Pour l'utilisé, c'est pareil que l'IR :

Code:
WPAD_Init();
WPAD_SetDataFormat(WPAD_CHAN_0, WPAD_FMT_BTNS_ACC_IR);
Pour l'initialisation.

Code:
vec3b_t accel;
La structure pour les données.


Code:
WPAD_Accel(WPAD_CHAN_0, &accel);
Et l'obtention des données.

Pour l'utilisé:
Code:
accel.x
accel.y
accel.z
4 - Le Pad Gamecube

Le Pad Gamecube s'utilise de la même façon que la wiimote.
Il vous suffit de supprimé le "W" de "WPAD" pour faire "PAD".
Voici les bouttons du Pad Gamecube :
Code:
PAD_BUTTON_LEFT	
PAD_BUTTON_RIGHT
PAD_BUTTON_DOWN	
PAD_BUTTON_UP	
PAD_TRIGGER_Z	
PAD_TRIGGER_R	
PAD_TRIGGER_L	
PAD_BUTTON_A	
PAD_BUTTON_B	
PAD_BUTTON_X	
PAD_BUTTON_Y	
PAD_BUTTON_MENU	
PAD_BUTTON_START
5 - Vibration

Sur wii ,le seul périphérique ayant un module de vibration ,est la wiimote.

Pour faire une vibration rien de plus simple
Code:
WPAD_Rumble(WPAD_CHAN_0,1);
Et pour le arrêté la vibration :
Code:
WPAD_Rumble(WPAD_CHAN_0,0);
Trés simple

6 - Joystick

Seul le nunchuk et la manette classic ont des joystick.

Pour accédé au donné du joystick selon votre périphérique(nunchuk ou classic)
C'est un vrai parcoure du combattant

Un WPAD contient comme donné une les boutons,les info IR,les info de l'accélérateur et aussi les info d'une extension (nunchuk,classic,GH3).
Cette extension contient une structure d'info sur le nunchuk,la mannette classic et la guitare GH3.
Le nunchuk contient une structure joystick alors que la manette classic en contient 2 (elle a deux joysticks).

D'abord nous devons récuperé les donné du joystick pour un nunchuk, par exemple :

Code:
expansion_t exp;
WPAD_Expansion(WPAD_CHAN_0,&exp);
On récupère les données comme pour l' accéléromètre ou l' IR.

Pour accédé au donné du nunchuk
Code:
exp.nunchuk.js.ang
Nous avons l'angle du nunchuk.
Si le joystick est en haut ang=0
Si le joystick est à droite ang=90
Si le joystick est en bas ang=180
Si le joystick est à gauche ang=270

Pour la manette classic :
Code:
exp.classic.ljs.ang   //Joystick de Gauche
exp.classic.rjs.ang   //Joystick de Droite

--------------------------------------------------------------------------------------

Et voilà , le tuto est terminé.
Si vous avez des question, n'hésitez pas

Dernière modification par Cortes48 ; 16/08/2008 à 21h01.
Cortes48 est déconnecté   Réponse avec citation

Publicité

Vieux 16/08/2008, 18h31   #2
archipel
Kikoolol
 
Date d'inscription: 22/01/2007
Messages: 2 847
Par défaut

Je n'ai rien lu mais ca m'a l'air très complet

Mais change moi ce develloper en DEVELOPPER plz
__________________
DevBlog qui a aboutit à Aanaa
archipel est déconnecté   Réponse avec citation
Vieux 16/08/2008, 18h51   #3
Foxy
Membre confirmé
 
Date d'inscription: 10/11/2005
Messages: 366
Par défaut

Tu devrais préciser aussi que PAD_Init(); sert a initialiser le controleur GameCube, et qu'en cas de plantage, on peut appuyer sur Z pour revenir à la HBC
__________________
Mes releases persos, etc...
Foxy est déconnecté   Réponse avec citation
Vieux 16/08/2008, 19h20   #4
Cortes48
Modérateur
 
Date d'inscription: 28/02/2007
Localisation: Grenoble
Messages: 576
Par défaut

Voilà c'est fait , si vous avez des suggestion dites les
Cortes48 est déconnecté   Réponse avec citation
Vieux 16/08/2008, 21h01   #5
Cortes48
Modérateur
 
Date d'inscription: 28/02/2007
Localisation: Grenoble
Messages: 576
Par défaut

J'ai rajouté le joystick et la vibration
Cortes48 est déconnecté   Réponse avec citation
Réponse

Liens sociaux

Publicité



Utilisateurs regardant la discussion actuelle : 1 (0 membre(s) et 1 invité(s))
 
Outils de la discussion
Modes d'affichage

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Navigation rapide

Discussions similaires
Discussion Auteur Forum Réponses Dernier message
NDS Installation et fonctions du EZ Flash V & l'Expansion Pack 3in1 heaveN. Articles et Tutos 74 12/07/2010 22h37
Wii DDR sur Wii Quentin [WII] Divers 6 08/12/2008 12h40
Wii Wii sur moniteur d'ordi M@cZér0 Matériel 52 02/12/2008 20h36
Wii Sur 01net.com, votez Wii !!! CyBeRCeD [WII] Divers 33 26/02/2007 18h50


Fuseau horaire GMT +2. Il est actuellement 07h12.


Édité par : vBulletin® version 3.7.2
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd. Tous droits réservés.
Version française #16 par l'association vBulletin francophone
Design par Ass-Itch, DJP et Dr.Vince