重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

以前、質問をしたのですが
流れてしまった様なので、再び質問させて頂きます。
Flash Lite1.0用に制作をし直しております。
callに関しての質問です。

ゲームの得点スコアーで、シーン1に
function addScore() {
score+=10;
}
function decScore() {
score-=10;
}

と記述しております。
敵キャラが三種類いて、倒すと+10になるものと-10になるもの。

そしてシーン1→ムービー→ボタン となっており
そのボタンに

on (press) {
play();
call(16);
}

と記述しおります。
この16フレーム、call指定をしたフレームにはどのように記述したら良いのでしょうか?

どなたかお分かりになる方、ご伝授宜しくお願い致します。

A 回答 (1件)

先日はどうも失礼いたしました。



> シーン1→ムービー→ボタン

と書かれている意味がはっきりとつかめませんが,
これは階層構造のことで,

  _root(メインムービーのタイムライン)
   └ ムービークリップ
        └ ボタン

という意味でしょうか?
そして,

> シーン1に
> function addScore() {
>   score+=10;
> }
> function decScore() {
>   score-=10;
> }

と書かれているのは,
_root のタイムラインのフレームに書いているという意味でしょうか?
よくわからないので,
勝手にそういうこととして解釈します。


もし上のようなことであれば,
フレーム16 の存在する階層と,
ボタンの存在する階層が違っているのです。

ですから,
_root の フレーム16 に例えば 加算する方のユーザ定義関数 addScore() と同様のものを用意したいのでしたら,
_root の フレーム16 に,

---------------------
score += 10;
---------------------

と書いておきます。
この, score += 10; というスクリプトを,ムービークリップの中のボタンから call するのですから,
ボタンのスクリプトは,

---------------------------------------
on (press) {
play();
// ターゲット(この場合 _root)に命令
tellTarget ("/") {
// 16フレームのスクリプトを実行
call(16);
}
}
---------------------------------------

となります。
書かれているスクリプト

--------------
on (press) {
play();
call(16);
}
-------------

これであれば,
ボタンのある階層(ムービークリップ)のタイムラインの フレーム16 のスクリプトを実行しなさいと言う意味になります。
階層が違えば,tellTarget () で,
ターゲット階層に命令をする必要が出てきます。

ターゲットパスですが,
Flash Lite 1.0 (1.1も) ではスラッシュシンタックスを使うのが一般的です。

「_root」 は, 「/」 で表されます。
「this」は,特にありません。
同じ階層なのですから,this は省略してください。
どうしても書かざるを得ない場合は, 「""」 になります。

もし階層が次のようになっていて,

 _root
   └ aMC (ムービークリップ)
      └ bMC (ムービークリップ)

_root から bMC (ムービークリップ) に何かの命令(例えば play() など)を出したい場合は,

--------------------------
// ターゲットに命令
tellTarget ("/aMC/bMC") {
// 再生開始
play();
}
--------------------------

となります。


> function addScore() {
>   score+=10;
> }
> function decScore() {
>   score-=10;
> }

のように2つの関数を同じフレームに書くことはできませんから,
と言うより,書いても良いのですが
書いたら2つとも実行されてしまいますから,
例えば フレーム16 には,

score+=10;

だけを書いておいて,
例えば フレーム17 に,

score-=10;

だけを書いておく必要があります。


勝手に解釈した条件での回答です。
全く趣旨の違った回答をしていればすみません。

この回答への補足

ご伝授ありがとうございました。

on (press) {
play();
// ターゲット(この場合 _root)に命令
tellTarget ("/") {
// 16フレームのスクリプトを実行
call(16);
}
}

上記の設定で得点ができるようになりました。
細かく説明を書いて下さって非常に助かりました。
ありがとうございます。

もう一つ伺いたい事があるのですが・・・

このゲームは叩く動作、叩いて敵を倒すようにしています。
そこで、叩く動作の時に武器を出現させて
敵を叩いているようにしたいのですが・・・。

例えば1キーを押したら、1キーで倒す敵の所に武器がある。
イメージとしてはその様な感じです。

1~9キーに対応するように
ステージには3×3で、1~9に設定した異なるインスタンス名のMCを配列しております。

そのインスタンス名がteki1~9だとすると

_root(メインムービーのタイムライン)ここにteki1~9
 └ ムービークリップ
 └ ボタン

という感じになっております。
このteki1~9は得点を設定したものと同じです。

分りづらい様でしたらまた説明致します。
ご伝授の程、宜しくお願い致します。

補足日時:2007/01/26 13:50
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!