package { import flash.display.*; import flash.text.*; import flash.events.*; import flash.ui.*; import flash.utils.*; import flash.net.*; import flash.geom.*; public class Spin extends Sprite { [Embed(source = 'b.gif')] private var ImageBall:Class; [Embed(source = 'shd.gif')] private var ImageShadow:Class; private var g:JGraphics; private var imgBall:Bitmap; private var imgShadow:Bitmap; private var xp:Number; private var yp:Number; private var zp:Number; private var ap:Number; private var rx:Number; private var ry:Number; public function Spin() { var child:Sprite = new Sprite(); addChild(child); g = new JGraphics(600, 600); imgBall = new ImageBall(); imgShadow = new ImageShadow(); child.addChild(new Bitmap(g.getBitmapData())); xp = 0.0; yp = 0.0; zp = 0.0; ap = 0.0; rx = 60.0; ry = 100.0; var timer:Timer = new Timer(15, 0); timer.addEventListener(TimerEvent.TIMER, onTick); timer.start(); } private function onTick(ev:TimerEvent):void { g.setColor(JGraphics.WHITE); g.fillRect(0, 0, 600, 600); update(); } private function update():void { var i:int; ry = Math.sin(ap * 3.14 / 180.0) * 50.0; ry += 50.0; for (i = 0; i <= 3; i++) { var cx:Number = xp + (i * 120.0); var cy:Number = yp + (i * 120.0); var cz:Number = zp + (i * 120.0); var sz:Number = Math.cos(cz * 3.14 / 180.0) * 50.0; var sx:Number = Math.sin(cx * 3.14 / 180.0) * sz; var sy:Number = Math.cos(cy * 3.14 / 180.0) * sz; sx += rx; sy += ry; var image_size:int = Math.ceil(sz / 20.0 + 15.0); if (image_size > 20) image_size = 20; g.drawImage(imgBall, sx - (image_size / 2), sy - (image_size / 2)); sz /= 4.0; sz += 140.0; g.drawImage(imgShadow, sx - (image_size / 2), sz - (image_size / 2)); } xp += 1.0; yp += 1.5; zp += 2; ap += 0.2; } } }