2008-03-31 | 22:55
マウスクリックした位置のピースが空きエリアに移動します。
(バグっている可能性もありますので、遊ぶ方はそのつもりで・・)
(バグっている可能性もありますので、遊ぶ方はそのつもりで・・)
package { import flash.display.*; import flash.filters.*; import flash.events.*; import flash.geom.*; import caurina.transitions.Tweener; [SWF(width='500',height='600',backgroundColor='0xffffff')] public class Shuffle extends Sprite { [Embed(source="monalisa.jpg")] private var myImage:Class; private var CNT:int = 10; private var images:Array = []; private var blank:int; private var segmentW:int; private var segmentH:int; private var processing:Boolean = false; private var image:Bitmap; public function Shuffle( ) { stage.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown); splitImage(); } private function splitImage():void{ var bm:Bitmap = new myImage(); segmentW = bm.width/CNT; segmentH = bm.height/CNT; for(var y:int = 0 ; y < CNT ; y++){ for(var x:int = 0 ; x < CNT ; x++){ var bd:BitmapData = new BitmapData(segmentW, segmentH); var rect:Rectangle = new Rectangle(segmentW*x, segmentH*y ,segmentW, segmentH); bd.copyPixels(bm.bitmapData,rect,new Point(0,0)); var segmentBm:Bitmap = new Bitmap(bd); images.push(segmentBm); } } shuffleImage(images.length - 2); for(var i:int = 0 ; i < images.length - 1 ; i++){ images[i].x = Math.floor(i/CNT) * segmentW; images[i].y = (i%CNT)*segmentH; addChild(images[i]); } blank = images.length - 1; } private function shuffleImage(i:int) : void{ if(i > 0){ var j:int = Math.floor(Math.random() * (i + 1)); if(i != j){ var bm:Bitmap= images[i]; images[i] = images[j]; images[j] = bm; } shuffleImage(--i); } } private function onMouseDown(e:*):void{ if(processing || stage.mouseX > segmentW*CNT || stage.mouseY > segmentH*CNT) return; var i:int = Math.floor(stage.mouseX / segmentW) * CNT + Math.floor(stage.mouseY / segmentH) ; image = images[i]; setChildIndex(image,numChildren - 1) ; processing = true; Tweener.addTween(image, {x: Math.floor(blank/CNT) * segmentW, y: (blank%CNT) * segmentH, time:1, transition:"easeOutBack", onComplete:function():void{ processing = false; } } ); images[blank] = images[i]; blank = i; } } }
スポンサーサイト