MacreaCity - Forums Macreators: Rotation + Mouvement D'un Object. - MacreaCity - Forums Macreators

Aller au contenu

Règles

Si votre message ne concerne pas le jeu multijoueurs, merci de poster votre message dans un forum approprié :
http://forum.macreat...hp?showforum=37
Page 1 sur 1
  • Vous ne pouvez pas commencer un sujet
  • Vous ne pouvez pas répondre à ce sujet

Rotation + Mouvement D'un Object. Noter : -----

#1 L'utilisateur est hors-ligne   Mel-Wery Icône

  • Squatteur
  • Groupe : MacreaCitizen
  • Messages : 16
  • Inscrit(e) : 11-février 08

Posté 21 décembre 2008 - 03:53

Bonjour, je voudrais faire une porte de garage qui s'ouvre comme celle du garage de la mère de CJ.

Mon script:

Au début:
Code
new idGarage;


Puis:
Code
idGarage = CreateObject(5043, 2054.82, -1694.7, 14.04, 0, 0, 0);


Puis:
Code
public OnPlayerCommandText(playerid, cmdtext[])
    
     {
         if(strcmp(cmdtext, "/o1", true) == 0)
       {
         if (IsPlayerAdmin(playerid))
         {
             MoveObject(idGarage, 2053.75, -1694.7, 15.50, 1);
             SetObjectRot(idGarage, 0, 90, 0);
             SendClientMessage(playerid, COLOR_RED, "Ouverture du garage.");
    
             return 0;
         }
       }
    
     //------------------------------------------------------------------------------
    
         if(strcmp(cmdtext, "/f1", true) == 0)
       {
         if (IsPlayerAdmin(playerid))
         {
             MoveObject(idGarage, 2053.75, -1694.7, 15.50, 1);
             SetObjectRot(idGarage, 0, -90, 0);
             SendClientMessage(playerid, COLOR_RED, "Fermeture du garage.");
    
             return 0;
         }
       }
         return 1;
     }


Le problème c'est que la porte fait un 90° d'un seul coup au lieu de le faire progressivement. Puis, j'aimerais quelle revienne automatiquement et non en tapant une autre commande.

J'ai lu qu'il faudrait faire un timer mais je ne sais pas comment faire.
Et pour le retour, j'ai pensé à ça:

Code
Wait 10000;
          MoveObject(idGarage, 2053.75, -1694.7, 15.50, 1);
              SetObjectRot(idGarage, 0, -90, 0);


Comment je doit faire svp ?
Mel-Wery
0

#2 L'utilisateur est hors-ligne   StAfF MaN Icône

  • [StAfF]MaN (Admin serveur), [StAfF] un jour, [StAfF] Toujours
  • PipPipPipPip
  • Groupe : MacreaCitizen
  • Messages : 1 397
  • Inscrit(e) : 22-novembre 06

Posté 23 décembre 2008 - 12:33

Salut !! Alors ce que tu demande est assez compliqué, enfin, non mais c'est ta rotation qui est assez dure a réaliser, dans ta commande tu devrait faire un timer, qui tout les 200ms (millisecondes) faire s'orienter (rotation de ta porte) de 1 a 2° pour arriver au final a ce que ta porte fasse un mouvement réaliste (attention, car cette opération pourra demander pas mal de ressource au script, qui pourrait entrainer des crash du serveur) Pour les timer c'est super simple, un forward et c'est réglé ^^ (voila tout du moins pour ce que tu as a mettre en haut de ton script tongue.gif )
Panique pas je vais te faire un exemple wink.gif (tu utilisera le même procédé pour ta fermeture automatique de porte)

dans
Code
<a_samp>

forward Timer();


Ensuite, tu va dans ton code :

(au passage l'identation de ton code est pas terrible ^^ c'est peut être le forum qui fait ça... )

Code
public OnPlayerCommandText(playerid, cmdtext[])
{
   if(strcmp(cmdtext, "/o1", true) == 0)
   {
       if (IsPlayerAdmin(playerid))
       {
           MoveObject(idGarage, 2053.75, -1694.7, 15.50, 1);
           SetObjectRot(idGarage, 0, 90, 0);
           SendClientMessage(playerid, COLOR_RED, "Ouverture du garage.");
           SetTimer("Timer", 200, 1);  // Donc la on appel le Timer qui s'appelle "Timer", qui dure 200 millisecondes ( 0.2 seconde) et qui se répète 1 fois (normale ^^, on veut 1 montée )
           return 0; // ici je mettrai return 1;
       }
    }


suite de ton code mais tu n'en aura plus besoin ^^

Après, tu créé un public :

Code
public Timer()
{
   SetObjectRot(idGarage, 0, +2, 0);
}


Faut essayer ^^ En faite, si tu analyse le script, a chaque fois que le Timer passe 1 seconde, l'objet tourne de +2°, après c'est a toi de rendre l'animation fluide.
Pour l'arrêter c'est pas dure :

Code
public Timer()
{
   SetObjectRot(idGarage, 0, +2, 0);
   if(SetObjectRot(idGarage, 0, 90, 0))
   {
      KillTimer(Timer);
   }
   return 1;
}


Peut être que ça marchera ^^

Et a partir de la tu peut te faire un autre Timer (tu peut l'appeler comme tu veut en plus) qui se déclenche quand l'objet est a 90° et tu le fait ce détruire, avec le Killtimer quand l'objet est de nouveau en bas ^^

StAfF un jour, StAfF toujours !!
~*=| Scripteur Pawn HTML et CSS |=*~
0

Page 1 sur 1
  • Vous ne pouvez pas commencer un sujet
  • Vous ne pouvez pas répondre à ce sujet

1 utilisateur(s) en train de lire ce sujet
0 membre(s), 1 invité(s), 0 utilisateur(s) anonyme(s)