Flash / Flex / ActionScript/Animation/Velocity
Calculating position based on velocity
<source lang="java">
package {
import flash.display.*; import flash.events.*; import flash.utils.*; public class Main extends Sprite { private var distancePerSecond:int = 50; // Pixels to move per second private var now:int; // The current time private var then:int; // The last screen-update time private var circle:Shape; // The object to animate public function Main( ) { circle = new Shape( ); circle.graphics.beginFill(0x0000FF, 1); circle.graphics.lineStyle(1); circle.graphics.drawEllipse(0, 0, 25, 25); addChild(circle); then = getTimer( ); now = then; addEventListener(Event.ENTER_FRAME, enterFrameListener); } private function enterFrameListener (e:Event):void { then = now; now = getTimer( ); var elapsed:int = now - then; var numSeconds:Number = elapsed / 1000; var moveAmount:Number = distancePerSecond * numSeconds;
circle.x += moveAmount; } }
}
</source>
Change speed direction after hitting the boundary
<source lang="java">
package {
import flash.display.Sprite; import flash.events.Event; import flash.geom.ColorTransform; import flash.geom.Rectangle; public class Main extends Sprite { public var speedX:int = 10; public var speedY:int = -10; public function Main() { addEventListener(Event.ENTER_FRAME, onEnterFrame); graphics.beginFill(0xFF, 1); graphics.drawCircle(0, 0, 25); graphics.endFill(); var colorTransform:ColorTransform = new ColorTransform(); colorTransform.color = Math.random()*0xFFFFFF; transform.colorTransform = colorTransform; } private function onEnterFrame(event:Event):void { x += speedX; y += speedY; var bounds:Rectangle = getBounds(parent); if (bounds.left < 0 || bounds.right > stage.stageWidth) { speedX *= -1; } if (bounds.top < 0 || bounds.bottom > stage.stageHeight) { speedY *= -1; } } }
}
</source>
Velocity Animation
<source lang="java">
package {
import flash.display.Sprite; import flash.events.Event; public class Main extends Sprite { private var _sprite:Sprite = new Sprite( ); public function Main( ) { _sprite.graphics.beginFill(0x0000ff, 100); _sprite.graphics.drawCircle(0, 0, 25); _sprite.graphics.endFill( ); _sprite.x = 50; _sprite.y = 10; addChild(_sprite); addEventListener(Event.ENTER_FRAME, onEnterFrame); } public function onEnterFrame(event:Event):void { _sprite.x += 1; _sprite.y += 2; } }
}
</source>