Utiliser Libwiisprite Pour Dessiner Simplement Sur Sa Wii


kumae
 Share

Messages recommandés

Yop ! Quand on commence à programmer avec la Wii, on utilise surtout les bases du C, style printf("Mon texte est %s.", maChaine);

Passons maintenant au niveau supérieur ! Seulement, pour vous faire une idée, il faut initialiser l'écran vidéo. Voilà le code x) :

  static void *xfb = NULL;		 static GXRModeObj *rmode = NULL;   //---------------------------------------------------------------------------------		 int main(int argc, char **argv) {   //---------------------------------------------------------------------------------   // Initialise the video system		 VIDEO_Init();		 // This function initialises the attached controllers		   WPAD_Init();		  // Obtain the preferred video mode from the system	   // This will correspond to the settings in the Wii menu		 rmode = VIDEO_GetPreferredMode(NULL);		 // Allocate memory for the display in the uncached region		 xfb = MEM_K0_TO_K1(SYS_AllocateFramebuffer(rmode));		 // Initialise the console, required for printf	   console_init(xfb,20,20,rmode->fbWidth,rmode->xfbHeight,rmode->fbWidth*VI_DISPLAY_PIX_SZ);		 // Set up the video registers with the chosen mode		 VIDEO_Configure(rmode);		 // Tell the video hardware where our display memory is		 VIDEO_SetNextFramebuffer(xfb);		 // Make the display visible		 VIDEO_SetBlack(FALSE);		 // Flush the video register changes to the hardware		 VIDEO_Flush();		 // Wait for Video setup to complete		 VIDEO_WaitVSync();		 if(rmode->viTVMode&VI_NON_INTERLACE) VIDEO_WaitVSync();		 // The console understands VT terminal escape codes	   // This positions the cursor on row 2, column 0	   // we can use variables for this with format codes too	   // e.g. printf ("\x1b[%d;%dH", row, column );		 printf("\x1b[2;0H");	   printf("Hello World!");		 while(1) {		  // Call WPAD_ScanPads each loop, this reads the latest controller states	   WPAD_ScanPads();		 // WPAD_ButtonsDown tells us which buttons were pressed in this loop	   // this is a "one shot" state which will not fire again until the button has been released		 u32 pressed = WPAD_ButtonsDown(0);		 // We return to the launcher application via exit	   if ( pressed & WPAD_BUTTON_HOME ) exit(0);		 // Wait for the next frame	   VIDEO_WaitVSync();	   }		 return 0;	   }

=S ! Et ceci seulement pour afficher du texte avec la console =S !

On va s'épargner toutes ces lignes de code pour utiliser libwiisprite =D !

Requis

  • Une Wii avec au préalable le Twilight Hack ou la Chaîne Homebrew
  • Avoir installé devkitPro (si ça n'est pas déjà fait, suivez le très bon tuto d'Ac_K sur le sujet: cliquez ICI.
  • Connaître les bases du C/C++
  • Une cafetière en état de marche ;)

Téléchargement et installation

Téléchargez tout d'abord libwiisprite ici: WiiBrew.

Vous aurez souvent besoin d'aller sur ce wiki, pour télécharger des apps, des outils de développement pour votre Wii, enfin, indispensable x) .

Le lien direct vers libwiisprite: ici.

Une fois dézippé, vous devriez obtenir ça:

screen%20zip.PNG

Vous voyez donc trois dossiers:

  • examples
  • libpng
  • libwiisprite

Ouvrez maintenant le répertoire de devkitPro, et allez dans le répertoire liboGC. Vous verrez (au moins) un dossier include et un dossier lib.

On va faire quelque chose de très simple, on va d'abord installer libwiisprite, ensuite on installera libpng, nécéssaire au fonctionnement de libwiisprite.

L'installation se fait par simple glisser déposer, rien de bien complexe sur ce coup-ci ^^ !

On a donc dit qu'on commençait par libwiisprite, et bien, faisons le ^^ !

