flash on 2010-8-23
♥0 |
Line 136 |
Modified 2010-08-24 19:28:56 |
MIT License
archived:2017-03-29 12:33:13
ActionScript3 source code
/**
* Copyright Tamanegi_kenshi ( http://wonderfl.net/user/Tamanegi_kenshi )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/yLpF
*/
package {
import flash.ui.Mouse;
import flash.events.MouseEvent;
import flash.events.Event;
import flash.display.Sprite;
import org.papervision3d.cameras.Camera3D;
import org.papervision3d.view.Viewport3D;
import org.papervision3d.scenes.Scene3D;
import org.papervision3d.render.BasicRenderEngine;
import org.papervision3d.objects.primitives.*;
import org.papervision3d.materials.ColorMaterial;
import org.papervision3d.events.InteractiveScene3DEvent;
import caurina.transitions.Tweener;
[SWF(backgroundColor=0x000000)]
public class FlashTest extends Sprite {
private var camera:Camera3D;
private var scene:Scene3D;
private var viewport:Viewport3D;
private var renderer:BasicRenderEngine;
private var angle:int;
private var planeArr:Array = [];
private var plane1:Plane;
private var isPlane1:Boolean = false;
private var planeNum:String;
private var plane1Arr:Array = [];
private var colorArr:Array = [];
public function FlashTest() {
init();
}
private function init():void{
camera = new Camera3D();
scene = new Scene3D();
viewport = new Viewport3D(465, 465);
renderer = new BasicRenderEngine;
camera.x = 200;
camera.z = -1300;
viewport.interactive = true;
viewport.buttonMode = true;
addChild(viewport);
for(var k:int = 0; k < 12; k++){
var color:uint = Math.random() * 0xffffff;
colorArr.push(color);
var material1:ColorMaterial = new ColorMaterial(color);
material1.interactive = true;
plane1 = new Plane(material1, 500, 300);
plane1.x = 1500;
plane1.alpha = 0;
scene.addChild(plane1);
plane1.addEventListener(InteractiveScene3DEvent.OBJECT_CLICK, pl1Click);
plane1Arr.push(plane1);
}
// stage.addEventListener(MouseEvent.CLICK, onClick);
for(var i:int = 0; i < 12; i++){
var material:ColorMaterial = new ColorMaterial(colorArr[i])
material.doubleSided = true;
material.interactive = true;
// var radian:Number = 360 / 12 * i * Math.PI / 180;
var plane:Plane = new Plane(material, 200, 150);
// plane.y = Math.cos(radian) * 200;
// plane.z = Math.sin(radian) * 200;
plane.name = "num" + i;
plane.x = -200;
scene.addChild(plane);
planeArr.push(plane);
plane.addEventListener(InteractiveScene3DEvent.OBJECT_CLICK, onCli);
}
addEventListener(Event.ENTER_FRAME, onEnter);
}
private function pl1Click(event:InteractiveScene3DEvent):void{
isPlane1 = false;
}
private function onCli(event:InteractiveScene3DEvent):void{
planeNum = event.target.name;
isPlane1 = true;
//Tweener.addTween(event.target, {x:100, y:0, z:-1000, time:2});
}
private function onEnter(event:Event):void{
if(planeNum == "num0"){
if(isPlane1 == true){
var vx:Number = (400 - plane1Arr[0].x) * 0.1;
plane1Arr[0].x += vx;
if(plane1Arr[0].x <= 400 + 0.5){
plane1Arr[0].x = 400;
var vsx:Number = (2 - plane1Arr[0].scaleX) * 0.1;
var vsy:Number = (2 - plane1Arr[0].scaleY) * 0.1;
plane1Arr[0].scaleX += vsx;
plane1Arr[0].scaleY += vsy;
}
}else if(isPlane1 == false){
var vx2:Number = (1500 - plane1Arr[0].x) * 0.1;
plane1Arr[0].x += vx2;
if(plane1Arr[0].x >= 800 - 0.5){
var vsx1:Number = (1 - plane1Arr[0].scaleX) * 0.1;
var vsy1:Number = (1 - plane1Arr[0].scaleY) * 0.1;
plane1Arr[0].scaleX += vsx1;
plane1Arr[0].scaleY += vsy1;
}
}
}else{if(planeNum == "num1"){
if(isPlane1 == true){
var vx1:Number = (400 - plane1Arr[1].x) * 0.1;
plane1Arr[1].x += vx1;
if(plane1Arr[1].x <= 400 + 0.5){
plane1Arr[1].x = 400;
var vsx11:Number = (2 - plane1Arr[1].scaleX) * 0.1;
var vsy11:Number = (2 - plane1Arr[1].scaleY) * 0.1;
plane1Arr[1].scaleX += vsx11;
plane1Arr[1].scaleY += vsy11;
}
}else if(isPlane1 == false){
var vx21:Number = (1500 - plane1Arr[1].x) * 0.1;
plane1Arr[1].x += vx21;
if(plane1Arr[1].x >= 800 - 0.5){
var vsx21:Number = (1 - plane1Arr[1].scaleX) * 0.1;
var vsy21:Number = (1 - plane1Arr[1].scaleY) * 0.1;
plane1Arr[1].scaleX += vsx21;
plane1Arr[1].scaleY += vsy21;
}
}
}
}
angle += (232 - mouseY) * 0.01;
for(var i:int = 0; i < 12; i++){
var radian:Number = (360 / 12 * i + angle) * Math.PI / 180;
planeArr[i].y = Math.cos(radian) * 500;
planeArr[i].z = Math.sin(radian) * 500;
}
renderer.renderScene(scene, camera, viewport);
}
private function onClick(event:MouseEvent):void{
if(isPlane1 == false){
isPlane1 = true;
} else if(isPlane1 == true){
isPlane1 = false;
}
// plane1.addEventListener(Event.ENTER_FRAME, plane1Enter);
}
private function plane1Enter(event:Event):void{
//var vx:Number = (500 - event.target.x) * 0.1;
//event.target.x += vx;
event.target.x +=15;
}
}
}