ActionScript3.0 | memo-memo - Part 2 Skip to content

memo-memo

web制作に便利そうな情報をメモるブログ

Archive

Tag: ActionScript3.0

久々の更新です。

Flashのライブラリである、tweenerを使ってみました。

http://www.tonpoo.com/tweener/index2.html

こちらのサイトに色々書いてあります。

使用するには、ダウンロードが必要ですが、

URLが、上記の説明ページと同じで、若干解りづらいですね。

さて、ダウンロードしてきたら、普通にインポートすれば

使えます。

import caurina.transitions.Tweener

こんな感じ。

参考にしたサイトは、

基本的な使い方が書いてある

http://www.scratchbrain.net/blog/ver2/entries/000311.html

トランジションのリストが書かれてる

http://hosted.zeh.com.br/tweener/docs/en-us/misc/transitions.html

こんな感じです。

で、折角ダウンロードしてきたので、簡単なサンプルを。

最近、auのandoroidのCMやってますよね。

あれのテキストがユラユラするやつが、ちょっとかっこ良いなぁと思ったので、

まねてみます。

//tweenerをインポート
import caurina.transitions.Tweener

//グローバル変数の定義
var nTxtX = txt_mc.x;//txt_mcの最初のx位置
var nTxtY = txt_mc.y;//txt_mcの最初のy位置
var nMoveX:int;//ランダムの数字を格納する変数(xに足す用)
var nMoveY:int;//ランダムの数字を格納する変数(yに足す用)
var nCheck:int = 1;//スタート、ストップを制御する為の変数

//初期設定
switch_mc.buttonMode = true;//ボタンモードオン
switch_mc.gotoAndStop(2);//switch_mcを2フレームめで止める(stopが表示される)
tween();//tween関数を実行

//関数の定義
//ランダムに文字を動かす関数tweenの定義
function tween(){
	//1〜8までのランダムの値を、変数nMoveX、変数nMoveYに格納
	nMoveX = Math.floor(Math.random()*8 + 1);
	nMoveY = Math.floor(Math.random()*8 + 1);
	//ランダムで、変数nMoveX、変数nMoveYをマイナスにする
	if(Math.round(Math.random())){
		nMoveX = -nMoveX
	}
	if(Math.round(Math.random())){
		nMoveY = -nMoveY
	}
	//tweenerアニメーション。
	//xは、変数nTxtXに、ランダムな数字が格納された変数nMoveXを、
	//yは、変数nTxtYに、ランダムな数字が格納された変数nMoveYを、指定。
	//0.3秒で、指定した位置に移動する。
	//処理が終わったら、関数repeatTweenを実行。
	Tweener.addTween(txt_mc, {x:nTxtX + nMoveX,
                                  y:nTxtY + nMoveY,
                                  time:0.3,
                                  onComplete:repeatTween,
                                  transition:"linear"});
}

//関数tweenを繰り返し実行させるrepeatTween関数
function repeatTween(){
	//変数nCheckが1だったら、関数tweenを実行
	if(nCheck == 1){
		tween();
	}
}

//スタート、ストップを制御する関数btnPush
function btnPush(e){
	//関数nCheckが0だったら、switch_mcを2フレーム目で止めて、
	//変数nCheckに1を代入。
	if(nCheck == 0){
		switch_mc.gotoAndStop(2);
		nCheck = 1;
	//関数nCheckが1だったら、switch_mcを1フレーム目で止めて、
	//変数nCheckに0を代入。
	}else if(nCheck == 1){
		switch_mc.gotoAndStop(1);
		nCheck = 0;
	}
	//関数repeatTweenを実行。
	repeatTween()
}

//イベントリスナーの定義
switch_mc.addEventListener(MouseEvent.CLICK, btnPush);

上記の様なコードになりました。
上記の赤文字の所が、tweenerを使った所です。この記事の主役のくせに、あんまりコードの量が多くない…

This movie requires Flash Player 9

見比べてみると、若干違う気が…
まぁ気にしない気にしない。

よく見かける、flashのローディング画面。

手っ取り早くローディングする方法が見つかったので、メモ。

