人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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) {
//右へ移動
}

●質問者: 雨の日
●カテゴリ:インターネット ウェブ制作
✍キーワード:2.0 Flash クリック ムービークリップ
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● clockmaker
●27ポイント

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になります。

◎質問者からの返答

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

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

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

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

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

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

また、

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

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

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

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


2 ● clockmaker
●27ポイント

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

ムービークリップにそれぞれ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


3 ● NYO
●40ポイント ベストアンサー

一つの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()と書くとエラー
関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