flash actonscrpt2.0のif文に関して


actonscrpt2.0で、ムービークリップAをクリックしたらムービークリップA右へ移動しムービークリップBをクリックしたらムービークリップB右へ移動いった条件文を作ろうとしていますがうまく動作しません。
条件の書き方に問題があるのかと思いますがこの場合どのように書けばよいか教えて頂けたらと思います。

以下は現状のサンプルです。条件式(onRelease() == this.mc_a)等では駄目なのでしょうか?
例)
if(onRelease() == this.mc_a) {
//右へ移動
} else if(onRelease() == this.mc_b) {
//右へ移動
}

回答の条件
  • 1人2回まで
  • 登録:2009/09/28 09:10:59
  • 終了:2009/09/28 20:10:07

ベストアンサー

id:NYO No.3

NYO回答回数35ベストアンサー獲得回数82009/09/28 13:35:29

ポイント40pt

一つのfunctionで、2つのMCを制御したいのであれば、

下記のような関数(例:onMove)が便利ですよ。

基礎知識として、onPressやonReleaseなどのマウスイベント内では、

thisはマウスイベントの発生したMC自身を指し示します。

下記サンプルのonMove()内でも同様です。

function onMove():Void {
	//thisはクリックされた対象(MC)を指す
	trace("thisとは "+this+" のこと");

	if (this == mc_a) {
		this._x += 10;
	} else if (this == mc_b) {
		this._x -= 10;
	}
}

mc_a.onPress=onMove;//()は不要
mc_b.onPress=onMove;//onMove()と書くとエラー

その他の回答(2件)

id:yasu-log No.1

clockmaker回答回数30ベストアンサー獲得回数112009/09/28 09:42:00

ポイント27pt

AS2でフレームアクションに書かれているのであれば、

次のような書式でのぞむような挙動になると思います。

mc_a.onRelease = function()
    // 右へ移動
    // 例 mc_a._x += 10
}

mc_b.onRelease = function()
    // 左へ移動
    // 例 mc_b._x -= 10
}

この場合は押したときの処理ということですので

my_mc.onRelease = function(){
     // 何らかの処理
}

というような記述をします。

もし条件文を使われたい場合はonReleaseの関数内でフラグを立てておき、

onEnterFrameの関数内で条件文を指定するというような書き方も良いかもしれません。


なお、onRelease()は値を返しませんので(型はVoidになります)、

条件式(onRelease() == this.mc_a)の左辺はnullとなり、

右辺のmc_aとの比較は必ずfalseになります。

id:finnapple

ご解答ありがとうございます。

実は諸事情によりif文で分岐する必要があり困っています。

> 条件式(onRelease() == this.mc_a)の左辺はnullとなり、

> 右辺のmc_aとの比較は必ずfalseになります。

なんとなくそんな気がしていました。勉強になります。

ちなみにどのムービークリップをクリックしたかという情報は取得できるのでしょうか?

また、

> もし条件文を使われたい場合はonReleaseの関数内でフラグを立てておき、

> onEnterFrameの関数内で条件文を指定するというような書き方も良いかもしれません。

とのことですが、私自信がactionscriptはほとんど素人な為、書き方がわかりません。

宜しければご教授いただければと思います。

2009/09/28 10:25:57
id:yasu-log No.2

clockmaker回答回数30ベストアンサー獲得回数112009/09/28 10:44:27

ポイント27pt

> ちなみにどのムービークリップをクリックしたかという情報は取得できるのでしょうか?

ムービークリップにそれぞれonReleaseの関数を設定することで可能です。


>> もし条件文を使われたい場合はonReleaseの関数内でフラグを立てておき、

>> onEnterFrameの関数内で条件文を指定するというような書き方も良いかもしれません。

>とのことですが、私自信がactionscriptはほとんど素人な為、書き方がわかりません。

>宜しければご教授いただければと思います。

簡単に例を紹介すると以下のようになります。

var flagA = false;
var flagB = false;
mc_a.onRelease = function()
     flagA = true;
}

mc_b.onRelease = function()
     flagB = true;
}

onEnterFrame = function(){
    if(flagA) {
        mc_a.x += 10;
        flagA = false;
    }
    if(flagB) {
        mc_b.x += 10;
        flagB = false;
    }
}

※特にonEnterFrameで書くほどの処理でもないですが、参考までに。


>とのことですが、私自信がactionscriptはほとんど素人な為、書き方がわかりません。

質問内容ですが、AS2のベーシックなことですので、一度、書籍等を参考・勉強してみてはいかがでしょうか?

こういったQAやフォーラムに投稿するよりも早く解決方法が見つかると思います。


もしかしたらAS2は専門外であったり、書籍を読むのは時間がかかると思われるかもしれません。

この時点の内容で不明点があるようでしたらこの先の実装においても同様に不明なことが数多く出てくると思います。

遠回りと思わず基礎を勉強されることをお勧めします。


参考:

http://www.fumiononaka.com/TechNotes/NGWords.html#Sho

id:NYO No.3

NYO回答回数35ベストアンサー獲得回数82009/09/28 13:35:29ここでベストアンサー

ポイント40pt

一つのfunctionで、2つのMCを制御したいのであれば、

下記のような関数(例:onMove)が便利ですよ。

基礎知識として、onPressやonReleaseなどのマウスイベント内では、

thisはマウスイベントの発生したMC自身を指し示します。

下記サンプルのonMove()内でも同様です。

function onMove():Void {
	//thisはクリックされた対象(MC)を指す
	trace("thisとは "+this+" のこと");

	if (this == mc_a) {
		this._x += 10;
	} else if (this == mc_b) {
		this._x -= 10;
	}
}

mc_a.onPress=onMove;//()は不要
mc_b.onPress=onMove;//onMove()と書くとエラー

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません