簡単砂嵐
Posted by ton in AS3, Flash, 作ってみた on 04 11th, 2009| icon3No Comments »

flashなら簡単にあのテレビの砂嵐を再現できるよ!

ってことで10行で作りました
タイムラインに書けば3行!

適当すぎてなんかごめん・・・w

このエントリーを含むはてなブックマークはてなブックマーク - 簡単砂嵐 この記事をクリップ!Livedoorクリップ - 簡単砂嵐 BuzzurlにブックマークBuzzurlにブックマーク FC2ブックマークへ追加 Bookmark this on Delicious Digg This
トルネード
Posted by ton in AS3, Flash, 作ってみた on 02 9th, 2009| icon3No Comments »

っぽいものを作ってみたw

ちょっとショートコーディングしてみようと思ってがんばった
なんかずるいとこもあるかもしれないけど、一応15行
もうちょっと短くなる?

このエントリーを含むはてなブックマークはてなブックマーク - トルネード この記事をクリップ!Livedoorクリップ - トルネード BuzzurlにブックマークBuzzurlにブックマーク FC2ブックマークへ追加 Bookmark this on Delicious Digg This
FP10で3D (1)
Posted by ton in AS3, Flash, 作ってみた on 02 7th, 2009| icon3No Comments »

せっかくFP10で3Dの概念が追加されたんだから3Dやってみようってことで

FP10で追加された3Dの機能

・flash.display.DisplayObject クラス
z プロパティやscaleZ
rotationX,rotationY,rotationZなどの各軸の回転角
3次元座標を2次元に変換するlocal3DToGlobal() メソッド が追加された

・flash.geom.Vector3D クラス
3次元座標を格納するクラス
回転角も入れたりできる
※Vectorクラスとは違います Vectorクラスはすべてのエレメントが同じデータ型を持つ配列で、Vector3Dクラスは3次元空間のベクトルを表すクラスです

・flash.geom.Matrix3D クラス
回転、拡大、縮小、平行移動などの3Dの変換を行うクラス

・flash.geom.PerspectiveProjection クラス
遠近法に基づく変形を行うクラス

とりあえずくるくる回転するだけの物を作ってみた

Flash Player 10 にしてください


package {
import flash.display.Sprite;
import flash.events.Event;

public class Study3d1 extends Sprite {
private const SIZE:int = 100;
private const W:int = stage.stageWidth;
private const H:int = stage.stageHeight;
private var mc:Sprite;
public function Study3d1():void {
mc = new Sprite();
mc.graphics.beginFill(0x0077ff);
mc.graphics.drawRect(-SIZE/2, -SIZE/2, SIZE, SIZE);
mc.graphics.endFill();
mc.x = W / 2;
mc.y = H / 2;
addChild(mc);

addEventListener(Event.ENTER_FRAME, onEnterFrameHandler);
}

private function onEnterFrameHandler(e:Event):void {
mc.rotationX = H / 2 - mouseY;
mc.rotationY = W / 2 - mouseX;
}
}
}

おー回ってる回ってる
次はもちっと複雑な動きをする物を作ってみたいと思います

このエントリーを含むはてなブックマークはてなブックマーク - FP10で3D (1) この記事をクリップ!Livedoorクリップ - FP10で3D (1) BuzzurlにブックマークBuzzurlにブックマーク FC2ブックマークへ追加 Bookmark this on Delicious Digg This
サウンド波形
Posted by ton in AS3, Flash, 作ってみた on 08 20th, 2008| icon3コメントは受け付けていません。

AS3ではサウンドの波形が簡単にとれるということなのでちょっと作ってみました

色はランダムなので色々試してみるといいかも

※クリックでstart

Flash Player 10 にしてください

SoundComputeSpectrum.as


