ホーム > AS3.0

AS3.0:指定範囲までの重複しないランダムな数値を取得する

お仕事でFLash作ってて、これからも個人的に使えそうだったのでメモ。

結構Flash使ってるとランダムな数値が必要になることがちょいちょいある
結構あるのだとAdobeさんのTechNoteにのっているような

[ 指定範囲までの乱数を取得 ]
private function RandomInt(nMax:Number,nMin:Number){
     //nMinからnMaxまでのランダムな整数を返す
     nRandomInt= Math.floor(Math.random()*(nMax-nMin+1))+nMin;
    return nRandomInt;
}
RandomInt(hogeMax, hogeMin);

で取得。

で、今回必要だったのは「指定範囲までの乱数でかつ重複しない数値の取得」だったので
上にちょっと足しました

[ 指定範囲までの重複しないランダムな数値を取得する ]
private var randomArray:Array = [];
//nMin~nMaxまでのランダムな数値を取得
private function selectRundomFunc(nMax:Number, nMin:Number , nCount:Number) {
     for (var i:Number = 0; i < nMax; i ++) {
          randomArray[i] = i + 1;
     }
     while (nMax--) {
          var yy:Number = Math.floor(Math.random() * (nMax-nMin+1))+nMin;
          var zz:Number = randomArray[nMax];
          randomArray[nMax] = randomArray[yy];
          randomArray[yy] = zz;
     }
     //test
     for (i = 0; i < nCount; i ++) {
          trace('random : ' + randomArray[i]);
     }
}

例えば1~20の範囲の重複しない数値がほしい場合は

selectRundomFunc(20 ,  1 , 20);

と指定してtraceをみると
random : 6
random : 1
random : 13
random : 8
random : 3
random : 5
random : 20
random : 9
random : 18
random : 4
random : 2
random : 15
random : 11
random : 14
random : 7
random : 17
random : 10
random : 12
random : 16
random : 19
とか重複しないで数値が取れるはず。

配列に+1しないと0が出てしまうので配列に+1を足した。
省き方とか上の取得方法でいいのかは疑問だけどうまいこと取得できたのでひとまずメモ!

AS3:Progressionはじめてみました

Progressionようようはじめました!
Progressionクラススタイルガイドやみなさんのサイトや色々みてサンプルサイトを作ってみました。

[ Sample:ProgSample ]

http://mooco.in/wp/wp-content/uploads/2010/01/deploy/

書き方がまだぜんぜん理解できていない・・・・
でもこのシーン毎でのファイル分けや、初期からSWFadressやSWFWheelがついてたりと
Flashサイト制作をするのなら使うととても便利だと思いました。すばらしいです。

色々参考にしたサイトを下記に載せさせていただきます
Progression – Framework for Flash >>> クラススタイルガイド
フルFlashサイトをProgressionで作り始める時にまず読むべき16の記事
[progression勉強]階層のあるサイトを作ってみる
[AS]progression 出発シーン、到着シーンのsceneIdを取得する方法”departedSceneId”,”destinedSceneId”
fffflash Progression 3 ベータやってみたよ1
12分でできる! Progressionでスライドショーを作るチュートリアルビデオ | ClockMaker Blog

Resize処理がうまくいってないです・・・・今度直します。

AS3.0:GrowTree

AS2.0の本ですごく勉強になった
オライリー社発行の「Flash Hacks――プロが教えるテクニック & ツール100選」

この本に掲載されていた「ブルックリンで木を育てる」という木を生成するAS2.0のスクリプトを
AS3.0に修正してみました。

[ Sample ]

grow_tree
クリックで別ウィンドウでSWFを確認できます。(SWFクリックで木を再描画)