screencopie2pp8.png

Copiez maintenant le contenu du dossier include dans le dossier que vous voyez à droite (devkitpro/libogc/include).

Maintenant allez dans le dossier parent (libogc) et ouvrez le dossier lib. Maintenant, copiez le contenu du dossier lib dans le dossier devkitpro/libogc/lib.

Voilà, libwiisprite est installé, enfin, il nous faut maintenant installer libpng x) !

screencopie1nk3.png

Nous procèderons de la même façon.

Copiez maintenant le contenu du dossier include dans le dossier que vous voyez à droite (devkitpro/libogc/include).

Maintenant allez dans le dossier parent (libogc) et ouvrez le dossier lib. Maintenant, copiez le contenu du dossier lib (de libpng) dans le dossier devkitpro/libogc/lib.

Une fois ce copier-collage fait, libwiisprite est installée normalement =) !

Configuration

Il nous faut maintenant configurer le projet.

Pour ce tutoriel, je vais faire comme si vous n'utilisiez pas d'autres libs (comme la très utile lib freetype, permettant d'afficher du texte à partir de fonts).

Je rajouterai une méthode dans l'annexe de ce tutoriel ;) .

La configuration du projet se fait très simplement. Dans le dossier de libwiisprite que vous avez dézippé (le tout premier screenshot), il y a un fichier "Makefile". Copiez le dans le même répertoire que celui de votre projet.

Je vous laisse le soin de vous organiser (créer un dossier projets dans devkitpro, et rajouter un dossier pour chacun de ses projets par exemple), en effet chacun sa méthode ^_^ !

Une fois tout ceci fait, il ne nous reste qu'à créer notre main.cpp.

Créez un dossier source dans votre projet.

Ouvrez Programmer's Notepad, et enregistrez un fichier main.cpp dans le dossier /source que vous avez créée.

screenenregistrersd3.png

Nous allons enfin pouvoir commencer à coder x) !

Code

Ceci étant un programme uniquement pour tester, nous allons nous limiter à l'affichage du sprite et à sa manipulation (zoom, rotation, mouvement). Et bien c'est parti =D !

Tout d'abord il nous faut inclure ces fichiers:

			   #include <stdio.h>						  #include <stdlib.h>						  #include <gccore.h>						  #include <wiiuse/wpad.h>						  #include <fat.h>						  #include <wiisprite.h>

stdio et stdlib sont comme vous le savez les librairies de base de la programmation en C.

gccore, comme vous vous en doutez déjà peut-être, nous servira à utiliser les commandes des base pour la GC (et la Wii).

wiiuse/wpad nous servira au support de la Wiimote, pour gérer la Wiimote tout simplement en fait x) !

fat.h nous servira à lire des données sur la carte SD, très utile !

wiisprite.h, vous vous en doutez peut être aussi, c'est tout simplement l'inclusion de libwiisprite !

Ensuite, il nous faut utiliser le namespace de libwiisprite. Pour cela, tapez:

using namespace wsp;

Cela vous évitera de taper à chaque fois wsp::SetImage(), de plus il sert à éviter les confusions entre d'autres classes qui auraient des méthodes similaires.

Maintenant, il va nous falloir déclarer:

  • Une image, en utilisant Image
  • Un sprite qui utilisera l'image, avec Sprite
  • Un LayerManager, qui répartira sur des couches nos sprites (un peu comme les calques avec Photoshop ou The GIMP)
  • Notre fenêtre de jeu, qui affichera tout ce qu'elle contient, avec GameWindow

Pour les déclarer, rien de plus simple:

GameWindow gwd;	 							Image image; 							   Sprite sprite;

Nous pouvons maintenant passer à notre fonction main().

Tout ce que je vais rajouter comme code se fera maintenant dans la fonction main().

Il nous faut maintenant initialiser notre GameWindow et la libfat.

			   gwd.InitVideo(); 						  fat.InitDefault();

