[Squeak-fr] Morphic animation, c'est lent.

Frédéric Ferrère frederic.ferrere at free.fr
Lun 8 Juin 21:50:27 UTC 2009


Damien Cassou a écrit :
> 2009/6/7 Frédéric Ferrère <frederic.ferrere at free.fr>:
>   
>> 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 at 100;
        color: Color black.
    rectangle := RectangleMorph new
                    extent: 30 at 30;
                    position: 0 at 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 at 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 at 0)).
                            actIndex := actIndex + 1.].].
................................................................
actionEnd
    actions add: [:act| act delete].
................................................................
actionDelayTen
    actions add: [:act|
                    delay := 10.
                    actIndex := actIndex + 1.].
................................................................

Cordialement,
--
Frédéric


Plus d'informations sur la liste de diffusion Squeak-fr