0 Members and 1 Guest are viewing this topic.
( .... ) static UINT PorteProbeFive_Groups[1] = {GRP_ANIM_PorteProbe05}; static MGROUP_ROTATE PorteProbe_05 (0, PorteProbeFive_Groups, 1, _V(6.189, 1.446, 26.748 ), _V(0,0,1), (float)(85.5*RAD)); Portes[DOOR_PROBE_5].anim_Porte = CreateAnimation (0.0); AddAnimationComponent (Portes[DOOR_PROBE_5].anim_Porte, 0, 1, &PorteProbe_05);( .... )
void Irridium::RevertdAnimationPortes (int QuellePorte){ Portes[QuellePorte].dPorte_status = ((Portes[QuellePorte].dPorte_status == Portes[QuellePorte].dPorte_CLOSED || Portes[QuellePorte].dPorte_status == Portes[QuellePorte].dPorte_CLOSING ) ? Portes[QuellePorte].dPorte_OPENING : Portes[QuellePorte].dPorte_CLOSING );}
for (int porte = DOOR_PROBE_1; porte < FIN_PORTES; porte++) if (Portes[porte].dPorte_status >= Portes[porte].dPorte_CLOSING) { double da = oapiGetSimStep() * Portes[porte].dPorte_SPEED; if (Portes[porte].dPorte_status == Portes[porte].dPorte_CLOSING) { // retractation if (Portes[porte].dAnimPorte_proc > 0.0) Portes[porte].dAnimPorte_proc = max (0.0, Portes[porte].dAnimPorte_proc-da); else Portes[porte].dPorte_status = Portes[porte].dPorte_CLOSED; } else { // déploiement if (Portes[porte].dAnimPorte_proc < 1.0) Portes[porte].dAnimPorte_proc = min (1.0, Portes[porte].dAnimPorte_proc+da); else Portes[porte].dPorte_status = Portes[porte].dPorte_OPEN; } SetAnimation (Portes[porte].anim_Porte, Portes[porte].dAnimPorte_proc); }
case OAPI_KEY_NUMPAD3: { RevertdAnimationPortes(DOOR_PROBE_3); } return 1;
case OAPI_KEY_NUMPAD6: { RevertdAnimationPortes(DOOR_PROBE_6); } return 1;
> < < <<<< >>>>>
picto a écrit:Dan, si tu lis ça ...
_V(0,-1.0,6.5), _V(1,0,0), (float)(2*PI));anim_gear = CreateAnimation (0.0);parent = AddAnimationComponent (anim_gear, 0, 1, &gear);anim_wheel = CreateAnimation (0.0);AddAnimationComponent (anim_wheel, 0, 1, wheel, parent);}The gear and wheel rotations are defined by the MGROUP_ROTATE variables “gear” and“wheel”. Note that in this case [b]“wheel” is not defined static, since reference point and axis willbe modified by the parent. Therefore, “wheel” must be defined as a data member of theMyVessel class. Since “wheel” is allocated dynamically[/b], don’t forget to de-allocate it withMyVessel::~MyVessel(){...delete wheel;...}
// DANS LA CLASSE:MGROUP_ROTATE *nosewheeltourne;
static UINT NosewheelGrpTourne[1] = {GRP_ANIMnosewheels}; nosewheeltourne = new MGROUP_ROTATE (MshIndex,NosewheelGrpTourne,1,_V(0,-2.316,8.474),_V(1,0,0),(float)(2*PI));
delete(nosewheeltourne);
if(nosewheeltourne!=NULL) // assure que le pointeur est valide { delete(nosewheeltourne); // si oui, le desalloue nosewheeltourne=NULL; // et le met a NULL (donc invalide pour nos tests) }
#define SafeDelete(a) { if (a) {delete a; a = NULL; }} //safely delete a pointer, and set it to NULL. ...
SafeDelete(nosewheeltourne);
picto a écrit:Il y a quand même un truc qui me surprend.Tu me dis : " A éviter comme la peste "Et : " Fais quand même !"C'est bizarre ...
#define SafeDelete(a) { if (a) {delete a; a = NULL; }}
SafeDelete(nosewheeltourne)
if(a!=NULL) // assure que le pointeur est valide { delete(a); // si oui, le desalloue a=NULL; // et le met a NULL (donc invalide pour nos tests) }
0A9B62A5 mov eax,dword ptr [ebp-10h] 0A9B62A8 cmp dword ptr [eax+1EAEF8h],0 // compare le pointeur avec zéro (NULL)0A9B62AF je 0A9B62DC // si égal n'execute pas, saute a l'adresse apres le delete0A9B62B1 mov eax,dword ptr [ebp-10h] 0A9B62B4 mov ecx,dword ptr [eax+1EAEF8h] 0A9B62BA mov dword ptr [ebp-0F7Ch],ecx 0A9B62C0 mov edx,dword ptr [ebp-0F7Ch] 0A9B62C6 push edx 0A9B62C7 call operator delete (0A978613h) // sinon appelle le delete0A9B62CC add esp,4 0A9B62CF mov eax,dword ptr [ebp-10h] 0A9B62D2 mov dword ptr [eax+1EAEF8h],0 // et mets le pointeur a zéro0A9B62DC push 48h
for (int porte = DOOR_PROBE_1; porte < FIN_PORTES; porte++) if (Portes[porte].dPorte_status >= Portes[porte].dPorte_CLOSING) { double da = oapiGetSimStep() * Portes[porte].dPorte_SPEED; if (Portes[porte].dPorte_status == Portes[porte].dPorte_CLOSING) { // retractation if (Portes[porte].dAnimPorte_proc > 0.0) Portes[porte].dAnimPorte_proc = max (0.0, Portes[porte].dAnimPorte_proc-da); else Portes[porte].dPorte_status = Portes[porte].dPorte_CLOSED; } else { // déploiement if (Portes[porte].dAnimPorte_proc < 1.0) Portes[porte].dAnimPorte_proc = min (1.0, Portes[porte].dAnimPorte_proc+da); else Portes[porte].dPorte_status = Portes[porte].dPorte_OPEN; } SetAnimation (Portes[porte].anim_Porte, Portes[porte].dAnimPorte_proc); }
char ChaineResultante[20]={0};for(I=0;I<20;I++){ sprintf(ChaineResultante,"Panneau%i",I);}
double da = oapiGetSimStep() * Portes[porte].dPorte_SPEED;
double da = Data.dSimStep* Portes[porte].dPorte_SPEED;
"define" ou enum impossible
un utilitaire qui CREE du code