flash on 2009-11-20
/**
* Copyright hacker_owekah98 ( http://wonderfl.net/user/hacker_owekah98 )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/k3T0
*/
package
{
import flash.events.Event;
import flash.display.*;
import flash.text.*;
import org.papervision3d.view.*;
import org.papervision3d.scenes.Scene3D;
import org.papervision3d.cameras.Camera3D;
import org.papervision3d.render.BasicRenderEngine;
import org.papervision3d.objects.primitives.*;
import org.papervision3d.materials.BitmapFileMaterial;
import org.papervision3d.materials.utils.*;
import org.papervision3d.events.InteractiveScene3DEvent;
import org.papervision3d.materials.special.ParticleMaterial;
import org.papervision3d.objects.special.ParticleField;
import org.papervision3d.core.geom.renderables.Particle;
import org.papervision3d.core.geom.Particles;
public class test8 extends Sprite
{
public var viewport:Viewport3D;
public var scene:Scene3D;
public var camera:Camera3D;
public var render:BasicRenderEngine;
public var material:BitmapFileMaterial;
public var particleMat:ParticleMaterial;
public var cube:Cube;
public var sphere:Sphere;
public var particles:ParticleField;
public var mouse_over:Boolean = false; // マウスが乗っているかの判定フラグ
public var zoom_val:Number = 1.0; // 拡大・縮小の速度
public var zoom_max:Number = 100.0; // 拡大の最大倍率値
public var zoom_min:Number = 50.0; // 縮小の最小倍率値
public var rot:Number = 0;
public function test8()
{
stage.align = StageAlign.TOP_LEFT;
stage.scaleMode = StageScaleMode.NO_SCALE;
stage.frameRate = 20;
Init();
// 宇宙空間の粒子を構築
CreateParticle();
// 地球の構築
CreateEarth();
// 各種のイベント処理の定義
CreateAddEventList();
}
//********************************************************************************************************************
// 起動時の初期化
//********************************************************************************************************************
public function Init():void
{
//---------------------------------------------------------
// Viewport3D
//---------------------------------------------------------
// (1) 横幅
// (2) 縦幅
// (3) ステージのサイズ変更
// (4) マウスイベントを有効
//---------------------------------------------------------
viewport = new Viewport3D(800, 600, false, true);
viewport.opaqueBackground = 0x00084; // 背景色
addChild(viewport);
render = new BasicRenderEngine();
scene = new Scene3D();
camera = new Camera3D();
}
//********************************************************************************************************************
// イベント処理の定義
//********************************************************************************************************************
private function CreateAddEventList():void
{
// 常時処理のイベント処理
addEventListener(Event.ENTER_FRAME , onEnterFrame);
// マウスのイベント処理
sphere.addEventListener(InteractiveScene3DEvent.OBJECT_OVER, onOverEvent); // マウスが乗った時
sphere.addEventListener(InteractiveScene3DEvent.OBJECT_OUT, onOutEvent); // マウスが放れた時
}
//********************************************************************************************************************
// 宇宙空間の粒子を構築
//********************************************************************************************************************
private function CreateParticle():void
{
particleMat = new ParticleMaterial(0xFFFFFF, 1);
particles = new ParticleField(particleMat, 1000, 4, 2000, 2000, 2000);
scene.addChild(particles);
}
//********************************************************************************************************************
// 地球の構築
//********************************************************************************************************************
private function CreateEarth():void
{
material = new BitmapFileMaterial("earthmap1k.jpg"); // 画像ファイルの読込み
material.interactive = true; // マウスイベントの送信を許可
sphere = new Sphere(material, 300, 30, 30); // 球の構築
this.buttonMode = true; // マウスカーソルの形状を変更
this.camera.zoom = zoom_min; // ズーム値を最小値に再設定
scene.addChild(sphere); // シーンに球を追加構築
}
//********************************************************************************************************************
// 常時処理のイベント処理
//********************************************************************************************************************
public function onEnterFrame(event:Event):void
{
/*
sphere.rotationX += 1;
sphere.rotationY += 1;
sphere.rotationZ += 1;
*/
particles.yaw(1); // 粒子の回転
sphere.yaw(1); // 地球の回転
// 地球の拡大・縮小処理のためのカメラ調整処理
MouseEventProc();
// レンダリングの描画
render.renderScene(scene, camera, viewport);
}
//********************************************************************************************************************
// 地球の拡大・縮小処理のためのカメラ調整処理
//********************************************************************************************************************
private function MouseEventProc():void
{
// 球の拡大・縮小処理による計算
if (mouse_over == true)
{
// 拡大処理
if (this.camera.zoom < zoom_max)
this.camera.zoom += zoom_val; // 拡大計算
else
this.camera.zoom = zoom_max; // 最大値の制限
}
else
{
// 縮小処理
if (this.camera.zoom > zoom_min)
this.camera.zoom -= zoom_val; // 縮小計算
else
this.camera.zoom = zoom_min; // 最小値の制限
}
}
//********************************************************************************************************************
// マウスが球に乗った時のイベント処理
//********************************************************************************************************************
private function onOverEvent(event:InteractiveScene3DEvent):void
{
mouse_over = true; // フラグ ON
}
//********************************************************************************************************************
// マウスが球から離れた時のイベント処理
//********************************************************************************************************************
private function onOutEvent(event:InteractiveScene3DEvent):void
{
mouse_over = false; // フラグ OFF
}
}
}