Re: Morphic animation, c'est lent.
Frédéric Ferrère <[email protected]>
| Newsgroups | gmane.comp.lang.smalltalk.squeak.french |
|---|---|
| Message-ID | <[email protected]> |
Damien Cassou a écrit : > 2009/6/7 Frédéric Ferrère <[email protected]>: > >> 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