雪が降るエフェクトAS3

季節はずれですけど、
雪国生まれの僕が納得いく
雪エフェクトをちょっと昔に発見したので紹介します。
※多分adobeのサイトにあったサンプルをちょっといじった。

サンプルasはこちら
main.as
snowflake.as

Tags:

2つの色を混ぜてみる

2つの色を混ぜて中間色を求めるスクリプトが
必要になったのでググったらありました。

参照サイト: nondelion.com 2つの色の中間色を求める方法

~方法~

1, 2色とも16進数からRGB値を割り出す(ビットマスクを利用します)

2, RGB値を足す

3, また16進数に戻す

こんな感じ。

以下がサンプルソースになります

package
{
import flash.display.Sprite;

public class Main extends Sprite
{
//黒色
private var color1:Number = 0×000000;
//赤色
private var color2:Number = 0xff0000;

public function Main():void
{
init();
}

private function init():void
{
var sp:Sprite = new Sprite();

//赤と黒の中間色
var mixColor:Number = setMiddleColor(color1, color2);

sp.graphics.beginFill(mixColor);
sp.graphics.drawRect(0, 0, 100, 100);
sp.graphics.endFill();
addChild(sp);

}
private function hex2rgb(n:Number):Array
{
var rgbArray:Array = new Array(3);
rgbArray[0] = ( n >> 16 ) & 0xff;
rgbArray[1] = ( n >> 8 ) & 0xff;
rgbArray[2] = n & 0xff;
return rgbArray;
}

private function setMiddleColor(firstColor:Number, secondColor:Number):uint
{
var firstRGB:Array = hex2rgb(firstColor);
var secondRGB:Array = hex2rgb(secondColor);
var red:Number = int((firstRGB[0] + secondRGB[0]) * 0.5);
var green:Number = int((firstRGB[1] + secondRGB[1]) * 0.5);
var blue:Number = int((firstRGB[2] + secondRGB[2]) * 0.5);
var hex:uint = red << 16 | green << 8 | blue;
return hex;
}
}

}

>>サンプルASのダウンロードはこちらから

Tags:

MouseEventではまった事

マウスオーバーとクリックでインスタンス名が違う・・。

//コンストラクタ
private var tex:TextField = new TextField();
private var sp:Sprite = new Sprite();

addChild(sp);
tex.text = “hoge”;
sp.addChild(tex);

//イベントリスナー
sp.addEventListener(MouseEvent.ROLL_OVER, btnOver);
sp.addEventListener(MouseEvent.CLICK, btnCK);

イベント内容

private function btnOver(e:MouseEvent):void
{
trace(e.target.name, sp.name, e.target == sp);
}
private function btnCK(e:MouseEvent):void
{
trace(e.target.name, sp.name, e.target == sp);
}

なんで違うインスタンス名になっちゃうのーーーーーーー
きーってなってましたが、ここみて解決しました。

http://livedocs.adobe.com/flash/9.0_jp/ActionScriptLangRefV3/flash/events/MouseEvent.html#CLICK

target
ポインティングデバイスの下にある InteractiveObject インスタンスです。target は、必ずしもイベントリスナーを登録した表示リスト内のオブジェクトとは限りません。現在イベントを処理している表示リスト内のオブジェクトにアクセスするには、currentTarget プロパティを使用します。

currentTargetを使えってことですか
そうですか。こうですか。わかりました。

>>サンプルソース

//コンストラクタ
private var tex:TextField = new TextField();
private var sp:Sprite = new Sprite();

addChild(sp);
tex.text = “hoge”;
sp.addChild(tex);

//イベントリスナー
sp.addEventListener(MouseEvent.ROLL_OVER, btnOver);
sp.addEventListener(MouseEvent.CLICK, btnCK);

イベント内容

private function btnOver(e:MouseEvent):void
{
trace(e.target.name, sp.name, e.target == sp);
}
private function btnCK(e:MouseEvent):void
{
trace(e.target.name, sp.name, e.target == sp);
}

イベント内容

private function btnOver(e:MouseEvent):void
{
trace(e.currentTarget.name, sp.name, e.currentTarget == sp);
}
private function btnCK(e:MouseEvent):void
{
trace(e.currentTarget.name, sp.name, e.currentTarget == sp);
}

くそ!

Tags:

小さなコトスペシャル

小さなコトでイライラしたので忘れていもいいように
書き留めときます。

stage.stageWidth/stage.stageHeightはブラウザによって値を取得できるタイミングがちがう

IEはコンストラクタで値を取得しようとしてもとれないわよ
firefoxはとれるけどね。
そうめん使ってる人はrunの時もステージサイズはとれないわ!
次のfunctionで取得して!!

flvをNetStreamクラスをつかって再生した時の音量を0にしたい
こいつがミソ! 無音にできます。

import flash.media.SoundTransform;

/*このへんはおきまり
var nc:NetConnection = new NetConnection();
nc.connect(null);
var ns:NetStream = new NetStream(nc);
*/
//音量調整するところ ※SoundTransform 第一引数と第二引数で右と左のボリュームだったきする。
var mySoundTransform:SoundTransform = new SoundTransform(0);
ns.soundTransform = mySoundTransform;

