Game Develop 2.1.10904 SDK

Le SDK pour la dernière version est en ligne : viewtopic.php?f=27&t=3401

J’ai mis à jour wxWidgets sous Windows ( pour passer à Unicode ) et Linux ( juste histoire d’avoir une version à jour ) :
Pour la compilation sous Windows, retéléchargez la bibliothèque précompilée grâce aux liens de la page précédente.
Pour Linux, téléchargez directement la version 2.9.4 depuis le site de wxWidgets : wxwidgets.org/downloads/ et compilez là comme indiqué dans le fichier d’aide ( Un simple ./configure, make, make install )

Pensez bien à faire une recompilation complète des extensions.

Faut-il changer des defines dans les projets d’extensions (comme wxUNICODE) ? et changer l’encodage des fichiers sources et wxs ?

Je n’arrive pas à compiler mes extensions, j’ai ça comme erreurs :

In file included from ..\..\ExtLibs\wxwidgets\include/wx/defs.h:3369:0, from ..\..\ExtLibs\wxwidgets\include/wx/colour.h:15, from D:\Développement\GD2\GDLSDK\Extensions\Skeleton-Extension\Bone.h:35, from D:\Développement\GD2\GDLSDK\Extensions\Skeleton-Extension\Skeleton.h:27, from D:\Développement\GD2\GDLSDK\Extensions\Skeleton-Extension\Skeleton.cpp:21: ..\..\ExtLibs\wxwidgets\include/wx/msw/winundef.h: In function 'HWND__* CreateDialog(HINSTANCE__*, const TCHAR*, HWND__*, BOOL (*)(HWND__*, UINT, WPARAM, LPARAM))': ..\..\ExtLibs\wxwidgets\include/wx/msw/winundef.h:39:20: error: cannot convert 'const TCHAR*' to 'const WCHAR*' for argument '2' to 'HWND__* CreateDialogParamW(HINSTANCE__*, const WCHAR*, HWND__*, BOOL (*)(HWND__*, UINT, WPARAM, LPARAM), LPARAM)' ..\..\ExtLibs\wxwidgets\include/wx/msw/winundef.h: In function 'HFONT__* CreateFont(int, int, int, int, int, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, const TCHAR*)': ..\..\ExtLibs\wxwidgets\include/wx/msw/winundef.h:70:48: error: cannot convert 'const TCHAR*' to 'const WCHAR*' for argument '14' to 'HFONT__* CreateFontW(int, int, int, int, int, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, const WCHAR*)' ..\..\ExtLibs\wxwidgets\include/wx/msw/winundef.h: In function 'HWND__* CreateWindow(const TCHAR*, const TCHAR*, DWORD, int, int, int, int, HWND__*, HMENU__*, HINSTANCE__*, void*)': ..\..\ExtLibs\wxwidgets\include/wx/msw/winundef.h:95:20: error: cannot convert 'const TCHAR*' to 'const WCHAR*' for argument '2' to 'HWND__* CreateWindowExW(DWORD, const WCHAR*, const WCHAR*, DWORD, int, int, int, int, HWND__*, HMENU__*, HINSTANCE__*, void*)' ..\..\ExtLibs\wxwidgets\include/wx/msw/winundef.h: In function 'HMENU__* LoadMenu(HINSTANCE__*, const TCHAR*)': ..\..\ExtLibs\wxwidgets\include/wx/msw/winundef.h:112:44: error: cannot convert 'const TCHAR*' to 'const WCHAR*' for argument '2' to 'HMENU__* LoadMenuW(HINSTANCE__*, const WCHAR*)' ..\..\ExtLibs\wxwidgets\include/wx/msw/winundef.h: In function 'HWND__* FindText(FINDREPLACEA*)': ..\..\ExtLibs\wxwidgets\include/wx/msw/winundef.h:127:43: error: cannot convert 'FINDREPLACEA*' to 'FINDREPLACEW*' for argument '1' to 'HWND__* FindTextW(FINDREPLACEW*)' ..\..\ExtLibs\wxwidgets\include/wx/msw/winundef.h: In function 'HICON__* LoadIcon(HINSTANCE__*, const TCHAR*)': ..\..\ExtLibs\wxwidgets\include/wx/msw/winundef.h:318:51: error: cannot convert 'const TCHAR*' to 'const WCHAR*' for argument '2' to 'HICON__* LoadIconW(HINSTANCE__*, const WCHAR*)' ..\..\ExtLibs\wxwidgets\include/wx/msw/winundef.h: In function 'HBITMAP__* LoadBitmap(HINSTANCE__*, const TCHAR*)': ..\..\ExtLibs\wxwidgets\include/wx/msw/winundef.h:331:55: error: cannot convert 'const TCHAR*' to 'const WCHAR*' for argument '2' to 'HBITMAP__* LoadBitmapW(HINSTANCE__*, const WCHAR*)'

