- ベストアンサー
addChildでボタンを配置 Flash CCで勉強中です
- アクションスクリプトでaddChildを使用してボタンを配置しましたが、レイヤーの影響でボタンが表示されません。どのようにすれば表示されるようになるでしょうか?
- ENTER_FRAMEイベントでフレーム番号1でstopするように設定していますが、70で止まってしまいます。起動直後に止まって任意のアクション後に再開する方法を教えてください。
- Flash CCでボタンを配置しましたが、表示されない問題やフレームの停止がうまく行えない問題が発生しています。解決方法を教えてください。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
◎ ご質問の(1)に関して この不具合現象は再現できないのでよくわかりません。。。 (日本語の意味がわからない部分もありますけど。) Flash ドキュメントファイルの「ライブラリ」内に ちゃんと「btn」というクラス名の ボタン もしくは ムービークリップ が用意されていたならば 指示した場所(座標)に表示されると思いますが。。。 ただ,,, 「_btn」の指示座標が _btn.x = 3; _btn.y = 462; のように y座標 の値が結構大く設定されているため 動作検証したときに私も最初見えなくて一瞬驚きました。 しかし, これは単にステージの高さが デフォルトの 450px になっていたから見えなかっただけで ステージの高さを例えば 500px くらいに設定し直せば見えました。 つまり, 私が動作検証実験した状況で _btn は見えるのですから 書かれていらっしゃる不具合現象が再現できないため _btn が見えない原因はわかりません。 少し気になった点としては //ボタン配置 var _btn:btn = new btn; ではなく //ボタン配置 var _btn:btn = new btn(); と書くのが正しい書き方ですが どちらにしても動作するのでこの点は無視できるでしょう。 それと 最初にも少し書きましたが, > レイヤーを非表示にしてみるとちゃんとボタンは見えています。 この1行の日本語の意味がわかりません。 わからないのであまり深く考えず, 動作検証では無視させていただきました。 . ◎ ご質問の(2)に関して Event.ENTER_FRAME は それを addEventListener した 次のフレーム時間に入る(ENTERする)ときから実行されるのです。 つまり, Event.ENTER_FRAME の addEventListener が実行された時点では すでに そのフレームに入ってしまって(ENTERしてしまって)いるわけですよね? addEventListener する前に溯って そのイベントリスナーが実行されるのは変(不可能)です。 ---【例】--------------- ある日の朝のことです。 太郎君は学校に登校して先生に会いました。 しかし何も言わず先生の前を通り過ぎました。 そこでの会話です。 先生:「太郎君,これからは毎朝最初に挨拶してね!」 太郎:「はい,わかりました。」 ------------------------ ↑この状況で太郎君がいくら反省をしたとしても この日の朝最初に先生に挨拶することは不可能ですよね? 先生に注意された時点で, 『その日の「毎朝最初」は過ぎ去っている』わけですから。 太郎君が先生の言い付けを実行できるのは この注意を受けた「次の日」以降です。 つまり, フレームがループ再生されるようなことがあって, 再び フレーム1 再生ヘッドが戻るようなことがあれば if(currentFrame == 1) この () 内は true になるので trace("初回起動") stop(); が実行されます。 でも初回の フレーム1 再生開始時には実行されないわけです。 ですから, 初回の フレーム1 再生時に trace("初回起動") stop(); を実行させたいのでしたら, Event.ENTER_FRAME のイベントリスナーの中に入れるのではなくて 例えばコンストラクタである public function main(){…} の中に直接書くなど,別の方法をとる必要があります。
お礼
ENTER_FRAME の件は、例もわかりやすく 理解することができました。 ありがとうございます。 > レイヤーを非表示にしてみるとちゃんとボタンは見えています。 こちらについては、質問の投稿以降、試行錯誤し解決致しました。 内容的には、タイムラインパネルの目のボタン (全てのレイヤーの表示/非表示)で×印状態(非表示) にした状態で、デバックするとボタンは指定した位置に見え、 表示状態にしてデバックすると見えないという現象でした。 このことからレイヤーの方が上にある?のかと思い。 addChild を stage.addChild とすることで 無事表示できるようになりました。 ↓こちらのサイトにあります'stageについて'で 詳しく記載があり、stage を基とした木構造の考え方など 理解を深めることができました。 http://hakuhin.jp/as3/container.html この度はありがとうございました。