User Tag List

Page 1 of 3 1 2 3 LastLast
Results 1 to 10 of 24

Thread: Mouvement plateforme custom basé sur le timer

  1. #1
    Clickteam Clickteam
    Olivier's Avatar
    Join Date
    Jun 2006
    Posts
    3,000
    Mentioned
    9 Post(s)
    Tagged
    1 Thread(s)

    Mouvement plateforme custom basé sur le timer

    Dans ma quête pour une application stable et fluide sur (presque) chaque ordinateur je m'efforce de développer une application à framerate variable. Pour un résultat optimum le framerate de l'application est réglé sur le taux de rafraîchissement de l'écran. Ceci est fait en entrant une valeur élevée pour le framerate et en activant V-Sync.
    L'exemple fourni comprend un mouvement plateforme custom utilisant l'extension Move Safely 2. Ce mouvement est basé sur l'article Bullet-Time écrit par Dines sur le forum anglais, donc un grand merci à lui.
    Chaque changement de valeur appliqué aux variables utilisées par le mouvement est multiplié par TimeDelta. Cette Valeur Globale est le résultat du calcul du temps passé depuis la dernière boucle. Ainsi le mouvement devrait tourner à la même vitesse quelquesoit le framerate de l'application. C'est secondaire, mais le tout est également multiplié par une Valeur Globale appellée TimeScale qui produit l'effet Bullet-Time.

    Mon problème est que ce mouvement ne fonctionne pas correctement avec un framerate très bas/élevé. Ça déconne de façon subtile mais visible. Par exemple plus le framerate est bas, moins l'objet saute haut. Et avec un framerate élevé l'objet reste collé au plafond pendant un court instant avant de retomber. Même chose pour un mur situé à gauche de l'objet, mais pas avec un mur situé à droite de l'objet! Étrange.

    L'exemple est brièvement commenté, mais si vous avez lu l'article de Dines vous devriez tout comprendre. Toutes les commandes sont expliquées à l'écran:
    http://www.clickteam.com/epicenter/ubbthreads.php?ubb=download&Number=3170

    Donc si vous lancez l'application telle quelle, tout devrait bien fonctionner. Vous pouvez courrir et sauter sans problème car le framerate de l'application devrait osciller entre 60 et 85 fps (le taux de rafraîchissement de votre moniteur en Hz).
    Maintenant si vous désactivez V-Sync l'application tournera aussi vite que votre ordinateur le permet. Si vous obtenez un framerate supérieur à 200 vous devriez rencontrer les problèmes que j'ai décrit plus haut. Pas de panique ceci ne va pas endommager votre ordinateur! [img]/epicentre/images/%%GRAEMLIN_URL%%/smile.gif[/img]

    Si vous avez une idée de ce qui peut bien se passer merci de m'en faire part. Je suis à peu près certain d'avoir fait des erreurs de codage car rester collé à droite d'un mur et pas à gauche c'est vraiment (pas) marrant.
    Mais la chose la plus important est pourquoi rester collé avec un framerate élevé? Cela a-t-il quelquechose à voir avec les événements qui sont eux parcourus plus vite? (les événements ne sont pas basés sur le timer)
    Même si vous ne pouvez pas m'aider, l'exemple est peut-être intéressant si vous pratiquez les mouvements custom. [img]/epicentre/images/%%GRAEMLIN_URL%%/wink.gif[/img]

  2. #2
    Clicker Multimedia Fusion 2

    Join Date
    Oct 2007
    Location
    reims
    Posts
    634
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    Re: Mouvement plateforme custom basé sur le timer

    Bonsoir Olivier,

    Je viens de regarder ton exemple, c'est bizarre je remarque une différence de code entre ton déplacement droit ou gauche pour la gestion de ton actif est ce volontaire de ta part ? Pour le reste désolé de ne pouvoir t'aider mais là ça me dépasse, surtout sur certaines lignes. Je pense bien à un truc, mais ça m'étonnerait que cela puisse t'aider, un plafonnement du frame rate s'il serait trop rapide ou trop bas selon une fourchette, mais bon peut-être une idée stupide. Enfin j'aurai au moins fait la démarche de t'aider...

  3. #3
    Clicker Multimedia Fusion 2

    Join Date
    Oct 2007
    Location
    reims
    Posts
    634
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    Re: Mouvement plateforme custom basé sur le timer

    Apparemment oui,

  4. #4
    No Products Registered

    Join Date
    Aug 2008
    Posts
    5
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    Re: Mouvement plateforme custom basé sur le timer

    Oh, des maths [img]/epicentre/images/%%GRAEMLIN_URL%%/wink.gif[/img]

    J'ai pas pu lire ton fichier mais n'oublie pas que lorsque tu a une accélération, ton mouvement dépend globalement de dt mais avec un terme en t^2. par exemple avec une accélération de A pendant dt :

    new_y = old_y + old_v*dt+A/2*dt^2
    new_v = old_v + A*dt

  5. #5
    Clickteam Clickteam
    Olivier's Avatar
    Join Date
    Jun 2006
    Posts
    3,000
    Mentioned
    9 Post(s)
    Tagged
    1 Thread(s)

    Re: Mouvement plateforme custom basé sur le timer

    Merci d'avoir jeté un oeil samuel. Ta suggestion n'est pas du tout stupide, bien au contraire. Spécifier une valeur min/max pour le framerate fait partie de cette solution que j'aimerai bien implémenter à mon code. Mais je crois que c'est impossible à intégrer en l'état dans MMF car l'article parle de séparer le runtime du rendu:
    <div class="ubbcode-block"><div class="ubbcode-header">Code:</div><div class="ubbcode-body ubbcode-pre" style="height: 34px;"><pre>updateGame(); /* Update game state a variable number of times */
    drawScene(); /* Draw the scene only once */</pre></div></div>
    Cependant MMF est déjà capable de le faire, car il me semble que c'est exactement ce qu'il fait lorsque l'option "Machine independent speed" est activée. Ce serait hyper chouette si Clickteam pouvait nous rendre disponible ces deux fonctions system. D'ailleurs n'y avait-il pas des fonctions similaires dans Jamagic?

    À propos du déplacement gauche/droite je ne vois pas de différence. Dans l'un j'additionne AccelerationX à SpeedX, et dans l'autre je fait l'inverse c-à-d une soustraction. Mais il y a tout de même quelquechose qui doit clocher (on reste collé à gauche et pas à droite), donc il va falloir que je revois cela.

  6. #6
    Clickteam Clickteam
    Olivier's Avatar
    Join Date
    Jun 2006
    Posts
    3,000
    Mentioned
    9 Post(s)
    Tagged
    1 Thread(s)

    Re: Mouvement plateforme custom basé sur le timer

    Comme d'habitude je n'ai pas tout compris Batchy. [img]/epicentre/images/%%GRAEMLIN_URL%%/smile.gif[/img] Voici en résumé ce qui se passe dans mon code pour la coordonnée Y de mon objet:
    <div class="ubbcode-block"><div class="ubbcode-header">Code:</div><div class="ubbcode-body ubbcode-pre" style="height: 150px;"><pre>
    // Add Gravity to SpeedY, Capped by SpeedMaxY
    • Always
    &gt; "Active 6" Set SpeedY to Min(SpeedMaxY( "Active 6" ), SpeedY( "Active 6" )+GravityY( "Active 6" )*TimeDelta*TimeScale)

    // Update the object's PosY coordinate with its newly calculated SpeedY
    • Always
    &gt; "Active 6" Set PosY to PosY( "Active 6" )+SpeedY( "Active 6" )*TimeDelta*TimeScale

    // Move the object safely at its newly calculated PosY coordinate
    • Always
    &gt; "Active 6" Set Y position to PosY( "Active 6" )
    </pre></div></div>
    Tu remarqueras que TimeDelta intervient deux fois dans le calcul de la coordonnée Y. Une première fois en ajoutant GravityY à SpeedY, et une deuxième fois en ajoutant SpeedY à PosY.
    Il me semble que cela est équivalent à ce que tu écris plus haut à propos de dt^2, mais je n'en suis pas certain.

  7. #7
    Clickteam Clickteam
    Olivier's Avatar
    Join Date
    Jun 2006
    Posts
    3,000
    Mentioned
    9 Post(s)
    Tagged
    1 Thread(s)

    Re: Mouvement plateforme custom basé sur le timer

    Malheureusement je ne comprends toujours pas les équations de Batchy. Je crois que c'est trop compliqué pour moi. [img]/epicentre/images/%%GRAEMLIN_URL%%/frown.gif[/img]

    J'ai remarqué le même problème avec le Movement Platform de Clickteam. C'est très net si on met un FrameRate très bas genre 10 FPS, l'actif saute beaucoup moins haut. Presque deux fois moins haut!
    Comment ça se fait? Le gameplay n'est pas du tout le même dans ces conditions.

  8. #8
    Clickteam Clickteam
    Olivier's Avatar
    Join Date
    Jun 2006
    Posts
    3,000
    Mentioned
    9 Post(s)
    Tagged
    1 Thread(s)

    Re: Mouvement plateforme custom basé sur le timer

    <div class="ubbcode-block"><div class="ubbcode-header">Posté à l'origine par: BatchyX</div><div class="ubbcode-body">new_y = old_y + old_v*dt+A/2*dt^2
    new_v = old_v + A*dt</div></div>
    Dis-donc ça ressemble très fortement à la formule de Verlet pour la vélocité ça, non? Malheureusement je n'ai pas encore réussi à l'implémenter dans mon code, mais ça va venir.. enfin j'espère.

  9. #9
    Clicker Fusion 2.5SWF Export Module
    jpcr's Avatar
    Join Date
    Jul 2006
    Location
    Paris, France
    Posts
    492
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    Re: Mouvement plateforme custom basé sur le timer

    petard, effrayant tout ça...

  10. #10
    No Products Registered

    Join Date
    Feb 2007
    Posts
    26
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    Re: Mouvement plateforme custom basé sur le timer

    Bonjour Olivier,

    j'ai regardé ton exemple. Pour l'objet qui saute moins haut, je pense que cela vient de l'approximation faite sur ta vitesse sur le calcul de la distance parcourue. Tu considères que la distance parcourue sur une durée DeltatT l'est sur la base de ta vitesse à t+DeltatT. Or la vitesse a varié sur DeltaT, donc plus le temps entre chaque calcul est long (framerate faible), plus l'erreur commise est grande.

    Si tu essaies une vitesse moyenne, comme ci-dessous, tu verras que la distance est beaucoup plus homogène sur différents framerate.
    PosY( &quot;Active 6&quot; )+((SpeedY( &quot;Active 6&quot; )*TimeDelta)-(GravityY( &quot;Active 6&quot; )*TimeDelta*TimeDelta/2))*TimeScale

    Pour l'objet qui colle au plafond et sur la gauche, j'ai une piste. Je rééditerai le post dès que j'aurai trouvé.

Page 1 of 3 1 2 3 LastLast

Similar Threads

  1. Phizix Box2D : Mouvement plateforme ?
    By donmanolo in forum Multimedia Fusion 2 - Technical Support
    Replies: 2
    Last Post: 19th January 2012, 03:29 PM
  2. Mouvement plateforme custom basé sur le timer
    By Olivier in forum File Archive
    Replies: 0
    Last Post: 26th October 2008, 03:26 PM
  3. [bug] Mouvement plateforme - Saut avec dir forcée
    By ouly in forum Multimedia Fusion 2 - Technical Support
    Replies: 2
    Last Post: 12th July 2008, 09:11 AM
  4. Mouvement plateforme
    By Jerome in forum Multimedia Fusion 2 - Technical Support
    Replies: 11
    Last Post: 19th October 2006, 07:50 AM

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •