Login  Register

Re: Morphic animation, c'est lent.

Posted by Frédéric Ferrère-2 on Jun 08, 2009; 9:50pm
URL: https://forum.world.st/Morphic-animation-c-est-lent-tp104210p104212.html

Damien Cassou a écrit :

> 2009/6/7 Frédéric Ferrère <[hidden email]>:
>  
>> je viens de me rendre compte que la période
>> minimum que peut utiliser un morph entre deux appels
>> à la fonction step est de 20 millisecondes (lié je suppose à la variable
>> MinCycleLapse de la classe WorldState).
>>    
>
> Ça paraît étonnant car si je déplace un morph à la souris, ça va plus
> vite que ça.
>
>  

Peut être que :
 - les déplacements ne se font pas pixel par pixel.
 - les évènements souris sont capturés à un intervalle de temps plus court.



Dans l'exemple ci-dessous,
un petit carré rouge va se déplacer dans un rectangle noir
de 50 pixels vers la droite et je fais varier plusieurs fois
la valeur de stepTime, les résultats sont assez loin de l'effet souhaité.

avec stepTime <= 30ms (0,5,10,15,20 ou  30) impossible d'avoir moins de
2s pour ce déplacement de 50 pixels.
avec stepTime = 60ms, le déplacement prends 4s (au lieu de 3s).
avec stepTime = 100ms, le déplacement prends 6s (au lieu de 5s).

Environnement:
- OS : Linux Ubuntu 9.04
- VM : exupery
- image : Pharo0.1 Latest update: #10320

==========================================
PasteUpMorph subclass: #MorphSpeedTest
    instanceVariableNames: 'rectangle actions startTime actIndex delay'
    classVariableNames: ''
    poolDictionaries: ''
    category: 'SpeedTests'
................................................................
initialize
    super initialize.
    self stopStepping.
    self extent: 600@100;
        color: Color black.
    rectangle := RectangleMorph new
                    extent: 30@30;
                    position: 0@35;
                    color: Color red.
    self addMorph: rectangle.              
    actions := OrderedCollection new.
    actIndex := 1.
    delay := 20.
    self actionSetTime.
    self actionMove.
    self actionPrint.
    self actionDelayZero.
   
    self actionResetPos.
    self actionSetTime.
    self actionMove.
    self actionPrint.
    self actionDelayTen.
   
    self actionResetPos.
    self actionSetTime.
    self actionMove.
    self actionPrint.
    self actionDelaySixty.

    self actionResetPos.
    self actionSetTime.
    self actionMove.
    self actionPrint.

    self actionEnd.
................................................................
step
     (actions at: actIndex) value: self
................................................................
stepTime
    ^delay
................................................................
actionSetTime
    actions add: [:act|
                    self startTime: (Time millisecondClockValue).
                    actIndex := actIndex + 1. ].
................................................................
actionResetPos
    actions add: [:act|
                    rectangle position: 0@35.
                    actIndex := actIndex + 1.].
................................................................
actionPrint
    actions add: [:act|
                    | cycle |
                    cycle := Time millisecondClockValue - act startTime.
                    Transcript show:  (cycle);cr.
                    Transcript show: act rectangle position;cr.
                    actIndex := actIndex + 1.].
................................................................
actionMove
    1 to: 50 do: [ :nb|
            actions add: [:act| rectangle position: (rectangle position
+ (1@0)).
                            actIndex := actIndex + 1.].].
................................................................
actionEnd
    actions add: [:act| act delete].
................................................................
actionDelayTen
    actions add: [:act|
                    delay := 10.
                    actIndex := actIndex + 1.].
................................................................

Cordialement,
--
Frédéric
_______________________________________________
Squeak-fr mailing list
[hidden email]
http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/squeak-fr