EDIT :
J’arrive à compiler toutes les extensions sauf mon extension squelette.
Peux-tu jeter un coup d’oeil aux dernière source de l’extension et les tester chez toi ? https://github.com/victorlevasseur/Skeleton-Extension

EDIT 2:
Finalement, j’ai réussi à corriger le problème. Il fallait inclure <wx/wx.h> au tout début comme tu l’avais indiqué dans d’autres extensions.

Désolé pour le triple post, mais maintenant, mon objet squelette ne s’affiche plus sur la scène, il n’est pas correctement placé (reste à 0;0) et sa taille ne correspond pas à ce que GetWidth() et GetHeight() renvoient. Peux-tu regarder ce qui cloche ici : https://github.com/victorlevasseur/Skeleton-Extension

Ok, je regarde ça dès que possible.
Sinon il faut modifier en effet un define pour mettre wxUSE_UNICODE=1. Normalement, pas besoin de changer l’encodage des fichiers sources.
Pour l’erreur de compilation, le truc c’est que certains fichiers d’entête ( windows.h essentiellement ) ajoutent des macros absoluments horribles en redéfinissant des trucs comme CreateDialog ou GetObject, ce qui fait que parfois ça met le bazar soit dans les sources de GD ou des extensions ( A ce moment, un #undef resout le problème ), voir dans wxWidgets. La solution est alors souvent de changer de position ou ajouter un fichier d’entête de wxWidgets.

En fait, Draw (et DrawEdittime) ne sont pas appelées. On peut en déduire que c’est comme si elles n’avaient pas été redéfinies dans ma classe SkeletonObject.

J’ai pas encore regardé, mais il est possible que l’objet n’ait pas été instancié correctement et soit resté un objet de base ( ou alors dans le meme ordre d’idée, un coup de slicing lors d’une copie en mémoire ).

??? :laughing:
En tout, aucun objet squelette ne s’affiche, sa taille n’est pas prise en compte et il reste à 0;0. Par contre, l’objet est correctement défini dans la mémoire puisque je peux l’éditer entièrement (les animations et les os sont bien présents dans l’éditeur de l’objet).
Je penche plutôt à ce que certaines méthode n’ont pas été redéfinie alors qu’elles le sont bien dans le code. :open_mouth:

Encore désolé pour le double-post.

J’ai fait quelques investigations. Il semblerai que l’objet Squelette ne soit pas copié. Donc, l’objet marche bien dans l’éditeur d’objet car l’objet est créé avec la fonction CreateSkeletonObject(std::string name). Par contre, les instances de l’objet sur la scène ne sont pas créées. En effet, l’objet est placé sur la scène (on peut le sélectionné) mais fait une taille de 0;0. Par contre, le constructeur de copie et l’opérateur d’assignement ne sont jamais appelés (j’ai fait les tests avec wxLogError), donc les instances de l’objet squelette placées sur la scène ne sont que des Object de base.
Je te laisse chercher comment corriger ce bug, ça fait 2 jours que je compare l’objet Son avec l’objet squelette… :frowning:

EDIT : Même Clone() n’est pas appelé.

Je sais !
La méthode Clone que tout objet doit rédefinir est maintenant const ( normal, elle ne modifie pas l’objet à laquelle on l’applique ). Il faut donc que tu rajoute ce const à la méthode clone de ton objet.
En l’absence du const, le compilateur considère que la méthode définit dans l’objet de base n’est pas rédéfinie, et appelle donc clone de l’objet de base, ce qui donne au final un objet du mauvais type.

EDIT : Concernant le slicing ( en.wikipedia.org/wiki/Object_slicing ), la méthode Clone est en fait justement une fonction assez courante quand on utilise l’héritage et qu’on veut faire des copies d’objets.

:mrgreen:

Merci beaucoup, c’était juste ça…
J’avais eu beau regarder 20 fois les autres extensions, je n’avais pas vu cela (ni même avec un comparateur de fichiers :unamused: ).
Bon, eh bien, problème résolu, désolé pour le dérangement.

C’est moi aussi qui aurait du signaler ça, surtout que c’est exactement le genre de détails dont j’ai souffert une fois ou deux. J’essayerai de prévenir la prochaine fois quand il y a des trucs d’aussi importants à modifier.