アプリ版:「スタンプのみでお礼する」機能のリリースについて

先日、こちらである方から、Flash Lite1.1では、Flash4以前のように、階層などの概念がないということを教えて頂きました。他のムービークリップを制御する際はtellTargetで指定するらしいのですが、次の実験でどうにも上手くゆきません。

1、新規シンボル(MC)で、4コマ漫画を作成。1コマ目にstop();を設定する。インスタンス名をcounterとし、ステージ(背景)にこれを設置。
2、新規シンボル(ボタン)で、次のスクリプトを記述。
on (release, keyPress "1") {
tellTarget ("counter") {
nextFrame();
}
}
携帯電話のボタン1を押すことによって、4コマ漫画が進む…予定だったのですが、以下の変(文字化け?)なエラーメッセージが…。
ƒ^[ƒQƒbƒg‚ªŒ©‚‚©‚è‚܂¹‚ñ: ƒ^[ƒQƒbƒg="count" ƒx[ƒX="_level0"

パス表記が間違っているのかと思い、
_parent.counterや、/counter、_level0.counterなど色々試してみましたが、やはり先ほどのエラーログが出ます。何か根本的に間違っているのでしょうか。
きちんと、4コマ漫画をコマ送りさせるボタンにするには、どのように表記すればよいのでしょうか。
お詳しい方、ご回答いただけると幸いです。

A 回答 (2件)

> Flash Lite1.1では、Flash4以前のように、


> 階層などの概念がないということを教えて頂きました。

説明の仕方が悪かったですかね。これのことですよね。
http://oshiete1.goo.ne.jp/kotaeru.php3?q=2109845
  ↑教えて!goo  ↓OKWave (同じです)
http://okwave.jp/kotaeru.php3?q=2109845

階層の概念はあります。
概念はないどころか階層は今よりもっと強烈なものとした存在していました。
階層,つまりムービークリップ内のタイムラインは Flash 3 からありますので。
http://hotwired.goo.ne.jp/webmonkey/99/02/index2 …
 ---引用---
 また、Flash 3は強力なTellTagetとLoadMovieのコマンドを備えており、
 異なるフレームやシーン、ムービーで互いに影響を及ぼし合うことができる

すごいー,強力なTellTagetがあるーぅ。
やっぱり Flash 3 を買わなければ~!
って今となれば何がすごいのかわかりませんが,
つまり階層があるので tellTarget の ( ) 中にターゲットパスが書けるのです。

ちなみに階層が無かった Flash 2 や 1 でも,
グラフィックシンボルの中にタイムラインを持てましたから,
例えば,
蝶が羽ばたくだけのアニメーションをグラフィックシンボル内のタイムラインに作っておいて,
その羽ばたくだけのグラフィックシンボルをモーショントゥイーンさせれば,
蝶が羽ばたきながら飛び回るアニメーションはできていたようです。
ただ,現在と同じく,グラフィックシンボルには階層がありませんので,
tellTarget はできませんでした。



Flash Lite 1.1 までは階層の概念がないのではなくて,
クラスという概念が,ユーザー側に提供されていないのです。
「○○クラス の ××メソッド」 言いかえると 「○○オブジェクト の ××メソッド」
という枠組みがないのです。
「トップレベルクラス」
http://livedocs.macromedia.com/flash/8_jp/main/0 …

それにともなって文法も違います。

 日本語 → 自家用車を,静岡まで,運転する。
 現在AS風 → myCar.drive("Shizuoka");
 FlashLite1.1風 → drive("myCar"," Shizuoka ");

こんな感じでしょうか。
日頃思うのですが,現在AS風は日本語に近いと思います。
Flash Lite 1.1 はどちらかというと英語に近い気がします。
プログラムでは主語(You)がない(命令形)ので,Flash Lite 1.1 では動詞が前にずれて先頭に来ます。

ちなみに Flash 4 触れられていますから一応書いておくと,
Fash 4 では,実際はこうなります。

 On (Release, Key: 1)
    Begin Tell Target ("/counter")
      Go to Next Frame
    End Tell Target
 End On

Flash 4 以前のアクションは,プログラムというより,
読んでみると英語の自然な語りを聞いているような気がします(私は)。

言葉としては自然でも,プログラム言語となると,動詞が前にあって入れ子入れ子になるので複雑になるのですよ。
やっぱり,オブジェクトが前にある方がずっとスッキリすると思います。



話を元に戻して。
現在ASでは,
gotoAndStop は MovieClip クラス(オブジェクト)の gotoAndStop メソッドと定義されていますから,

 MovieClip.gotoAndStop("移動させたいフレーム");

と書けば良いのですが,
Flash Lite1.1 までは (2.0より前は) ,

 tellTarget ("MovieClip") {
   gotoAndStop("移動させたいフレーム");
 }

となります。
ということです。以前例になっていた,

 this.gotoAndStop("移動させたいフレーム");

の this の指すものは MovieClip です。
また,_root も MovieClip の1つの形です。
Flash Lite1.1 まではクラスという枠組みがそもそもないので,
これは通用せず,単に

 gotoAndStop("フレーム");

と書いてください。ということです。
ただし,階層はあるので,別階層を gotoAndStop させたいときは,
tellTarget で,「ターゲット階層に命令」 をしてください。ということなのです。

ってここまで書いて気づいたのですが
解決されたのですね。
それは良かったです。



---本題ですが------------------------

書かれている通り,

on (release, keyPress "1") {
tellTarget ("counter") {
nextFrame();
}
}

でもうまく行きました。 また,

on (release, keyPress "1") {
tellTarget ("/counter") {
nextFrame();
}
}

でもうまく行きましたよ。
上の場合が,

 this.counter.nextFrame();

下の場合が,

 _root.counter.nextFrame();

と同じ意味です。

counter というムービークリップは,ボタンと同じ _root にあるのですよね。
ちゃんと存在しているのなら,なぜうまく行かないのかわかりません。
インスタンス名に間違いはないですか?
階層もまちがっていませんか?


ちなみに,うまく行ったという例は
「デバイス選択」で「スタンドアローンプレーヤー」というデバイスを選択して,
アクティブになっている携帯デバイスを選んだ場合です。

前回も書きましたが,携帯というものを持っていないので,
「待ち受け画面」とか「壁紙」とか言われましても,それがどのようなものか理解しておりません。
困ったものだ…・・・。

長くなって申し訳ございません。
結局,書かれている状況で,書かれているスクリプトは正しいとしか言えないと言うことです。


========参考文1==================

~ Flash 4 ヘルプより引用 ~
 「ターゲットの指定」より抜粋

ターゲットを指定する構文は、ファイルシステムでフォルダを指定する方法と似ています。
たとえば、" / " を先頭に指定すると、カレントレイヤーのルートにあるムービークリップを表します。
" / " が先頭にない場合、ターゲットはカレントムービークリップを基準にして相対的に指定されます。

次の Tell Target パスでは、前の項で示した7つのタイムラインの例が使用されています。

・ /Jack は、MovieX のメインタイムラインから、ClipA という名前のムービークリップをターゲットとして指定します。
・ ../ は、ClipA というムービークリップから、MovieX のタイムラインをターゲットとして指定します。
・ /Jack/Bert は、ほかのムービークリップから、ClipA1 というムービークリップをターゲットとして指定します。
・ Bert は、ClipAというムービークリップのタイムラインから、ムービークリップ ClipA1 をターゲットとして指定します。
・ ../Ernie は、ClipA1 のタイムラインから、ムービークリップ ClipA2 をターゲットとして指定します。
・ _level1/Smith は、ほかのムービークリップから、MovieY のムービークリップ ClipC をターゲットとして指定します。
ターゲット名が空白の場合は、カレントタイムラインをターゲットとして指定します。


=======参考文2==================

~ Flash Lite 1.x ActionScript の学習 より引用 ~
 「変数の使用 」より抜粋
 http://livedocs.macromedia.com/flash/8_jp/main/0 …

タイムラインの変数を指定するには、ドット (.) およびコロン (:) と組み合わせたスラッシュシンタックス (/) を使用します。次のドット表記を使用することもできます。

次のコードは、メインタイムラインの car 変数を参照します。

/:car
_root.car

/Explosion:Timer
    • good
    • 0
この回答へのお礼

なるほど。今回も非常に、詳細な解説ありがとうございました。

お礼日時:2006/05/01 18:20

同じ階層?だと思うので動くような気もしますが・・・


/:counter
でどうでしょうか。
参考サイトはとても役に立ちます。

参考URL:http://www.grkt.com/flash_lite_01.html
    • good
    • 0
この回答へのお礼

参考サイト、ご紹介ありがとうございました。
無事解決いたしました。お世話になりました。

お礼日時:2006/04/28 17:48

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