logicalyze::blog

Archive for the ‘サンプルコード’ tag

[wonderFl] PV3Dの練習3(地球と月)

leave a comment

またまた、wonderFlでPV3Dのサンプルを書いてみました。
タイトルは、地球と月です。(笑)
ありふれたサンプルのような気もしますが、まあ、あくまで練習ですので・・・
今回は、BasicViewの継承ではなく基本的なスタイルで書いてみました。

ちなみに、またまたFlashDevelopのRC6が出てようです。
日本語化ファイルは、RC3のものでOKのようです。
詳細は、以下をどうぞ!

	public class PV3DEarth extends Sprite
	{
		private var viewport:Viewport3D;
		private var scene:Scene3D;
		private var camera:Camera3D;
		private var material1:WireframeMaterial;
		private var material2:WireframeMaterial;
		private var earth:Sphere;
		private var moon:Sphere;
		private var renderer:BasicRenderEngine;
		private var angle:Number;
		private var speed:Number;
		private var position:Number;
		public function PV3DEarth ():void
		{
			set_3dscene();
			init();
		}
		private function set_3dscene():void
		{
			viewport = new Viewport3D(450, 450, true, false);
			addChild(viewport);
			scene = new Scene3D();
			camera = new Camera3D();
			renderer = new BasicRenderEngine();
			camera.z = -3000;
			camera.focus = 100;
			camera.zoom = 6;
		}
		private function init():void
		{
			material1 = new WireframeMaterial(0xFFCC00);
			material1.smooth = true;
			earth = new Sphere(material1, 400, 20, 20);
			earth.rotationZ = 30;
			material2 = new WireframeMaterial(0xFF0000);
			material2.smooth = true;
			moon = new Sphere(material2, 100, 8, 6);
			moon.y = 100;
			speed = -.03;
			angle = 0;
			position = 700;
			moon.z = Math.sin(angle) * position;
			moon.x = Math.cos(angle) * position;
			earth.addChild(moon);
			scene.addChild(earth);
			addEventListener(Event.ENTER_FRAME, onEnterFrame);
		}
		private function move_moon():void{
			moon.z = Math.sin(angle) * position;
			moon.x = Math.cos(angle) * position;
			angle += speed;
			moon.rotationY += 5;
		}
		private function onEnterFrame(e:Event):void
		{
			earth.rotationY -= 1;
			move_moon();
			renderer.renderScene(scene, camera, viewport);
		}
	}
}

PV3D なんとなく地球と月的な・・・

Read the rest of this entry »

Written by admin

6月 12th, 2009 at 4:00 am

久々のwonderFl・・・PV3D練習2(スパイラル)

leave a comment

久々にwonderFlやってみました。

Papervision3Dを使ってスパイラル状に並べてみるやつです。

package  
{
	import flash.events.Event;
	import org.papervision3d.materials.WireframeMaterial;
	import org.papervision3d.objects.primitives.Plane;
	import org.papervision3d.view.BasicView;
	[SWF(backgroundColor = "#000000", frameRate = "30")]
	public class PV3DSpiral extends BasicView
	{
		private var angle:Number = 0;
		private var num_spirals:int = 8;
		private var diffY:int = 30;
		public function PV3DSpiral(viewportWidth:Number=400, viewportHeight:Number=400, scaleToStage:Boolean=true, interactive:Boolean=false, cameraType:String="Target") 
		{
			super(viewportWidth, viewportHeight, scaleToStage, interactive,cameraType);
			init();
			startRendering();
		}
		
		private function init():void
		{	
			var total:int = 80;
			var one_angle:Number = ((Math.PI*2) * num_spirals) / total;
			for (var i:int = 0; i < total; i++)
			{
				var material:WireframeMaterial = new WireframeMaterial(0xFF0000);
				material.doubleSided = true;
				var plane:Plane = new Plane(material, 200, 200, 2, 2);
				scene.addChild(plane);
				plane.x = Math.cos(i * one_angle) * 400;
				plane.z = Math.sin(i * one_angle) * 400;
				plane.y = diffY*i;
				plane.rotationY = (-i*one_angle) * (180/Math.PI) + 270;
			}
		}
		override protected function onRenderTick(event:Event = null):void 
		{
			super.onRenderTick(event);
			var distX:Number = (stage.mouseX - stage.stageWidth * 0.5) * 0.0004;
			var distY:Number = (stage.mouseY - stage.stageHeight * 0.5) * -0.2;
			angle += distX;
			camera.x = Math.cos(angle) * 800;
			camera.z = Math.sin(angle) * 800;
		        if ((camera.y + distY) < -1500 || (camera.y + distY) > 3500)
			{
				distY = 0;
			}
			camera.y += distY;
		}
	}
}

