Salut, j'utilise irrlicht 1.6 et j'ai décidé il y a pas longtemps d'y mettre de la physique, pour cela j'ai newton 1.53 et le wrapper IrrNewt. Je fait world = createWorld(device); tout va bien ça compile nickel et quand le programme démarre, ça ferme ferme en disant windows doit fermer le programme... A coups de débugger j'ai vu que le pointeur sur le monde newton (world->getNewtonWorld()) est égal à NULL et le pointeur du device contenu dans le monde est aussi NULL (world->getIrrlichtDevice() ).
PS: J'ai vu qu'il ya avait un sujet sur le même problème mais même en le lisant et relisant j'ai pas réussi à le régler.
Hors ligne
Je ne connais pas vraiment le wrap IrrNewt. Mais quand tu fais world = createWorld(device), ton paramètre device est-il valide ?
Hors ligne
ben oui (en tout cas le pointeur et pas nul), avant ça marchait et j'ai pas touché au device depuis
Hors ligne
Il faut être méfiant quant un débug affiche NULL ou éronné. Seules les variables utilisées au moment du crash et les constantes sont valides. Sinon sans plus de code on pourra pas trop te dire ...
Hors ligne
T6D98U :
... avant ça marchait et j'ai pas touché au device depuis
bizarre quand même, tu as bien du modifier quelque chose qui fait que cela plante aujourd'hui.
Pour que la creation du world Newton, c'est super simple:
NewtonWorld *nWorld = NewtonCreate(NULL, NULL); c'est tout, ce que doit faire l'instruction 'create' du wrapper. A toi de traquer
le bug, ou efectivement, fournis un bout de code, cela aidera à trouver avec toi le soucis
Hors ligne
J'ai vu que newton dans irrnewt ne tien pas à grand chose dans l'initialisation (j'ai fouiné dans les sources) le code est on ne peut plus simple:
les noms sont assez explicites je suppose sauf pour "materials = *initMaterials();" qui est en fait juste une fonctions qui me créée des materiels: c'est la première utilisation du monde newton par irrnewt et ça plante.
PS: le NULL je l'ai vu avec un débuggage à "cout << " parce que le débugger de code::blocks ne permet effectivement pas de voir sa valeur (mais très utile pour trouver où ça plante )
Hors ligne
Ca ne vient donc surement pas de Newton .... Je ne vois pas le rapport entre un material et la physique. Sinon quel est le type de materials? tu as l'air d'y stocker plusieurs materials ... c'est un tableau de SMaterials ?
Hors ligne
Les materials sont des materiels newton (enfin pas exactement, une classe à moi), en effet j'en stocke plein. Le prog plante au moment où je créé le IMaterial avec IMaterial(data.world->getNewtonWorld()) dans ma classe (une utilisation du world c'est tout), le problème vient du fait que mon pointeur est nul mais je ne sais pas pourquoi. Et même si je vire cette ligne ça plante quand même quand j'essaye d'utiliser le world plus tard.
PS:les matériaux ont un rapport direct avec la physique, c'est les propriétés de l'objet comme l'élasticité et tout le reste
Hors ligne
dacord ! je pige mieu ! mais ta variable "materials" n'est pas une class !! Sinon comment tu l'initialise avec un opérateur "=" ??
désolé je ne connais pas Newton mais je ne demande qu'a comprendre. Ceci-dit ça reste restrein au niveau du code que tu nous donne. j'aimerai au moin voire initMaterials() en détails
Dernière modification par TUpac (23-11-2009 17:58:58)
Hors ligne
bon je débale le source de materials je sais pas si tu comprendras (pour l'op "=" ya un constructeur de copie généré auto ):
.h:
.cpp:
mais ce code n'a aucun rapport avec mon problème: ce n'est qu'une utilisation du monde newton
Hors ligne
Je vais peut-être dire une bêtise, n'ayant pas le reste de ton code, mais tu écris
et plus loin on retrouve
La première ligne ne devrait-elle pas être plutôt ?
non ?
Hors ligne
Salut, en fait la première ligne se trouve dans le constructeur de la classe Data (dont je créé un objet data), j'aurais pu écrire "this->device" mais ça revient au même. C'est vrai que en ne sachant pas ça ça pourrait sembler être une erreur
Hors ligne
ok c'est vrai que ça parrait bizard quant on est pas prévenu
sinon je ne vois pas. Ton debug ne te donne pas la ligne précise du plantage dans initMaterials?
est-ce une erreur de lecture mémoire? d'écriture? autre?
Hors ligne
La ligne c'est
et je voterai pour l'erreur de mémoire étant donné que on passe un pointeur sur newtonWorld à IMaterial qui vaut NULL
Je rappelle que le problème de vien pas de cette fonction mais de la valeur du pointeur aussi il faudrait voir si le problème vient de la compilation ou autre de irrNewt.
Hors ligne
Ok je pense comprendre. Tu utilise data dans le constructeur parent
IMaterial(data.world->getNewtonWorld())
hors le constructeur parent repique ses paramètres sur le constructeur fils et non sur les variables courantes.
essaye ça:
Material::Material(bool colid,double soft,double elast,float staticf,float kineticf, LeTypeDedata *data) : IMaterial(data->world->getNewtonWorld())
ou carrément::
Material::Material(bool colid,double soft,double elast,float staticf,float kineticf, NewtonWorld *world) : IMaterial(world)
modifie ton appel du contructeur en conséquence.
a+
Hors ligne
Mouais sauf que data est global et le data.world vaut NULL même avant l'appel à initMaterial et tout ce qui se trouve dedans, j'ai quand même essayé ton code et ça marche toujours pas (je vois pas pourquoi ça marcherait car on passe un pointeur sur NULL au constructeur): c'est le pointeur qui est nul je sais pas comment faire pour qu'il ne le soit plus, je tourne en rond c'est horrible
Hors ligne
t'as pas un moyen de tester ton NewtonWorld un peu avant le crash pour voir si il est bien en place? genre utiliser une methode du world pour voir si ton debuger s'arete dessus... Au moin tu serai fixé
Hors ligne
J'ai testé ce que tu m'as dit, j'ai utilisé "NewtonDestroy" qui est censée certes détruire le monde mais elle plante au débuggage, encore une fois parce que le pointeur est nul.
Hors ligne
J'y connais rien en NEwton mais ça veut dire que le world n'est pas initialisé correctement ...
Hors ligne
C'est ce que je me suis dit mais même le device qu'il COPIE(car il ne fait que copier) est NULL alors qu'il part d'un IrrlichtDevice normal. J'arrive vraiment pas à comprendre ce qu'il f..., on dirait que les variables retent uniquement dans le constructeur. (le constructeur arrive à utiliser la device car il lui fait écrire des choses dans la console)
Dernière modification par T6D98U (24-11-2009 17:58:41)
Hors ligne
Il va falloire y passer !! nous filer ton code
Hors ligne
la question n'est pas le mien (j'ai quand même vérifié en créant une app avec juste l'initialisation même pas la boucle de rendu ni rien ça plante toujours). mais bon voilà:
data.h
window.h
window.cpp
window2.cpp
et le main:
Il y a pas mal de types indéfinis ici mais si je mettais toutes les sources je me retrouverai à devoir vous copier au moins 50 fichiers.
Dernière modification par T6D98U (24-11-2009 19:02:04)
Hors ligne
Ouai mais ce serait plus simple avec un zip qui contient tout. C'est plus facile de débuger avec un IDE que visuellement sur un forum. En plus j'ai déjà téléchargé les lib de newton pour un autre post
Hors ligne
voilà http://www.megaupload.com/?d=IFGL5SFI j'espère que j'ai rien oublié
Hors ligne
Options | Liens officiels | Caractéristiques | Statistiques | Communauté |
---|---|---|---|---|
Corrections |
|
xhtml 1.0 css 2.1 Propulsé par FluxBB Traduit par FluxBB.fr |
882 membres 1429 sujets 11119 messages |
Dernier membre inscrit: LiseBuisson96 91 invités en ligne Aucun membre connecté RSS Feed |