TextFieldのautoSizeはas2.0と書き方が違う
textField.autoSize = (Boolean値) だったのが
左ぞろえ右揃え中央ぞろえとか機能がついてんだね

定数 文字 説明
TextFieldAutoSize.NONE “none” なし
TextFieldAutoSize.LEFT “left” 左に揃えて整形
TextFieldAutoSize.RIGHT “right” 右に揃えて整形
TextFieldAutoSize.CENTER “center” 中央に揃えて整形

オブジェクトを最前面にしたい時

いっつも忘れるコレ
stage.setChildIndex(最前列にしたいオブジクトの名前,numChildren-1);

例)

var sp:Sprite = new Sprite();
var objS:Shape = new Shape();
sp.addchild(objS);
・・

中略
//spの中でobjS最前列にする
sp.setChildIndex(objS,numChildren-1);

しらべるといつもnumChildrenがくせものに感じる

xmlのパースの仕方

これもすぐ忘れる
本みないとわかんなくなる

アトリビュートの場合(アトリビュートがIDの場合)
var str:String = hoge@ID
長いしだんだん眠くなってきた。

長くなりそうだから続きは次にかきます。

Tags:

初めてのpapervision3D その3

次は3Dの球体にテクスチャを張り付けてみよう。

BitmapFileMaterialをつかって画像をはりつける
せっかくなのでgooglemapの航空写真をつかってみました。

bg
サンプルはこちら

そしてソース

package
{
	import flash.display.Sprite;
	import flash.events.Event;
	import caurina.transitions.Tweener;
	import org.papervision3d.view.*;
	import org.papervision3d.objects.primitives.*;
	import org.papervision3d.materials.*;

    public class Main extends BasicView
    {
		private var mySphere:Sphere;
		public function Main() {
			init();
		}
		private function init():void
		{
			var material:BitmapFileMaterial = new BitmapFileMaterial("bg.jpg");
			mySphere = new Sphere(material, 300, 30, 30);
			var sp:Sprite = new Sprite();
			scene.addChild(mySphere);
			startRendering();
			sp.addEventListener(Event.ENTER_FRAME,enterFrameHandle);

		}
		private function enterFrameHandle(e:Event):void
		{
			mySphere.rotationY += 0.5;
		}
	}
}

追加変更した部分は・・

1、materialsをインポート
import org.papervision3d.materials.*;

2、BitmapFileMaterialに対象画像のパスをつっこみ
var material:BitmapFileMaterial = new BitmapFileMaterial(”bg.jpg”);

3、Sphereをnewする際に第1引数にいれちゃういましょう

mySphere = new Sphere(material, 300, 30, 30);

ちなみに第2引数は表示サイズ、第3引数と第4引数は縦線横線の数になります。
初めてのpapervision3D その2 の時より線を増やしてカクカク感をとりより球体らしくしました。

VF1からVF3位の差がでたきがします。

Tags: ,

初めてのpapervision3D その2

前回のつづきです。
※Papervision3D 2.0 Great Whiteをダウンロードしてパスが通っているのが前提とりなります。

ではではこんな感じで

サンプルSWF

3Dの球体がよこにクルクル回るクラスをかいてみましょうか。

package
{
	import flash.display.Sprite;
	import flash.events.Event;
	import org.papervision3d.view.*;
	import org.papervision3d.objects.primitives.*;

    public class Main extends BasicView
    {
		private var mySphere:Sphere;
		public function Main() {
			init();
		}
		private function init():void
		{
			mySphere = new Sphere(null, 300, 10, 10);
			var sp:Sprite = new Sprite();
			scene.addChild(mySphere);
			startRendering();
			sp.addEventListener(Event.ENTER_FRAME,enterFrameHandle);
		}
		private function enterFrameHandle(e:Event):void
		{
			mySphere.rotationY += 1;
		}
	}
}

Tags: ,

インスタンスのnameプロパティ

Actionscript3.0では
getChildByName()メソッドで
インスタンスのnameプロパティが参照できます。

for (var i:int = 0; i < 10; i++)
{
var mc:MovieClip = new MovieClip();
mc.name ="mc" + i;
this.addChild(mc);
}
for (i = 0; i < 10; i++)
{
trace(this["mc" + i]);
//出力結果 undefined ・・・これではまりました。
trace(this.getChildByName("mc" + i).name);
}

名前でインスタンスを動かしたかったんです。

参照ページ
getChildByName()メソッド

Tags:

Tweenerをつかってみよう 1

Tweenerとはトゥイーンを実現するActionScript用ライブラリ。

いつも動きの部分は自作の関数つかってたが
ここらで利用してみるこころみ。

さっそくにとよんさんが書いた記事を参考にTweenerに挑戦してみるぞう!

まずはtweener - Google Code
でtweener_1_31_74_as3.zipをダウンロード げっつ!

続きを読む »

Tags: ,

Actionscript3.0の最適化

ActionScript3 最適化・高速化Tips 簡易まとめ

という大変興味深い記事を発見しました。
すぐに理解して実行できそうな部分だけピックアップしとこ。

続きを読む »

Tags: