Nenfëa Auxiliaire ArchipelModeur
Nombre de messages : 34 Age : 40 Date d'inscription : 04/04/2007
| Sujet: [Basique/Moyen] Déplacement continu d'un objet Sam 04 Aoû 2007, 17:12 | |
| Type de script : --- Objet --- (difficulté basique/moyenne) Utilité : ce script montre comment déplacer un objet de manière continue (et non pas d'un seul coup comme avec les fonctions intégrées dans Oblivion). Mode d'emploi :- Spoiler:
Le script doit être attaché à votre objet. Quand vous souhaitez lancer le déplacement, vous devez mettre à jour ses variable minZ, maxZ et deplacement, le script se chargera du reste. Supposons que votre objet ait la référence ObjRef, le code pour lancer le déplacement serait : - Code:
-
Set ObjRef.minZ to XXX1 Set ObjRef.maxZ to XXX2 Set ObjRef.deplacement to XXX3 Une vitesse négative fera descendre l'objet. Explications :- Spoiler:
En pratique, il s'agit en fait d'une série de petits mouvement donnant une impression de continuité. On ajoute à chaque pas une petite valeur à la position de l'objet selon l'axe Z. Limitations :- Spoiler:
Avec des déplacements trop rapides, on perd l'impression de continuité : un délai de 0.1 secondes entre chaque mise à jour n'est pas suffisant. Il est possible de gérer le déplacement frame par frame, mais le coût en mémoire vive sera plus élevé.
Attention également, si le joueur peut interagir avec l'objet, à ne pas réveiller ce cher Havoc.
Cette méthode est également prévue pour des déplacements relativement courts, et ne fonctionne que quand le script est actif (c'est à dire que le joueur se trouve dans la même cellule que l'objet). - Code:
-
; Script permettant de déplacer un objet de manière continue selon un ou plusieurs axe(s) donné(s) (dans l'exemple présent, il s'agit seulement de l'axe Z)
Scn nenDeplacementScript
Float deplacement ; Vitesse de déplacement en unités de distance par seconde Float maxZ ; Position la plus haute autorisée pour l'objet Float minZ ; Position la plus basse autorisée pour l'objet
Float timer ; Compteur de temps Float posZ ; Position selon l'axe Z
Begin GameMode ; Si le déplacement est nul, on n'a rien à faire if ( deplacement == 0 ) Return endif
; Sinon, on déplace l'objet tous les dixièmes de secondes Set timer to ( timer + GetSecondsPassed ) if ( timer > 0.1 ) Set posZ to GetPos z ; Obtention de la position actuelle Set posZ to ( posZ + deplacement*timer ) ; Obtention de la position suivante if ( posZ > maxZ ) ; Si on dépasse la hauteur autorisée... SetPos z maxZ ; ... on place l'objet à la hauteur maximale... Set deplacement to 0 ; ... et on arrête le déplacement. elseif ( posZ < minZ ) ; Si on est sous la hauteur permise... SetPos z minZ ; ... on place l'objet à la hauteur minimale... Set deplacement to 0 ; ... et on arrête le déplacement. else ; Si on est dans les limites autorisées... SetPos z posZ ; ... on place l'objet à sa prochaine position. endif Set timer to 0 ; On remet le timer à zéro pour le prochain pas de temps Endif End | |
|