Il nous faut maintenant gérer les calques, sur lesquels nous afficherons nos sprites.

On utilisera la classe LayerManager, pour déclarer un manager, comme ceci:

LayerManager manager(3); // On déclare 3 calques

Ensuite nous allons charger notre image, comme ça:

image.LoadImage("monSprite.png");

Notes à propos de l'image:

  • Ses dimensions doivent forcément, et j'insiste, être des multiples de 4. Sinon vous passerez tout un aprèm' à vous demander pourquoi le programme ne marche pas
  • Si vous le testez avec wiiload, l'image doit être à la racine de la carte SD.
  • Si vous le testez directement sur la chaîne Homebrew (ou avec le Twilight Hack), l'image doit être dans le même répertoire que votre programme

Si vous respectez ces trois "limitations" (ça n'en est pas vraiment ^^") vous ne devriez pas avoir de problèmes avec le chargement d'images, c'est pourquoi je n'ai pas ajouté de gestion d'erreur. Néanmoins si rien ne s'affiche, vous pourrez remplacer le code de chargement par:

if (image.LoadImage("monSprite.png") != IMG_LOAD_ERROR_NONE)exit(0);

Une fois l'image chargée, nous pouvons l'assigner à notre sprite:

<p></p>sprite.SetImage(&image);							  sprite.SetPosition(100,100); // Prend en paramètre X et Y<p></p>

Le code parle de lui-même x) !

Et maintenant, il nous faut ajouter le sprite à notre manager (celui qui gère les calques, vous vous en souvenez ?).

On utilisera la commande Append ici. Il existe d'autres commandes, comme Insert(), qui placera le sprite en premier plan:

manager.Append(&sprite);

Il ne nous reste qu'à initialiser notre Wiimote:

WPAD_Init(); 			</p><p>WPAD_SetDataFormat(WPAD_CHAN_0, WPAD_FMT_BTNS_ACC_IR);

WPAD_CHAN_0 signifie qu'on va utiliser la Wiimote du joueur 1. Le deuxième argument, WPAD_FMT_BTNS_ACC_IR, indique qu'on veut utiliser l'infrarouge.

Voilà ! On a fini de tout déclarer, d'initialiser nos outils ^^ !

Maintenant nous allons commencer à coder:

  • Le mouvement
  • La rotation du sprite
  • La gestion de la Wiimote
  • L'affichage de notre manager
  • La fin de notre boucle

Ca n'est pas très compliqué, vous verrez ^^ !

Commençons !

while(1){</p><p>WPAD_ScanPads();

Tout ce que je dirais maintenant se trouvera bien entendu dans la boucle while(1), qui se trouve elle même dans la fonction main() x) !

WPAD_ScanPads(); sert, à chaque passage de la boucle, à vérifier si on a pas appuyé sur un bouton de la Wiimote.

Maintenant il nous faut créer une variable pressed, qui gèrerait cet appui.

Cette variable sera de type u32, ça remplace le unsigned int, c'est plus rapide ^^ !

u32 pressed = WPAD_ButtonsHeld();

Tout de suite voyons comment la variable s'utilise:

if (pressed & WPAD_BUTTON_HOME) break;

Cette condition gère donc l'appui du bouton HOME, avec lequel on quittera notre programme !

Pour chaque bouton que vous voudrez faire intervenir, il vous faudra utiliser la variable pressed.

Pour connaître les boutons que vous pouvez faire intervenir, je vous conseille de regarder à l'intérieur du fichier wpad.h.

Maintenant initialisons la structure qui gérera l'infrarouge !

On la déclare comme ça:

ir_t ir;						  WPAD_IR(WPAD_CHAN_0, &ir);

