Game Develop 1.5.10138 SDK

Le SDK pour la dernière version est en ligne : compilgames.net/code/GameDev … 1510138.7z

Il y a eu des changements au niveau par exemple des singletons qui ont leur méthode d’accès/destruction renommées en GetInstance ( avec une majuscule ) et DestroySingleton.
Vous devez également rajouter un define dans les options de votre projet. Dans Code::Blocks, allez dans Project > Build Options, puis onglet #defines et rajoutez :

GD_EXTENSION_API=__declspec(dllexport)

Faites ceci pour chaque cible de compilation. Pour les cibles Linux, rajoutez de la même façon GD_EXTENSION_API="".
Enfin, concernant les futures fonctionnalités C++ de Game Develop, rajoutez GD_EXTENSION_API entre le mot “class” et le nom de la classe de toute les classes que vous souhaitez rendre disponible aux futurs codes C++. Si vous le faites, il faut alors faire de même pour les deux fonctins CreateGDExtension et DestroyGDExtension au minimum.
Regardez par exemple l’extension TextObject pour avoir un aperçu de ces GD_EXTENSION_API.

Je crois avoir changé depuis la dernière version le define GDE, qui se nomme maintenant GD_IDE_ONLY. Toujours dans les options de votre projet, onglet #defines, changez les “GDE” de chaque cible qui en comporte par “GD_IDE_ONLY”.
Comme d’hab, recompilez entièrement vos extensions.

Plus d’informations sur l’utilisation du SDK : compilgames.net/forum/viewto … =27&t=1437

Ok, mais maintenant Game Develop plante à l’ouverture d’une scène lorsque mon extension Tableau est activée. :frowning:
Cela vient sûrement de ma singleton :

/**

Game Develop - Array Extension
By Victor Levasseur - Copyright (c) 2011

*/

#include "GDL/ExtensionBase.h"
#include "GDL/Version.h"
#include "GDL/RuntimeScene.h"

#include <vector>
#include <map>

class RuntimeScene;

class ArrayManager
{
private:
  // Constructeur/destructeur
  ArrayManager () { }
  ~ArrayManager () { }

public:

  // Fonctions de création et destruction du singleton
  static ArrayManager *getInstance ()
  {
    if (NULL == _singleton)
      {
        _singleton =  new ArrayManager;
      }
    else
      {
      }

    return _singleton;
  }

  static void kill ()
  {
    if (NULL != _singleton)
      {
        delete _singleton;
        _singleton = NULL;
      }
  }

    //Tableaux à 1 dimension
    std::map< Game*, std::map< std::string, std::vector< double > > > arraysNumbers;
    std::map< Game*, std::map< std::string, std::vector< std::string > > > arraysStrings;

    Tableaux à 2 dimensions
    std::map< Game*, std::map< std::string, std::vector< std::vector< double > > > > d2ArraysNumbers;
    std::map< Game*, std::map< std::string, std::vector< std::vector< std::string > > > > d2ArraysStrings;

private:
  // Variables membres
  static ArrayManager *_singleton;
};

Ma variable statique de la singleton est initialisée dans Extension.cpp :

ArrayManager *ArrayManager::_singleton = NULL;

EDIT : Si je désactive l’extension, que j’ouvre la scène, que je réactive l’extension, ça marche.

Et puis, il me dit tout le temps que les chemin de la bibliothèque GDL est incorrect dans le paramétrage du code source C++ dans GD. :frowning:

Est-ce que ce serait possible d’avoir une version debug de GD ?

Tu ne vois pas ce qui pourrait tout faire bugger ? :confused:

Voilà une version de debug de l’éditeur : compilgames.net/dl/debug1510138.7z
Tu devrais pouvoir compiler ton extension en “Debug - Edittime”, et la placer dans le répertoire Extensions de la version Debug.
Ensuite, lance gdb dessus depuis la ligne de commande ( gdb GDEditor.exe ) ( Puis tape r et appuie sur Entrer pour lancer le programme. Tape bt puis Entrer pour avoir une trace lorsque le crash apparait ).

Tu as bien tout recompilé ?
Tu peux aussi m’envoyer l’extension compilée en Debug - Edittime, je pourrai lancer le debugger dessus de mon coté.

Ok, merci, je teste…

GD plante au démarrage lorsqu’on le lance avec gdb (la version debug).

voilà mon extension compilée en Debug - edittime : http://www.mediafire.com/?0xk5dbea4n7v3

