前回ソースの散る葉をサクラから楓&紅葉に変更してみました
forked from 前回ソースから散るサクラをハート型に変更してみました (diff: 110)
♥0 |
Line 113 |
Modified 2011-08-17 16:53:25 |
MIT License
archived:2017-03-09 22:02:34
| (replaced)
ActionScript3 source code
/**
* Copyright siouxcitizen ( http://wonderfl.net/user/siouxcitizen )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/rwtk
*/
// forked from siouxcitizen's 前回ソースから散るサクラをハート型に変更してみました
//
//前回ソースの散る葉をサクラから楓&紅葉に変更してみました
//
//以下コードを参考にさせていただきました
//
//かえで
//http://wonderfl.net/c/djMk/read
//↑使用している楓&紅葉画像は上記コードからのものを使用させていただきました
//
//前回ソースからキャプチャ機能つけてエディターっぽいものに戻しました
//http://wonderfl.net/c/tbWc
//↑自分の前につくったコードの画像読み込み部分も参考にしました
//
package {
import flash.display.Sprite;
import flash.events.Event;
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.geom.Matrix;
import flash.filters.GlowFilter;
import flash.display.Loader;
import flash.system.LoaderContext;
import flash.net.URLRequest;
import org.papervision3d.view.Viewport3D;
import org.papervision3d.scenes.Scene3D;
import org.papervision3d.objects.DisplayObject3D;
import org.papervision3d.objects.primitives.Plane;
import org.papervision3d.cameras.Camera3D;
import org.papervision3d.materials.BitmapMaterial;
import org.papervision3d.render.BasicRenderEngine;
[SWF(width="500", height="500", frameRate="60", backgroundColor="#66CCFF")]
public class MoviePlane extends Sprite
{
private var container : Sprite;
private var viewport : Viewport3D;
private var scene : Scene3D;
private var camera : Camera3D;
private var renderer : BasicRenderEngine;
private var pixelArr :Array = []; // パーティクルを格納する配列
private const PIXEL_NUM : int = 5; // 縦・横のピクセル数
private const PLANE_SIZE : int = 200;//Planeオブジェクト1辺の長さ
private const PLANE_SEGMENT : int = 1; //面の分割数
private var filterList : Array;
private var loader : Loader;
private var bmp : Bitmap;
private var bmd : BitmapData;
private var imgLoadingCount : int = 0; //読み込んだ画像数
private var images : Array; // 読み込んだBitmap画像保持用配列
private const IMAGE_URL:Array =
[
"http://assets.wonderfl.net/images/related_images/2/2b/2b27/2b2786cdf19f4c69bf6ab81fe1f2b144eab834f7", //furl
"http://assets.wonderfl.net/images/related_images/e/e5/e541/e54190ff73f718a4fac555ddde64b0d7fcf396c0" //burl
]; //Bitmap画像URL配列
//MoviePlaneクラスのコンストラクタ
public function MoviePlane():void
{
//ビューポート生成
viewport = new Viewport3D(500, 500, false, true);
viewport.opaqueBackground = 0x333333;
addChild(viewport);
//シーン生成
scene = new Scene3D();
//レンダリングエンジン生成
renderer = new BasicRenderEngine();
//フィルターの準備
filterList = new Array();
var glowFilter : GlowFilter = new GlowFilter(0xFFFFFF, 1, 32, 32, 2, 1, false, false);
filterList.push(glowFilter);
//画像を読み込んで3DPlaneオブジェクトに貼り付け
images = new Array(IMAGE_URL.length);
for (var i:int = 0; i < IMAGE_URL.length; i++) {
var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onImgLoadingComplete);
loader.load(new URLRequest(IMAGE_URL[i]), new LoaderContext(true));
loader.name = i.toString();
}
//カメラ設定
camera = new Camera3D();
camera.x = PLANE_SIZE * (PIXEL_NUM / 2);
camera.y = 1000;
camera.z = -PLANE_SIZE;
camera.focus = 50;
camera.zoom = 1;
//フレーム毎の処理用リスナを設定
stage.addEventListener(Event.ENTER_FRAME, _enterframe);
}
private function onImgLoadingComplete(e:Event):void {
bmp = new Bitmap();
bmd = new BitmapData(e.currentTarget.loader.width, e.currentTarget.loader.height, true, 0x000000)
bmd.draw(e.currentTarget.loader);
bmp.bitmapData = bmd;
images[e.currentTarget.loader.name] = bmp;
if (++imgLoadingCount == IMAGE_URL.length) initPlaneWithBitmap();
}
//3DPlaneオブジェクトに紅葉画像を貼りつけ
private function initPlaneWithBitmap():void {
var imgIndex : int = 0;
pixelArr = [];
for (var i:int = 0; i < PIXEL_NUM; i++) {
pixelArr[i] = [];
for (var j:int = 0; j < PIXEL_NUM; j++ ) {
// Planeインスタンスを作成して画像をテクスチャとして貼りつけ
imgIndex = Math.random() * IMAGE_URL.length;
var textureBitmap:Bitmap = images[imgIndex];
var textureMaterial : BitmapMaterial = new BitmapMaterial(textureBitmap.bitmapData, true);
textureMaterial.doubleSided = true;
var o:Plane = new Plane(textureMaterial, PLANE_SIZE, PLANE_SIZE, PLANE_SEGMENT, PLANE_SEGMENT);
o.useOwnContainer = true; //フィルター使用のために設定
o.filters = filterList; //フィルター使用のために設定
scene.addChild(o);
pixelArr[i][j] = o;
// 座標
o.x = Math.random()*(PIXEL_NUM*PLANE_SIZE);
o.y = Math.random()*5000;
o.z = Math.random()*(PIXEL_NUM*PLANE_SIZE);
}
}
//imgLoadingState = true;
//if (imgLoadingState&&daeLoadingState) dispTitleScrnStartBtn();
}
//フレーム毎の処理
private function _enterframe(e:Event):void{
for (var i:int = 0; i < PIXEL_NUM; i++) {
for (var j:int = 0; j < PIXEL_NUM; j++ ) {
var p:DisplayObject3D = pixelArr[i][j];
if (p.y > 0) {
p.rotationX += Math.random() * 10;
p.rotationY += Math.random() * 10;
//p.y -= 10;
//p.y -= Math.random() * 10;
p.y -= (Math.random() * 20 + 1) - (180 - (p.rotationX % 180)) * .008;
} else {
p.x = Math.random()*(PIXEL_NUM*PLANE_SIZE);
p.y = Math.random()*5000;
p.z = Math.random()*(PIXEL_NUM*PLANE_SIZE);
}
}
}
renderer.renderScene(scene, camera, viewport);
}
}
}
