開発環境 |
Apache Flex SDK 4.12.1 |
|
FlashDevelop 4.6.1 |
実行環境 |
Microsoft Windows 8.1 (64bit) |
プロジェクトの種類 |
ActionScript 3/AS3 Project |
プロジェクト名 |
Wireframe |
参考
Main.as
package
{
import flash.display.Sprite;
import flash.events.Event;
import flash.events.KeyboardEvent;
import flash.events.MouseEvent;
import flash.geom.Point;
import flash.ui.Keyboard;
/**
* ...
* @author
*/
public class Main extends Sprite
{
private var vertices:Array = [
new Vector3(0, 0.5, 0),
new Vector3(0.5, -0.5, 0),
new Vector3( -0.5, -0.5, 0),
];
private var lastPosition:Point = new Point();
public function Main():void
{
if (stage)
init();
else
addEventListener(Event.ADDED_TO_STAGE, init);
}
private function init(e:Event = null):void
{
removeEventListener(Event.ADDED_TO_STAGE, init);
// entry point
addEventListener(Event.ENTER_FRAME, enterFrameHandler);
stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDownHandler);
stage.addEventListener(MouseEvent.MOUSE_MOVE, mouseMoveHandler);
}
private function translate(dx:Number, dy:Number):void
{
for each (var vertex:Vector3 in vertices)
{
vertex.x += dx;
vertex.y += dy;
}
}
private function project(v:Vector3):Point
{
return new Point((v.x + 1) * stage.stageWidth / 2, (-v.y + 1) * stage.stageHeight / 2);
}
private function enterFrameHandler(e:Event):void
{
graphics.clear();
graphics.lineStyle(5, 0x8888ff);
var point:Point = project(vertices[0]);
graphics.moveTo(point.x, point.y);
for (var i:int = vertices.length - 1; 0 <= i; i--)
{
point = project(vertices[i]);
graphics.lineTo(point.x, point.y);
}
}
private function keyDownHandler(e:KeyboardEvent):void
{
switch (e.keyCode)
{
case Keyboard.A:
translate(-0.1, 0);
break;
case Keyboard.W:
translate(0, 0.1);
break;
case Keyboard.D:
translate(0.1, 0);
break;
case Keyboard.S:
translate(0, -0.1);
break;
}
}
private function mouseMoveHandler(e:MouseEvent):void
{
if (e.buttonDown)
{
rotateY(0.02 * (e.localX - lastPosition.x));
rotateX(0.02 * (e.localY - lastPosition.y));
}
lastPosition.x = e.localX;
lastPosition.y = e.localY;
}
private function rotateX(angleRadians:Number):void
{
for each (var vertex:Vector3 in vertices)
{
var s:Number = Math.sin(angleRadians);
var c:Number = Math.cos(angleRadians);
var y:Number = c * vertex.y - s * vertex.z;
var z:Number = s * vertex.y + c * vertex.z;
vertex.y = y;
vertex.z = z;
}
}
private function rotateY(angleRadians:Number):void
{
for each (var vertex:Vector3 in vertices)
{
var s:Number = Math.sin(angleRadians);
var c:Number = Math.cos(angleRadians);
var x:Number = c * vertex.x + s * vertex.z;
var z:Number = -s * vertex.x + c * vertex.z;
vertex.x = x;
vertex.z = z;
}
}
}
}
最終更新:2014年06月12日 16:09