[ Source : GrowTree.as ]
package {
	import flash.display.Stage;
	import flash.events.Event;
	import flash.display.MovieClip;
	import flash.display.Sprite;
	import flash.events.MouseEvent;
	import flash.geom.Point;
	import flash.events.Event;

	public class GrowTree extends MovieClip {
		//Tree
		private var trunk:MovieClip;
		private var angle:Number = 80;
		private var branch:Number = 5;
		private var trunkThickness:Number = 8;
		private var trunkLength:Number = -150;
		private var branchSize:Number = 0.8;
		private var branchCounter:Number = 0;
		private var counterNumber:Number = 2000;

		public function GrowTree() {
			this.addEventListener(Event.ADDED_TO_STAGE, init);
		}
		private function init(e:Event):void {
			this.removeEventListener(Event.ADDED_TO_STAGE, init);
			trunkCreate();
			stage.addEventListener(MouseEvent.CLICK, onClick);
		}
		//幹の初期設定
		private function trunkCreate():void {
			trunk = new MovieClip();
			addChild(trunk);
			trunk.x = stage.stageWidth / 2;
			trunk.y = stage.stageHeight - 80;
			trunk.name = 'trunk';
			trunk.addEventListener(Event.ENTER_FRAME, grow);
		}
		//幹・枝を生成
		private function grow(e:Event = null):void
		{
			if (e) {
				var mc:MovieClip = e.target as MovieClip;
				if (mc.name != 'trunk') {
					//枝の生成
					mc.graphics.lineStyle(trunkThickness, 0);
					mc.graphics.moveTo(0, 0);
					mc.graphics.lineTo(0, trunkLength);
					mc.rotation = (Math.random()*angle)-angle/2;
					mc.scaleX *= branchSize;
					mc.scaleY *= branchSize;
				}else {
					//幹(ちょっと太めにするため)
					mc.graphics.lineStyle(trunkThickness*1.1, 0);
					mc.graphics.moveTo(0, 0);
					mc.graphics.lineTo(0, trunkLength);
				}
				var seed:Number = Math.ceil(Math.random()*branch);
				for ( var i:Number = 0;  i < seed ; i++ ) {
					if (counter() < counterNumber) {
						var segment:MovieClip = new MovieClip();
						segment.addEventListener(Event.ENTER_FRAME,grow);
						segment.y = trunkLength;
						mc.addChild(segment);
					}
				}
				mc.removeEventListener(Event.ENTER_FRAME,grow);
			}
		}
		private function counter():Number {
			//counterNumber分処理を繰り返す
			return (branchCounter++);
		}
		private function onClick(e:MouseEvent):void {
			//クリックで再描画
			removeChild(trunk);
			branchCounter = 0;
			trunkCreate();
		}
	}
}

「private var angle:Number = 80;」で角度を設定しているのでその角度内で枝がランダムに伸びていきます。
生成に使われている概念/構成自体は変わらないし、ソースがもともと短く簡潔なので分かりやすかったー。
この木を使って今度また別のものを作成してみたいと思います。

AIR MolabClock02

AIR:MolabClockに続き第二弾としてアナログ時計を作成しました。
今回はブログパーツ版も作成しています

■ブログパーツバージョン

・160px以下のサイズですのでサイドバーにアクセントとして貼ることも可能です。

[ Sample ]

MolabBlog Clock02
下記をスクリプトをブログの貼りたい箇所に貼り付けてください

■AIRデスクトップアプリ

・デザイン性を重視したアナログ時計です。
・ローカルタイムを取得し、時・分・秒単位で表示をします。

[ Install ]




[ Sample ]

[ 動作環境 ]

Windows・Mac OS X
Adobe AIRがインストールされていない場合、AIRのインストールが求められます。
その後、インストーラの画面に従ってガジェットをインストールしてください。

2008.10.11 時間表示にエラーがあったため修正いたしました

AIR MolabClock01

■AIRデスクトップアプリ

・シンプルなデジタル時計です。
・ローカルタイムを取得し、表時・分・秒単位で表示をします。

[ Install ]




[ Sample ]

[ 動作環境 ]

Windows・Mac OS X
Adobe AIRがインストールされていない場合、AIRのインストールが求められます。
その後、インストーラの画面に従ってガジェットをインストールしてください。

AS3.0:XMLの読み込み

as3.0でXML読み込みしてみました。
as2.0に比べると格段に便利~。ステキです。
as2.0のXMLオブジェクトは「XMLNode」として別扱いであるそう。

[ Source : Sample_XML.as ]
package
{
import flash.display.Sprite;
import flash.events.IOErrorEvent;
import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.events.Event;

public class Sample_XML extends Sprite
{
        private var urlLoader:URLLoader = new URLLoader();
        private var sampleXML:XML;
        //定数を定義(変更不可)
        private const XML_URL:String = "http://momoseneko.com/molab_blog/rss.xml";

        public function Sample_XML(){
            //request生成
            var urlRequest:URLRequest = new URLRequest(XML_URL);
            //XMLを読み込み後実行
            urlLoader.addEventListener(Event.COMPLETE, completeHandler);
            urlLoader.load(urlRequest);
            //XMLの読み込みに失敗した場合実行
            urlLoader.addEventListener(IOErrorEvent.IO_ERROR, onLoadError);
        }

        public function completeHandler(event:Event):void {
            //xml取得
            var sampleXML:XML = new XML(urlLoader.data);
            var element:Object = sampleXML.channel.item;
            for(var i:Number=0; i < sampleXML.channel.item.length(); i++) {
                    trace("title:"+sampleXML.channel.item[i].title);
                    trace("description:"+sampleXML.channel.item[i].description);
            }
        }

        private function onLoadError(event:Event):void  {
            trace("xml load error");
        }
}
}
Page 1 of 3123

About

mooco
[mooco]

東京を中心にWebデザイナーとして活動しています。

趣味は愛猫と遊ぶこと。 web周りのあれこれで遊ぶことです。

Search

Categories