package {
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.events.MouseEvent;
    import flash.geom.ColorTransform;
    import flash.media.SoundChannel;
    import flash.media.SoundMixer;
    import flash.utils.ByteArray;

	[SWF(width=512, height=200,backgroundColor=0xffffff)]
    public class SoundComputeSpectrum extends Sprite {
       	[Embed(source="sound.mp3")]
       	private var mySound:Class;
    	private var lineArray:Array = new Array();
        private const HEIGHT:int = 100;
        private const LENGTH:int = 512;
        private const VC:int = 20;

        public function SoundComputeSpectrum() {
        	stage.addEventListener(MouseEvent.CLICK, init);
        }

        private function init(event:MouseEvent):void{
        	stage.removeEventListener(MouseEvent.CLICK, init);
         	var color:uint = Math.random()*0xffffff;
        	for(var i:int = 0; i < LENGTH; i++){
        		var sp:Sprite = new Sprite();
        		sp.x = i;
        		sp.y = HEIGHT;
        		sp.graphics.lineStyle(0,color);
        		sp.graphics.lineTo(0,1);
        		addChild(sp);
        		lineArray.push(sp);
        	}

            var channel:SoundChannel = new mySound().play();
            addEventListener(Event.ENTER_FRAME, onEnterFrame);
            channel.addEventListener(Event.SOUND_COMPLETE, completeHandler);
        }

        private function onEnterFrame(event:Event):void {
            var bytes:ByteArray = new ByteArray();
            SoundMixer.computeSpectrum(bytes, false, 0);
            var rf:Number;
            for (var i:int = 0; i < LENGTH; i++) {
            	rf = bytes.readFloat();
            	lineArray[i].alpha = Math.abs(rf);
            	lineArray[i].scaleY = -rf*HEIGHT;
            }
            var ro:Number = stage.transform.colorTransform.redOffset + Math.random()*VC - VC/2;
            var go:Number = stage.transform.colorTransform.greenOffset + Math.random()*VC - VC/2;
            var bo:Number = stage.transform.colorTransform.blueOffset + Math.random()*VC - VC/2;
            stage.transform.colorTransform = new ColorTransform(1,1,1,1,ro,go,bo,0);
        }

        private function completeHandler(event:Event):void {
            removeEventListener(Event.ENTER_FRAME, onEnterFrame);
        }
    }
}

自分のやりかたが悪いのでちょっと重いですが、がんばればかなり軽くなるはず!
それにしても簡単に波形がとれていいですねー
あとByteArray便利
こいつがあればなんでも出来そうな気がする! おおげさですかw
今度ByteArrayを使ってごにょごにょやってみようかな

このエントリーを含むはてなブックマークはてなブックマーク - サウンド波形 この記事をクリップ!Livedoorクリップ - サウンド波形 BuzzurlにブックマークBuzzurlにブックマーク FC2ブックマークへ追加 Bookmark this on Delicious Digg This

樹木曲線はフラクタルで木を再現したもので、コンピュータアートの分野では有名です
ある程度ランダムな要素を入れるとかなり現実の木に近くなります

※クリックでstart

Flash Player 10 にしてください

Line.as


package {
	import flash.display.Sprite;
	import flash.geom.Point;
	public class Line extends Sprite {
		public var startP:Point;
		public var endP:Point;
		public var distance:Number;
		public var angle:Number;
		function Line(startP:Point, endP:Point) {
			this.startP = startP;
			this.endP = endP;
			angle = Math.atan2(endP.y-startP.y, endP.x-startP.x);
			distance = Point.distance(startP, endP);
			graphics.lineStyle(0,0x000000);
			graphics.moveTo(startP.x, startP.y);
			graphics.lineTo(endP.x, endP.y);
			graphics.endFill();
		}
	}
}

TreeCurve.as


package {
	import flash.display.Sprite;
	import flash.events.MouseEvent;
	import flash.events.Event;
	import flash.geom.Point;
	public class TreeCurve extends Sprite {
		private var list:Array = [];
		private const W:int = 300;
		private const H:int = 300;
		private const RAD:Number = Math.PI/8;
		private const a:Number = 0.75;
		function TreeCurve() {
			var line:Line=new Line(new Point(W/2, H), new Point(W/2, H*4/5));
			list.push(line);
			stage.addChild(line);
			stage.addEventListener(MouseEvent.CLICK,onClick);
			function onClick(event:MouseEvent):void {
				stage.addEventListener(Event.ENTER_FRAME,onEnterFrameHandler);
				stage.removeEventListener(MouseEvent.CLICK,onClick);
			}
		}
		private function onEnterFrameHandler(event:Event):void {
			var line:Line=list[0];
			list.splice(0, 1);
			if (line.distance <= 8) {
				stage.removeEventListener(Event.ENTER_FRAME, onEnterFrameHandler);
				return;
			}
			var p:Point = new Point(line.endP.x + line.distance * a * Math.cos(line.angle + RAD), line.endP.y + line.distance * a * Math.sin(line.angle+RAD));
			var newLine:Line = new Line(line.endP, p);
			list.push(newLine);
			stage.addChild(newLine);
			p = new Point(line.endP.x + line.distance * a * Math.cos(line.angle - RAD), line.endP.y + line.distance * a * Math.sin(line.angle - RAD));
			newLine = new Line(line.endP, p);
			list.push(newLine);
			stage.addChild(newLine);
		}
	}
}
このエントリーを含むはてなブックマークはてなブックマーク - フラクタル~樹木曲線~ この記事をクリップ!Livedoorクリップ - フラクタル~樹木曲線~ BuzzurlにブックマークBuzzurlにブックマーク FC2ブックマークへ追加 Bookmark this on Delicious Digg This

« Previous Entries Next Entries »