if(loaderInfo.bytesLoaded >=loaderInfo.bytesTotal){
 gotoAndPlay(xxxx);//コンテンツの開始のフレームを入れる。
 }else{
 gotoAndPlay(1);
 }

上記のコードを、使うと実装出来た。

使い方は、とっても簡単で、

例えば、ローディング画面を24f分使ってループさせたい場合、上記コードを25fに記述して26fから、コンテンツスタートとする。(xxxに26と書く)

そうすれば、頭の24f(ローディング画面)が終わって、25fに達したとき、if分が処理されて、ローディングが終わっていたときは、26f(コンテンツスタート部分)に飛んで、ローディングが終わっていない時は、1fに戻る。

とりあえず、簡単に実装出来るので、キービジュアルとかに使う様な、簡単なflashに付ける分には、とっても便利。

もう少し、別の方法も、調べたら一杯出てきたので、追々試してみよう。

flashは、あんまり土台がしっかりしてないから、googleで調べて作るのは大変だなぁ。

がんばって勉強しよう★

総ミリ秒が格納されている変数nTimeを、1000で割った余りがミリ秒になり、nTimeを1000で割った整数分を、もう一度nTimeに格納し直す。
次に、nTimeを60で割った余りが秒になり、nTimeを60で割った整数分を、もう一度nTimeに格納し直す。
次に、nTimeを60で割った余りが分になり、nTimeを60で割った整数分が、時になる。
言葉で記述するのは、ちょっと難しいので、下記コード参照

var nTime = 45296789;//総ミリ秒
var milliseconds = nTime % 1000;
nTime = Math.floor(nTime / 1000);
var seconds = nTime % 60;
nTime = Math.floor(nTime / 60);
var minutes = nTime % 60;
var hours = Math.floor(nTime / 60);

こんな感じ。後は、milliseconds、seconds、minutes、hoursに格納した値を整形すれば良し。
この考え方は、汎用的に色々なスクリプトで応用出来そうな気がする。

どうやら、Actionscript3.0では、関数を変数に代入出来るらしい。変数に、Function型が存在するらしい。

また、関数を代入した変数は、関数の識別子と同じ様に使えるらしい。

//ここで、Function型の変数abcにtestを代入
var abc:Function = test;
//ここで、関数testの内容を記述
function test(){
trace("ファンクションテスト")
}
//関数を代入した変数abcを関数の識別子的に実行
abc();

上記を実行すると、ちゃんと、「ファンクションテスト」がtraceされた。

もちろん、test();と、関数を直接実行しても同じ様に「ファンクションテスト」がtraceされた。

こんな使い方が出来るらしい。

自分で上記の様なスクリプトを書くかどうかは別にして、サンプルとかの解析をする時に、上記の様に書いてあるかもしれないので、一応メモ。

ちなみに、javascriptはどうなんだろう?同じ様に、動くのかどうか、後で調べよう。

いまいちピンときていないのだけれど、とりあえず解った事だけメモ。

メインタイムラインから、クラスを呼び出して、クラスのプロパティ、もしくはメソッドを呼び出す際は、

var hoge:MyClass = new MyClass();
trace(hoge.propa);
trace(hoge.metho());

何となく上記な感じ。
で、このMyClassは、

package{
	public class MyClass{
		public var propa = "hello";
		public function MyClass(){
			trace ("abc");
		}
		public function metho(){
			var test = "HelloWorld";
			return test;
		}
	}
}

こんな感じになっているとする。

メインタイムラインの一行目の、var hoge:MyClass = new MyClass();と、呼び出したら、クラスの青字の部分の処理が実行された。様は、文字列abcがtraceされた。

メインタイムラインの二行目の、trace(hoge.propa);は、クラスの赤字のプロパティが呼び出された。helloをtraceした。

メインタイムラインの三行目の、trace(hoge.metho());は、クラスの緑字のプロパティが呼び出された。HelloWorldとtraceした。

いまいち挙動が把握しにくくて、四苦八苦です。

上記の様な、簡単なもので、なんども練習しよう。