forked from: 3D Carousel
forked from 3D Carousel (diff: 28)
Flash 10 で被写界深度ネタ Z-sortつき
ActionScript3 source code
/**
* Copyright meat18 ( http://wonderfl.net/user/meat18 )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/plyt
*/
// forked from clockmaker's 3D Carousel
// Flash 10 で被写界深度ネタ Z-sortつき
package{
import flash.display.*
import flash.events.*
import flash.filters.BlurFilter;
import flash.geom.*;
import flash.text.*;
[SWF(frameRate="60", width="465", height="465")]
public class Main extends Sprite {
public var rotatenum:Number = 0;
public var iname:String;
public function Main() {
var tf:TextField = TextField(addChild(new TextField));
tf.text="test";
var main :Sprite = Sprite(addChild(new Sprite()))
main.x = stage.stageWidth / 2
main.y = stage.stageHeight / 2
var wrap :Sprite = Sprite(main.addChild(new Sprite()))
var pp:PerspectiveProjection = root.transform.perspectiveProjection;
var objs:Array = []
for(var i:int=0; i<10; i++)
{
var sp: Sprite = Sprite(wrap.addChild(new Sprite()))
sp.graphics.beginFill(0xFFFFFF * Math.random())
sp.graphics.drawRect(-25, -25, 75, 75)
sp.x = 200 * Math.sin( i * 360 / 10 * Math.PI / 180)
sp.z = 200 * Math.cos( i * 360 / 10 * Math.PI / 180)
objs.push(sp)
}
stage.addEventListener(Event.ENTER_FRAME, function(e:Event):void
{
pp.projectionCenter = new Point(stage.stageWidth / 2,
stage.stageHeight / 2 -50)
rotatenum = 0;
rotatenum = stage.stageWidth / 2 - mouseX > 15 ? stage.stageWidth / 2 - mouseX - 15:rotatenum;
rotatenum = stage.stageWidth / 2 - mouseX < -15 ? stage.stageWidth / 2 - mouseX + 15:rotatenum;
rotatenum = (stage.stageWidth / 2 - 15) / 2 > mouseX ? mouseX:rotatenum;
rotatenum = stage.stageWidth - (stage.stageWidth / 2 - 15) / 2 < mouseX ? mouseX - stage.stageWidth:rotatenum;
wrap.rotationY += (rotatenum / stage.stageWidth * 480) * 0.05
var arr:Array = []
for (var i:int=0; i<objs.length; i++) {
var ele:Sprite = objs[i] as Sprite
ele.rotationY = -wrap.rotationY
ele.buttonMode = true;
ele.addEventListener(MouseEvent.CLICK, function(e:Event):void
{
iname = e.target.name;
tf.text = iname;
})
var mtx:Matrix3D = ele.transform.getRelativeMatrix3D(main)
arr.push( { ele:ele, z:mtx.position.z } )
}
arr.sortOn("z", Array.NUMERIC | Array.DESCENDING)
var baseZ:Number = wrap.z
for (i=0; i<arr.length; i++) {
ele = arr[i].ele as Sprite
var z:Number = arr[i].z
wrap.setChildIndex(ele, i)
var b:Number = Math.abs(z)
// focus depth blur effect, warning, very slow:
b = z/10
ele.filters = (b > 2) ? [new BlurFilter(b, b, 3)] : []
}
})
}
}
}