On déclare donc une structure ir (pour l'infrarouge) et nous l'initialisons uniquement pour la première télécommande.

Et là, vous allez voir comment l'utilisation de cette structure est facile xD !

libwiisprite nous fournit des fonctions pour bouger notre sprite, et le tourner. Elle nous fournit aussi un correcteur de positionnement du capteur.

Voilà le bloc de code permettant de tourner notre sprite et de le déplacer:

sprite.SetPosition(ir.sx-WSP_POINTER_CORRECTION_X, ir.sy-WSP_POINTER_CORRECTION_Y);						  sprite.Move(-((f32)sprite.GetWidth()/2), -((f32)sprite.GetHeight()/2));						  sprite.SetRotation(ir.angle/2);

ir.sx et ir.sy indique la position X et Y du capteur. WSP_POINTER_CORRECTION_X et WSP_POINTER_CORRECTION_Y sont les correcteurs de position fournis par libwiisprite.

Vous aurez sûrement remarqué f32. En fait ce type de variable remplace unsigned float, comme u32, qui remplace unsigned int.

Tout ce qui est contenu dans le sprite.Move() sert à positionner le sprite au milieu. Les parenthèses avec les - et les f32 peuvent embrouiller.

Pour plus de claireté on peut le penser:

sprite.SetPosition(sprite.GetX() - sprite.GetWidth()/2, sprite.GetY() - sprite.GetHeight()/2);

Néanmoins vous pouvez tout de même conserver le code original, vous n'avez pas forcément besoin de savoir exactement en profondeur ce qu'il y a dans le sprite.Move() ^^ !

Le sprite.SetRotation(ir.angle/2) sert, vous l'aurez compris, à faire tourner notre sprite selon l'angle effectué par la Wiimote.

Si vous voulez comprendre pourquoi on divise l'angle par 2, alors enlevez la division et testez votre programme. Je suis sûr que vous le rediviseriez par 2 vu le résultat obtenu x).

Maintenant, il faut rafraîchir l'écran et dessiner notre sprite avant de refermer la boucle.

On le fait avec ces deux commandes:

manager.Draw(0, 0); // On dessine ce qu'il y a dans notre manager, ici notre sprite			  gwd.Flush(); // On rafraîchit l'écran de jeu			  }// On referme notre while(1)

Et voilà, notre boucle est terminée !

Maintenant on referme notre main, avec un autre petit rafraîchissement avant de finir le programme:

manager.Draw(0, 0); // On dessine ce qu'il y a dans notre manager, ici notre sprite						  gwd.Flush(); // On rafraîchit l'écran de jeu			  return 0;						  }// On referme notre main

Ca y'est ! Enfin ! Nous avons enfin fini de coder notre programme de test ^^ !

Double cliquez sur le make.bat, vous devriez avoir ça:

screen%20console.PNG

Et voilà, la compilation a marché ! Voilà le code source en entier, pour ceux qui n'auraient pas tout compris ou pas suivi x): main.cpp (CPP)

Pour tester votre .elf, copiez dans un dossier que vous nommerez /test et que vous placerez dans votre dossiers /apps (de la Chaîne Homebrew).

N'oubliez pas de mettre l'image à coté, et de bien respecter les dimensions !

Voilà une image de test, déjà redimensionnée et que vous pourrez mettre à coté du .elf pour tester:

logo4wn6.gif

Les dimensions sont ici: 480 ( 120 * 4) et 120 (30 * 4). Le principe est assez simple, mais vital si vous voulez afficher quelque chose !

Et voilà, c'est fini pour ce tutoriel sur l'affichage de sprites en 2D !

Je vous encourage vivement de lire la doc de libwiisprite, réalisée avec doxygen et très bien commentée, ici: doc libwiisprite.

Vous pouvez me poser des questions à mon adresse e-mail ou directement réagir sur ce topic !

Bon codage ^^ !

Au fait, c'est mon premier tuto sur gueux forum, et je me suis assez mal débrouillé avec les options de mise en forme intégrée ^^" ! Veuillez donc m'excuser pour la couleur bleue à un moment (je sais pas comment ca se fait, quand j'édite la couleur est noire x) ), aux grands espaces de lignes ;), et à la mise en forme x) !

EDIT: J'espère que ca pose pas probème d'avoir emprunté le logo de gueux forum pour le test de l'image =°

Modifié par kumae
Lien vers le commentaire
Partager sur d'autres sites

  • 6 months later...

Salut !

Merci pour ce tuto qui est pas mal du tout !!!

Bon j'ai compris pas mal de choses par contre je rencontre un problème...

Lorsque je veux compiler avec Programmer's Notepad il me sort une erreur (enfin plusieurs) voici la principale erreur :

linking ... testwiisprite.elfc:/devkitpro/devkitppc/bin/../lib/gcc/powerpc-gekko/4.2.4/../../../../powerpc-gekko/bin/ld.exe: cannot find -lwiispritecollect2: ld returned 1 exit status

A priori ce serait parce qu'il ne trouve pas la librairie lwiisprite qui est demandée dans le makfile.

Je ne comprends pas trop sachant que j'ai ajouter tous les fichiers comme tu le précise dans le tuto...

Aurais-tu une idée ?

(J'espère que tu reviens de temps en temps sur le forum, ca fait un moment que tu as poster ce tuto :whistling: )

Merci d'avance !

++

Yuka

Euh désolé je viens de voir que qq'un d'autre a eut le meme genre de probleme...

En regardant bien, mes librairies sont donc bien linkées dans le makefile...

Modifié par Yuka
Lien vers le commentaire
Partager sur d'autres sites

Encore moi... :D

Pour plus d'info :

En pensant que le problème venait de mon code ou de mon makefile (ce qui est fort possible) j'ai fait un test avec un des exemples fournis avec libwiisprite.

C'est le tout simple (template), cela donne exactement la même erreur...

Voilà si ca peut aiguiller...

Merci

Lien vers le commentaire
Partager sur d'autres sites

Re moi !

Bon je n'aime pas me laisser faire par un pc récalcitrant... j'ai donc fouiné, testé, etc et j'ai trouvé...

en plus des manip décrites dans le tuto (mettre les lib et inlude au bon endroit) j'ai ajouter les lib de libwiisprite et libpng dans le rep :

C:\devkitPro\devkitPPC\powerpc-gekko\lib

Et plus d'erreur de compilation :oki:

Y'a plus qu'à tester voir si tout fonctionne bien sur la wii ;)

Merci encore pour ce tuto ^^

++

Yuka

Lien vers le commentaire
Partager sur d'autres sites

Bon décidemment, quand ca veut pas, ca veut pas... :encolere12:

Après avoir remis tout comme il fallait cad enlever les lib de libwiisprite du rep C:\devkitPro\devkitPPC\powerpc-gekko\lib et les avoir copier dans libogc\lib\wii, tout fonctionne (compilation ok) sauf si je souhaite utiliser la classe Sprite. Dès que je l'utilise j'ai des erreurs de compilation et là je ne vois pas pourquoi...

Voici mon code :

#include <stdio.h>#include <stdlib.h>#include <gccore.h>#include <wiiuse/wpad.h>//#include <fat.h>#include <wiisprite.h>using namespace wsp; GameWindow gwd;   //Défini notre fenetre de "jeu"Image image;   //Pour charger une imageSprite sprite;   //Pour afficher l'imageint main(int argc, char **argv) { gwd.InitVideo();   //Initialisation de la video// fat.InitDefault();   //Initialisation du repertoire ? LayerManager manager(3); //Gestionnaire de Layout (comme en java)  image.LoadImage("test.png"); //Charge l'image  //---------------- IDEM JAVA dans le fonctionnement -------------- //sprite.SetImage(&image);  //Configure le sprite avec cette image //sprite.SetPosition(100,100); //Configure la position du sprite //manager.Append(&sprite);  //Ajoute le sprite à la fenetre  WPAD_Init();  //Initialisation de la wiimote WPAD_SetDataFormat(WPAD_CHAN_0, WPAD_FMT_BTNS_ACC_IR);  while(1){  WPAD_ScanPads();  //Scan les wiimotes (appui sur boutons etc.)    u32 pressed = WPAD_ButtonsHeld(0); //Variable récupérant la pression des boutons    if(pressed & WPAD_BUTTON_HOME) exit(0);    ir_t ir;  WPAD_IR(WPAD_CHAN_0, &ir);    //permet le mouvement et rotation du sprite  /*sprite.SetPosition(ir.sx-WSP_POINTER_CORRECTION_X, ir.sy-WSP_POINTER_CORRECTION_Y);  sprite.Move(-((f32)sprite.GetWidth()/2), -((f32)sprite.GetHeight()/2));  sprite.SetRotation(ir.angle/2);*/    manager.Draw(0, 0);  //Dessine ce qu'il y a dans le manager  gwd.Flush();   //Rafraichi l'ecran de jeu }  return 0;}

Comme vous pouvez le voir, j'y suis allé par étape... :P

Donc dès que je décommente la ligne

Sprite sprite;

L'erreur surgit... Je ne comprendspas... Voici l'erreur :

inking ... testwiisprite.elfc:/devkitPro/libogc/lib/wii\libwiisprite.a(sprite.o): In function `wsp::Sprite::Draw(float, float) const':/home/chaosteil/code/wii/libwiisprite/source/sprite.cpp:416: undefined reference to `GX_Position2f32'/home/chaosteil/code/wii/libwiisprite/source/sprite.cpp:417: undefined reference to `GX_Color4u8'/home/chaosteil/code/wii/libwiisprite/source/sprite.cpp:418: undefined reference to `GX_TexCoord2f32'/home/chaosteil/code/wii/libwiisprite/source/sprite.cpp:419: undefined reference to `GX_Position2f32'/home/chaosteil/code/wii/libwiisprite/source/sprite.cpp:420: undefined reference to `GX_Color4u8'/home/chaosteil/code/wii/libwiisprite/source/sprite.cpp:421: undefined reference to `GX_TexCoord2f32'/home/chaosteil/code/wii/libwiisprite/source/sprite.cpp:422: undefined reference to `GX_Position2f32'/home/chaosteil/code/wii/libwiisprite/source/sprite.cpp:423: undefined reference to `GX_Color4u8'/home/chaosteil/code/wii/libwiisprite/source/sprite.cpp:424: undefined reference to `GX_TexCoord2f32'/home/chaosteil/code/wii/libwiisprite/source/sprite.cpp:425: undefined reference to `GX_Position2f32'/home/chaosteil/code/wii/libwiisprite/source/sprite.cpp:426: undefined reference to `GX_Color4u8'/home/chaosteil/code/wii/libwiisprite/source/sprite.cpp:427: undefined reference to `GX_TexCoord2f32'/home/chaosteil/code/wii/libwiisprite/source/sprite.cpp:428: undefined reference to `GX_End'/home/chaosteil/code/wii/libwiisprite/source/sprite.cpp:399: undefined reference to `GX_Position2f32'/home/chaosteil/code/wii/libwiisprite/source/sprite.cpp:400: undefined reference to `GX_Color4u8'/home/chaosteil/code/wii/libwiisprite/source/sprite.cpp:401: undefined reference to `GX_TexCoord2f32'/home/chaosteil/code/wii/libwiisprite/source/sprite.cpp:402: undefined reference to `GX_Position2f32'/home/chaosteil/code/wii/libwiisprite/source/sprite.cpp:403: undefined reference to `GX_Color4u8'/home/chaosteil/code/wii/libwiisprite/source/sprite.cpp:404: undefined reference to `GX_TexCoord2f32'/home/chaosteil/code/wii/libwiisprite/source/sprite.cpp:405: undefined reference to `GX_Position2f32'/home/chaosteil/code/wii/libwiisprite/source/sprite.cpp:406: undefined reference to `GX_Color4u8'/home/chaosteil/code/wii/libwiisprite/source/sprite.cpp:407: undefined reference to `GX_TexCoord2f32'/home/chaosteil/code/wii/libwiisprite/source/sprite.cpp:408: undefined reference to `GX_Position2f32'/home/chaosteil/code/wii/libwiisprite/source/sprite.cpp:409: undefined reference to `GX_Color4u8'/home/chaosteil/code/wii/libwiisprite/source/sprite.cpp:410: undefined reference to `GX_TexCoord2f32'/home/chaosteil/code/wii/libwiisprite/source/sprite.cpp:411: undefined reference to `GX_End'collect2: ld returned 1 exit statusmake[1]: *** [/c/devkitPro/examples/wii/testwiisprite/testwiisprite.elf] Error 1"make": *** [build] Error 2

Pouvez-vous m'aider ?

Merci...

Lien vers le commentaire
Partager sur d'autres sites

Si tu lache Notepad Programmer et que tu te fais un Batch avec marqué "Make PAUSE" dedans... T'as toujours les erreurs ?

Sinon le souci dans le makefile peut être l'ordre des libs !

Salut !

Merci pour ta réponse ;)

J'ai testé (enfin je crois avoir bien fait) et tjs les erreurs... Vu que je ne suis pas sûr de moi pour le batch voici ce que j'ai testé :

makepause

et

make -f makefilepause

dans les deux cas g les erreurs...

Sinon j'ai tenté d'inverser les libs dans le makefile mais rien n'y fait, voici le mekefile d'origine :

#---------------------------------------------------------------------------------# Clear the implicit built in rules#---------------------------------------------------------------------------------.SUFFIXES:#---------------------------------------------------------------------------------ifeq ($(strip $(DEVKITPPC)),)$(error "Please set DEVKITPPC in your environment. export DEVKITPPC=<path to>devkitPPC")endifinclude $(DEVKITPPC)/wii_rules#---------------------------------------------------------------------------------# TARGET is the name of the output# BUILD is the directory where object files & intermediate files will be placed# SOURCES is a list of directories containing source code# INCLUDES is a list of directories containing extra header files#---------------------------------------------------------------------------------TARGET  := $(notdir $(CURDIR))BUILD  := buildSOURCES  := sourceDATA  := data  INCLUDES :=#---------------------------------------------------------------------------------# options for code generation#---------------------------------------------------------------------------------CFLAGS = -g -O2 -mrvl -Wall $(MACHDEP) $(INCLUDE) -I$(DEVKITPPC)/local/includeCXXFLAGS = $(CFLAGS)LDFLAGS = -g $(MACHDEP) -mrvl -Wl,-Map,$(notdir [email="$@).map"]$@).map[/email]#---------------------------------------------------------------------------------# any extra libraries we wish to link with the project#---------------------------------------------------------------------------------LIBS :=  -lwiisprite -lpng -lz -lwiiuse -lbte -lfat -logc -lm#---------------------------------------------------------------------------------# list of directories containing libraries, this must be the top level containing# include and lib#---------------------------------------------------------------------------------LIBDIRS := #---------------------------------------------------------------------------------# no real need to edit anything past this point unless you need to add additional# rules for different file extensions#---------------------------------------------------------------------------------ifneq ($(BUILD),$(notdir $(CURDIR)))#---------------------------------------------------------------------------------export OUTPUT := $(CURDIR)/$(TARGET)export VPATH := $(foreach dir,$(SOURCES),$(CURDIR)/$(dir)) \	 $(foreach dir,$(DATA),$(CURDIR)/$(dir))export DEPSDIR := $(CURDIR)/$(BUILD)#---------------------------------------------------------------------------------# automatically build a list of object files for our project#---------------------------------------------------------------------------------CFILES  := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.c)))CPPFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.cpp)))sFILES  := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.s)))SFILES  := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.S)))BINFILES := $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/*.*)))#---------------------------------------------------------------------------------# use CXX for linking C++ projects, CC for standard C#---------------------------------------------------------------------------------ifeq ($(strip $(CPPFILES)),) export LD := $(CC)else export LD := $(CXX)endifexport OFILES := $(addsuffix .o,$(BINFILES)) \	 $(CPPFILES:.cpp=.o) $(CFILES:.c=.o) \	 $(sFILES:.s=.o) $(SFILES:.S=.o)#---------------------------------------------------------------------------------# build a list of include paths#---------------------------------------------------------------------------------export INCLUDE := $(foreach dir,$(INCLUDES), -iquote $(CURDIR)/$(dir)) \	 $(foreach dir,$(LIBDIRS),-I$(dir)/include) \	 -I$(CURDIR)/$(BUILD) \	 -I$(LIBOGC_INC)#---------------------------------------------------------------------------------# build a list of library paths#---------------------------------------------------------------------------------export LIBPATHS := $(foreach dir,$(LIBDIRS),-L$(dir)/lib) \	 -L$(LIBOGC_LIB) -L$(DEVKITPPC)/local/libexport OUTPUT := $(CURDIR)/$(TARGET).PHONY: $(BUILD) clean#---------------------------------------------------------------------------------$(BUILD): @[ -d $@ ] || mkdir -p $@ @make --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile#---------------------------------------------------------------------------------clean: @echo clean ... @rm -fr $(BUILD) $(OUTPUT).elf $(OUTPUT).dol#---------------------------------------------------------------------------------run: psoload $(TARGET).dol#---------------------------------------------------------------------------------reload: psoload -r $(TARGET).dol#---------------------------------------------------------------------------------elseDEPENDS := $(OFILES:.o=.d)#---------------------------------------------------------------------------------# main targets#---------------------------------------------------------------------------------$(OUTPUT).dol: $(OUTPUT).elf$(OUTPUT).elf: $(OFILES)#---------------------------------------------------------------------------------# This rule links in binary data with the .jpg extension#---------------------------------------------------------------------------------%.jpg.o : %.jpg#--------------------------------------------------------------------------------- @echo $(notdir $<) $(bin2o)-include $(DEPENDS)#---------------------------------------------------------------------------------endif#---------------------------------------------------------------------------------

Je dois dire que je suiis un peu pommé...

Merci pour ton aide

++

Yuka

Lien vers le commentaire
Partager sur d'autres sites

Bon a priori il y a une solution déjà donnée dans un autre sujet (que je n'avais pas vu bien évidemment) la voici :

Voici la solution apportée par Chaosteil lui même... En gros, recompiler les sources (lien vers les sources fournit)

Hey,

This is a simple error because of the new binaries of libogc. I'd recommend you compile libwiisprite again from the sources ;)

Here is a link: http://chaosteil.googlepages.com/libwiispr...b-source.tar.gz

It should immediately work after you compile the sources yourself. You can also tell everybody in the forum that the sources are also now on the wiki, so they are able to do with them whatever they want ;)

Happy coding,

Chaosteil

Je vais la tester...

Lien vers le commentaire
Partager sur d'autres sites

Bon bah voilà...

5 min après...

Ca fonctionnne !

Merci pour ton aide Ac_K, il fallait donc bien recompiler libwiisprite... bah j'aurais pu chercher longtemps...

++

Yuka

Lien vers le commentaire
Partager sur d'autres sites

  • 11 months later...
Bon bah voilà...

5 min après...

Ca fonctionnne !

Merci pour ton aide Ac_K, il fallait donc bien recompiler libwiisprite... bah j'aurais pu chercher longtemps...

++

Yuka

J'avais exactement le même probl^me que yuka mais j'arrive pas à compiler les sources... j'utilise la ligne de commande de windows je fais un make et j'obtiens des .o et des .d

Qu'est-ce que je dois faire après?

Lien vers le commentaire
Partager sur d'autres sites

  • 11 months later...

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
 Share