Chez moi, ça plante en effet quand j’ouvre une scène avec l’extension activée.
Avec le debugger, le plantage apparait sur cette ligne de code, au niveau du code du debugger :

if ( extension != boost::shared_ptr<ExtensionBase>() && extension->HasDebuggingProperties() )

Le premier test ne peut être à l’origine du plantage. Donc le pointeur intelligent “extension” est valide quand le deuxième test est effectué. Et ce deuxième test n’est qu’un appel à la fonction HasDebuggingProperties() qui doit renvoyer vrai ou faux. Ça m’étonnerait que ce soit cette fonction qui soit en faute. De plus, la trace de debugger affiche ceci :

#0 00000000 0x00000000 in ??() (??:??) #1 004E5931 DebuggerGUI(this=0x1b955870, parent=0x1b88d548, scene_=@0x1b889660) (D:\Florian\Programmation\GameDevelop\IDE\DebuggerGUI.cpp:188) ...

Donc ça veut dire qu’on est même pas entré dans la fonction HasDebuggingProperties().
Tu est bien sûr d’avoir effectué une recompilation entière de tout ton projet ? Refait le au cas où, pour toutes les cibles de compilation.
Tu est bien sûr d’utiliser le bon SDK avec la bonne version de GD ?

Le fait que ça plante à l’appel d’une fonction apparue dans le dernier SDK fait vachement penser à une histoire d’incompatibilité/mixage de versions.

Un message d’erreur ? Si tu tape bt, ça affiche quoi ?

J’ai tout bien recompiler, ça plante toujours, sachant que je n’ai pas redéfini la fonction HasDebuggingProperties().
Il faudrait que tu compiles les sources de mon extension pour voir si ça fait pareil chez toi. (par mp)

En regardant le projet, je vois que tu as défini RELEASE et d’autres trucs qui sont liés au cibles release/development dans les defines de la cible Debug - Edittime. Déjà, ça doit pas aider.
Remplace les par les defines des cibles Debug - Edittime que tu peux trouver dans les autres extensions, à savoir :

GD_IDE_ONLY GD_API=__declspec(dllimport) GD_EXTENSION_API=__declspec(dllexport) DEBUG WINDOWS SFML_DYNAMIC wxUSE_UNICODE=0 __WXDEBUG__ WXUSINGDLL

Ensuite, recompile tout et réessaye.

Malgré ça, je n’ai pas eu problème chez moi : J’ai ouvert le projet, tout recompilé, et aucun soucis en Debug ou Release. :neutral_face:

Si ça marche toujours pas, tu peux essayer de recompiler une extension simple pour Game Develop, genre AES ou TextObject. Si l’extension recompilée marche, remplace les fichiers par les tiens pour voir ce que ça donne.

Ok, pourtant je n’ai pas touché au défines. Mais j’ai seulement mis un chemin complet pour les libs de la sfml dans le linker car il trouve pas les -lsfml…
Si je me sers de la STL, il y a besoin de linker qqch de spécial ?

Si je compile AES, ça bug aussi exactement au même endroit.
J’ai droit à un warning durant la compilation en release

warning: auto-importing has been activated without --enable-auto-import specified on the command line.|

Ca bug toujours au même endroit dans GD.

EDIT : mon pc fait cohabiter deux versions de GNU GCC : 4.3.2 (pour GD) et 4.5.0 (pour Qt), mais j’utilise bien la 4.3.2

(désolé du triple-post)

J’ai trouvé le problème :
GDL.dll dans le dossier de Game Develop → 6,21 Mo / dernière modification : jeudi 3 mars 2011, 14:59:10
GDL.dll dans le dossier IDE/bin/release → 6,00 Mo / dernière modification : dimanche 26 décembre 2010, 22:50:02
GDL.dll dans le dossier Runtime/bin/release → 3,11 Mo / dernière modification : mercredi 22 décembre 2010, 20:13:40

Si j’ai bien compris, le SDK contient une ancienne version de GDL et de libGDL.a.

Ça, c’est normal.

Ça, c’est pas normal.
Je vais essayer de mettre une nouvelle version en ligne d’ici pas trop longtemps avec un nouveau SDK.

En mettant en ligne la nouvelle version, je crois avoir compris le problème.
Vu que j’ai renommé le répertoire du SDK en “GDLSDK”, j’ai oublié de mettre à jour le script qui copie les fichiers : Conclusion, le SDK contenaient des versions plus anciennes des binaires, d’où le problème.

Ok, tu mettra un nouvel SDK quand ?