See site in english Voir le site en francais
Website skin:
home  download  forum  link  contact

Welcome, Guest. Please login or register.
Did you miss your activation email?

Login with username, password and session length

Author Topic: [C++] Animations avec parents  (Read 1694 times)

0 Members and 1 Guest are viewing this topic.

Offline siriusfett

  • Legend
  • ******
  • Posts: 968
  • Country: France fr
  • Karma: 5
14 September 2007, 00:53:26
En travaillant sur mes deux spacecrafts, j'ai remarqué que les animations avec parents posés problèmes si ont souhaitées
avoir deux vessels identiques dans le même scn, je sais que l'on peut dupliquer les fichiers, mais je suis sûr qu'il existe
une solution à ce problème en C++ (no matter si tu me lis :) )



Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 24
  • Criiii Crii Crii
Reply #1 - 14 September 2007, 01:09:05
Essaye ça ...
Dans ta classe dans private tu déclares ta fonction...
N'oublie pas de la virer de public:

Code: [Select]
private:
void DefineAnimations (void);

Puis, dans un cpp bien visible juste sous les include de ce cpp par exemple, défini le constructeur comme ça ...
N'oublie pas de changer le nom par TonAddonrienqu'àtoi

Code: [Select]
TonAddon::TonAddon (OBJHANDLE hObj, int fmodel)
: VESSEL2 (hObj, fmodel)
{
DefineAnimations ();
}

Comme ça ta fonction ne sera plus confondue par les multiples instances de ton Vessel.



Message modifié ( 14-09-2007 01:42 )

Pic

Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15407
  • Karma: 256
  • Hein, quoi !?
    • FsPassengers
Reply #2 - 14 September 2007, 04:27:27
private ou public ca reste dans l'instance de ta classe, la seul différence c'est
les droit d'accès, private n'est accessible QUE de l'intérieur de ta classe.

Je dirais que ton problème ce situe au niveau des handles et variables
de tes animations, si elle sont globale ou static par exemple elle sont
partagée par toutes les instance de tes vaisseaux. (commune à toutes
les copies de ton vaisseau)

solution:

Declarer ces variables dans le header de ta classe pour qu'elle soient
instanciée et pas partagée par les multiples instances.
Voir exemples dans la SDK.

Attention:

Une fonction de classe même private peut très bien appeller des variables globales
ca ne regle pas le problème.


PRIVATE OU PUBLIC ?


Code: [Select]
class toutou
{
public:
    int VariablePublic;
    void FonctionPublic(void);
private:
    int VariablePrivate;
    void FonctionPrivate(void);
}

toutou MaClasse;

MaClasse.VariablePublic=10;  // OK
MaClasse.VariablePrivate=10;  // ERREUR COMPILE PAS DE DROIT D'ACCES !

Les privates ne sont accessible que depuis des fonctions de la classe:

Code: [Select]
void toutou::toutou()
{
     VariablePrivate=10; //OK
     FonctionPrivate();    //OK
}

Ca permet de faire des classes pour les "copains" ou des SDK ou seul les objets
(variables/fonctions) que tu veux sont accessibles aux publique. (limite les risques
que les gens tripotent dans des trucs à risque)

Dan



Message modifié ( 14-09-2007 04:30 )


Offline no matter

  • Legend
  • ******
  • Posts: 2826
  • Karma: 1
Reply #3 - 14 September 2007, 04:39:38
Quote
En travaillant sur mes deux spacecrafts, j'ai remarqué que les animations avec parents posés problèmes si ont
souhaitées avoir deux vessels identiques dans le même scn, je sais que l'on peut dupliquer les fichiers, mais je suis
sûr qu'il existe une solution à ce problème en C++ (no matter si tu me lis  )
Dan l'explique et je pense que tu as utilisé des static pour tes animations avec parents.

Dans le style:
Code: [Select]
static UINT ROTgrp1[5] = {25,26,27,28,29};
static MGROUP_ROTATE ROT1 (0, ROTgrp1, 5, _V(-1.973,0.757,0.555), _V(1,-0.35,0) ,(45*RAD));
//etc...

Tu peux utiliser new au lieu de static pour tes anim avec parents:
Code: [Select]
static UINT PANELgrp16[1] = {37};
PANEL16= new MGROUP_ROTATE (0, PANELgrp16, 1, _V(1.972,-0.759,0.555), _V(-0.346,-0.933,0),(90*RAD));
static UINT PANELgrp17[1] = {38};
PANEL17= new MGROUP_ROTATE (0, PANELgrp17, 1, _V(1.977,-0.759,-1.108), _V(-0.346,-0.933,0),(-180*RAD));
Regardes les animation du DeltaGlider, tu comprendras mieux comment çà fonctionne.

et n'oublie pas de détruire chaque new:
Code: [Select]
MonAddon::~MonAddon ()
{
delete PANEL16,PANEL17;
}



Message modifié ( 14-09-2007 04:41 )

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

no matter.

Offline siriusfett

  • Legend
  • ******
  • Posts: 968
  • Country: France fr
  • Karma: 5
Reply #4 - 14 September 2007, 11:15:23
Merci pour toutes ces infos, effectivement j'utilise des static :wor:

static UINT Panneaux1Grp[1] = {76};
static MGROUP_ROTATE Panneaux1 (0, Panneaux1Grp, 1,_V(-1.772,-0.074,-5.778), _V(0,0,-1), (float)(90*RAD));


Je vais suivre ton conseil et regardé l'exemple du DG...



Message modifié ( 14-09-2007 11:15 )

« Last Edit: 14 September 2007, 11:15:23 by siriusfett »