forked from: 6面体
無粋にいろいろ突っ込んでみた。
♥0 |
Line 69 |
Modified 2009-11-20 02:36:22 |
MIT License
archived:2017-03-30 08:02:24
ActionScript3 source code
/**
* Copyright umhr ( http://wonderfl.net/user/umhr )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/uMSX
*/
// forked from msdfjp's 6面体
//無粋にいろいろ突っ込んでみた。
package {
import flash.display.Sprite;
import flash.events.KeyboardEvent;
import flash.events.Event;
//クラス名は大文字から始めるのがセオリー
//MovieClipはタイムライン的動作が必要な時にのみ使う。
//こういうのなら、Spriteで十分
public class Box3D extends Sprite {
public function Box3D():void {
var a_mc:Sprite = new Sprite();
//配列内で管理するなら、これいらないよ
// var fill_a_mc:Sprite = new Sprite();
// var fill_b_mc:Sprite = new Sprite();
// var fill_c_mc:Sprite = new Sprite();
// var fill_d_mc:Sprite = new Sprite();
// var fill_e_mc:Sprite = new Sprite();
// var fill_f_mc:Sprite = new Sprite();
var mc_array:Array = [new Sprite(),new Sprite(),new Sprite(),new Sprite(),new Sprite(),new Sprite()];
mc_array[0].graphics.beginFill(0x012345);
mc_array[1].graphics.beginFill(0x123456);
mc_array[2].graphics.beginFill(0x456723);
mc_array[3].graphics.beginFill(0x567834);
mc_array[4].graphics.beginFill(0x894567);
mc_array[5].graphics.beginFill(0x9a5678);
var j:int;
for (j=0; j<6; j++) {
//こっちにまとめちゃえば?
mc_array[j].graphics.drawRect(-50, -50, 100, 100);
mc_array[j].graphics.endFill();
a_mc.addChild(mc_array[j]);
}
this.addChild(a_mc);
//this.stage.stageWidthにthisはいらないんじゃないかな(よくわかんないけど)
a_mc.x = stage.stageWidth / 2;
a_mc.y = stage.stageHeight / 2;
mc_array[0].z = 50;
mc_array[1].z = -50;
mc_array[2].x = 50;
mc_array[3].x = -50;
mc_array[4].y = 50;
mc_array[5].y = -50;
mc_array[2].rotationY = 90;
mc_array[3].rotationY = 90;
mc_array[4].rotationX = 90;
mc_array[5].rotationX = 90;
a_mc.addEventListener(Event.ENTER_FRAME, doEnterFrame);
stage.addEventListener(KeyboardEvent.KEY_DOWN, doKeyboardEvent);
}
private function doKeyboardEvent(e:KeyboardEvent):void {
switch (e.keyCode) {
case 39 :
//this上に一つしか子供が無いので、
//これでもいける
this.getChildAt(0).x+=10;
break;
case 37 :
this.getChildAt(0).x-=10;
break;
case 40 :
this.getChildAt(0).z-=10;
break;
case 38 :
this.getChildAt(0).z+=10;
break;
}
}
private function doEnterFrame(e:Event):void {
//a_mcはイベントを設置している場所なので、
//e.targetでもアクセスできる。
//this.getChildAt(0)でもいいけど。
e.target.rotationX += 0.5;
e.target.rotationY+=1;
e.target.rotationZ+=1.5;
//arrayの初期化は[]のほうがいいらしい;
var zCheck:Array = [];
var i:int;
for (i=0; i<6; i++) {
//mc_array[i]はe.target(a_mc)の6人の子供なので、
//getChildAtでアクセスできる。
var posZ:Number=e.target.getChildAt(i).transform.getRelativeMatrix3D(root).position.z;
zCheck[i]={z:posZ,mc:e.target.getChildAt(i)};
}
zCheck.sortOn("z", Array.NUMERIC | Array.DESCENDING);
//これなくてもよくない?(よくわかんないけど)
// for (i=0; i<6; i++) {
// a_mc.removeChild(mc_array[i]);
// }
for (i=0; i<6; i++) {
e.target.addChild(zCheck[i].mc);
}
}
}
}