PV3D_Spirals

Read the rest of this entry »

Written by admin

6月 7th, 2009 at 11:34 pm

はじめての「wonderFl」体験・・・PV3D練習1

leave a comment

遅ればせながら、「wonderFlサービス」に入ってみました。
wonderFlは、ActionScript 3.0 のコーディングとその実行結果がすぐ確認できるのでハードコーダーにとってはかなり便利なWebサービスかもしれません。

ただ、1クラス(例えばFlashCS3以降で言うところのドキュメントクラス)で完結するというコーディングスタイルなのと外部データ(イメージとか)が読み込めないようなので、使い方としては、新手のライブラリの動作を確認するとか、アルゴリズムを確認するとか、ちょっと限定されるかもしれませんね。(何がどこまで可能なのかについては未確認です)
後は、初心者がActionScript 3.0をマスターするのにも良いかもしれません・・・

パワーユーザーになって使いまくるかと言うと・・・う~ん、微妙なところです。(笑)

■ とりあえず、一発目としてPaperVision3Dを使ったText回転サンプルを作ってみました。

package
{
    import flash.events.Event;
    import org.papervision3d.materials.special.Letter3DMaterial;
    import org.papervision3d.typography.Font3D;
    import org.papervision3d.typography.Text3D;
    import org.papervision3d.typography.fonts.HelveticaRoman;
    import org.papervision3d.view.BasicView;
	[SWF(backgroundColor = "0x000000", frameRate = "30")]
    public class Text3D_01 extends BasicView
    {
        private var text3D:Text3D;
        private var material:Letter3DMaterial;
        private var font3D:Font3D;
        public function Text3D_01 ()
        {
            init();
            startRendering();
        }
        private function init():void
        {
            material = new Letter3DMaterial(0xFFFFFF);
	    material.doubleSided = true;
            font3D = new HelveticaRoman();
            text3D = new Text3D("Hello WonderFl.", font3D, material);
            text3D.scale = 5;
            scene.addChild(text3D);
        }
        override protected function onRenderTick(event:Event = null):void
        {
            super.onRenderTick(event);
            text3D.yaw(0.5);
            text3D.roll(0.1);
        }
    }
}

Read the rest of this entry »

Written by admin

5月 11th, 2009 at 3:10 am

Tour de Flex が1.2 にアップデート!

leave a comment

Tour de Flex」は、サンプルコード満載(特にコンポーネント)の学習用AIRアプリケーションです。

今回のアップデートでさらに中身が充実しました。
Flexの標準コンポーネント、AIRのファイルアクセス、外部データ接続、様々なサードパーティー・コンポーネント等々。

Flexを使っている人はインストールして損はないでしょう・・・

Tour de Flex 1.2

Tour de Flex が1.2 にアップデート!


Adobe Flex Builder Professional 3.0 日本語版 Windows/Macintosh版 Adobe Flex Builder Professional 3.0 日本語版 Windows/Macintosh版

アドビシステムズ 2008-03-14
売り上げランキング : 1003
おすすめ平均

Amazonで詳しく見る by G-Tools

Written by admin

3月 31st, 2009 at 12:29 pm

ビート(タイム)テーブルを作ってみる

leave a comment

前回は、ピッチテーブルを作りましたが今回は音楽ソフトウエアに欠かせないテンポ値から計算するビート(1拍)テーブルです。つまり一拍ごとの時間値の配列(タイムテーブル)です。

■ 引数に必要な要素は:(下記サンプルコードの場合)

  • tempo(テンポ)テンポ120なら、120.0
  • beat(一小節の拍数)4拍子では、4
  • bars(小節数)例えば8小節なら、8
  • _offset(オフセット)音楽的な1小節1拍目が「0」のときは、0.0

offset値は、オーディオデータとシンク(同期)する場合などの時に音楽的な曲頭とオーディオデータの時間軸の頭が一致しない場合にオフセット値を設定します。

下記サンプルの場合、Math.round()で整数に丸めていますが小数点以下も欲しい場合は外してください。

function create_beat_array(tempo:Number, beat:int, bars:int, _offset:Number):Array {
	var interval_time:Number = Math.round (60 * 1000 / tempo);
	var total_beats:int = beat * bars;
	var beat_array:Array = [];
	for (var i:int= 0; i < total_beats; i ++) {
		beat_array [i] = _offset + (interval_time * i);
	}
	return beat_array;
}

Written by admin

6月 5th, 2008 at 11:18 pm