トップへ戻るニュースフォーラムFLASH-ML 過去ログBak@Flaダウンロードよくある質問と答
ログイン
ユーザ名:

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   ActionScript 3.0 特設会議室
     ActionScript 3.0ではどう書くの?
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
野中文雄
Åê¹ÆNo.29231
投稿日時: 2006-10-7 23:23
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: ActionScript 3.0ではどう書くの?
ActionScript 3 デビューセミナーF-siteセミナーの内容をベースに、加筆・補足するかたちでFlashデベロッパーセンターに「ActionScript 3.0書き方教室」を寄稿しました。ただ、一部に乱丁・落丁があります。落丁ページについては、私のサイトに暫定アップしています。

なお、「Web Designing」の11月号から、「次期Flashに搭載予定のActionScript 3.0をひと足先に解説」を3ヶ月連載で担当します。ご興味のある方は、店頭に並んだら手に取ってご覧になってください。


----------------
 

shikada
Åê¹ÆNo.29994
投稿日時: 2006-11-15 17:14
新米
居住地:
投稿: 14
使用環境:
WinXP Flash Professional 8
WinXP Flash 9 Public Alpha
Re: ActionScript 3.0ではどう書くの?
基本的なことかも知れませんが、質問です。。。

例えば、ボタンが押されたらEntarFrameイベントを発動させたい、
という場合、ボタンインスタンスのスクリプトは、

AS2では
onRelease = function(){
  var counter:Number = 0;
  onEnterFrame = function(){
    trace(++counter);
    if(counter>10){
      delete onEnterFrame;
    }
  }
}

のように、ひとつの関数内で完結できますが、
AS3では
var counter:int;
addEventListener(MouseEvent.MOUSE_UP,mouseUpHandler);

function mouseUpHandler (e:MouseEvent):void{
  counter=0;
  addEventListener(Event.ENTER_FRAME,enterFrameHandler);
}

function enterFrameHandler(e:Event):void{
  trace(counter++);
  if(counter>10){
    removeEventListener(Event.ENTER_FRAME,enterFrameHandler);
  }
}

のように、
一度ボタン押下イベント関数を呼んでから更に
EntarFrameイベント関数を呼んであげなくちゃならない、
という認識なのですが、
ソースが冗長な感が否めません。
こういう書き方だと関数が矢鱈多くなってしまいそうなんですが、
認識としては合っていますでしょうか?

もっとシンプルに書ける方法、
別な書き方とかあるのでしょうか?
よろしくお願いします。

野中文雄
Åê¹ÆNo.30007
投稿日時: 2006-11-15 23:39
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: ActionScript 3.0ではどう書くの?
functionの入れ子というのは、見やすくない面もあります。そういう場合、ActionScript 2.0でも、ふたつの関数に分けて書くこともできるでしょう。
var counter:Number;
function onRelease():Void {
	counter = 0;
	onEnterFrame = enterFrame;
}
function enterFrame():Void {
	trace(++counter);
	if (counter>10) {
		delete onEnterFrame;
	}
}

引用:
shikadaさんは書きました:
AS2では
onRelease = function(){
  var counter:Number = 0;
  onEnterFrame = function(){
    trace(++counter);
    if(counter>10){
      delete onEnterFrame;
    }
  }
}

のように、ひとつの関数内で完結できますが、

以下のActionScript 3.0の記述で、とくに問題はないと思います。処理が2段階になる訳ですから、関数がふたつあって不思議はありません。
引用:
AS3では
var counter:int;
addEventListener(MouseEvent.MOUSE_UP,mouseUpHandler);

function mouseUpHandler (e:MouseEvent):void{
  counter=0;
  addEventListener(Event.ENTER_FRAME,enterFrameHandler);
}

function enterFrameHandler(e:Event):void{
  trace(counter++);
  if(counter>10){
    removeEventListener(Event.ENTER_FRAME,enterFrameHandler);
  }
}

のように、
一度ボタン押下イベント関数を呼んでから更に
EntarFrameイベント関数を呼んであげなくちゃならない、
という認識なのですが、
ソースが冗長な感が否めません。
こういう書き方だと関数が矢鱈多くなってしまいそうなんですが、
認識としては合っていますでしょうか?

ひとつにまとめれば「シンプル」かは、多分に疑問はありますけど。
var counter:int;
addEventListener(MouseEvent.MOUSE_UP,
	function(e:MouseEvent):void {
		counter=0;
		addEventListener(Event.ENTER_FRAME,
			function(e:Event):void {
				trace(++counter);
				if (counter>10) {
					removeEventListener(Event.ENTER_FRAME, arguments.callee);
				}
			}
		);
	}
);

引用:
もっとシンプルに書ける方法、
別な書き方とかあるのでしょうか?


----------------
 

shikada
Åê¹ÆNo.30014
投稿日時: 2006-11-16 9:35
新米
居住地:
投稿: 14
使用環境:
WinXP Flash Professional 8
WinXP Flash 9 Public Alpha
Re: ActionScript 3.0ではどう書くの?
野中さん

ご返答ありがとうございました。

考え方が間違っていないとのことで、
ひとつ不安が解消されました。

引用:
以下のActionScript 3.0の記述で、とくに問題はないと思います。
処理が2段階になる訳ですから、関数がふたつあって不思議はありません。

同じ処理としてなるべく一括りにしたいところですが、
確かに、一つにまとめればいいという問題でもなさそうですね

引用:
ひとつにまとめれば「シンプル」かは、
多分に疑問はありますけど。


どうもありがとうございました
« 1 (2)
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

投稿するにはまず登録を
 
Copyright (C) 2003 FLASH-japan. All rights reserved.
Powered by Xoops