ごんたろうのぼやきトップ


2014年11月29日

【AS3.0】AS2.0(以前)での_parent._parentを使用したい時

AS2.0以前で使用していた、
オブジェクトの親の親(_parent._parent)を指定する場合の書き方です。
■親のムービークリップ「mc」にアクセスする
@AS2.0(AS1.0)
_parent.mc〜
AAS3.0
MovieClip(parent).mc


■親の親ムービークリップ「mc」にアクセスする

○階層関係
◇メインステージ(root)
┗hoge(ムービークリップ)
 ┗mc(ムービークリップ)
(mcはムービークリップhogeの中にあると仮定)

@AS2.0(AS1.0)
_parent._parent.mc〜
AAS3.0
MovieClip(parent.parent).mc
と記述する。


ムービークリップを指定する際に文字列と数値などを組み合わせた
インスタンス名(もしくはname)を指定する場合は[]を使用して記述する。

基本形
@["mc"+1]
A["mc"+num]

これらを元にして、アクションスクリプトとして記述する場合は
this["mc"+1]、this["mc"+num]と記述する。
[]の前には必ずthisやparent、rootなどを付加しなければならない。

上記はムービークリップの指定ですが関数の場合は後に()を付けることで
指定することが可能です。
function mc1(){
trace("テスト")
}
var num:Number=1;
this["mc"+1]()、this["mc"+num]()と記述。

◇別の書き方
parent.parent["mc"+1]()
MovieClip(parent.parent)["mc"+1]()

※["mc"]の直前のドットがないことに注意!

以前の関連記事
http://gon-fla.sblo.jp/article/77923790.html
posted by ごんたろう(Gontaro-Soft) at 13:22 | Comment(0) | ActionScript3.0

2014年08月05日

【Flash】Flash落とし穴?[AS3.0?]

書き出しバージョンなのか、FlashPlayerのバージョンなのか
詳しいことはわからないが、ムービーが勝手に動いてしまう、
勝手に再生してしまうなどの挙動で悩んでる人への備忘録。

↓画像を見てください。
flash.jpg
http://gon-fla2.sakura.ne.jp/sblo_files/gon-fla/image/flash-thumbnail2.jpg?1407175251676

上記の画像のように2フレーム目にプリローダー(ムービークリップ、シンボル登録)
3フレームはゲームタイトル画面、ストップ(stop();)を記述、
4フレーム目はゲームメイン画面、同じくストップを記述、とする。

2フレーム目のプリローダーには、ロードが完了したら
MovieClip(root).play();
などと記述し、タイトル画面へ移動するようにスクリプトを書く。

普通ならローダーの処理が完了した後にタイトル画面が表示され、
ユーザーは希望に応じたボタンなどをクリックし、ゲームを開始するはずだ。
しかし、なにもボタンをクリックしたりしていないはずなのに
勝手にムービーが再生されて、いきなりゲームメインに飛ぶ・・・。
なんていう方は居ないだろうか???

どういう理由かはイマイチ分からないが、プリローダーの処理が
メモリ上に残っているのか、プリローダーがループされて
上に書いた「MovieClip(root).play();」が実行され
ルートのステージにplay();の命令が飛ぶのだ。

こういう場合はローダーの方に
MovieClip(root).play();
の後、stop();などで自身の処理を止める必要があるようだ。

コレが正常な挙動なのかどうかはワカラナイが
CS3では正常に動いていたのに、CS4で動かしたら動かない、、、
(エラーが発生したり)
などでお困りの場合はまず、画面(ヘッド上に)に消えて
見えないあるムービークリップが動作している状態でないかを
チェックしてみてはいかがだろうか???
posted by ごんたろう(Gontaro-Soft) at 03:11 | Comment(0) | ActionScript3.0

2014年06月08日

【AS3】Shared Objectについて。

Flashさん(CS3)の
Shared Object、ローカルPC内に形式は限られているが
いわゆるCOOKIEのように(クッキーさん・いつ聞いても美味しそうな名前w)
データを保存しておける、特にゲームなどでは有り難い機能。
FlashMX(Ver6)から実装。のはずw


無駄に数日悩んでしまったので備忘録として…。
AS1.0やAS2.0ではたしか、文字列しか保存できなかった…はず。

AS3.0では配列や連想配列なども保存できる様になった。
が、しかし。この仕様変更に甘えるとどえらいことになる。
「Shared Object 書き込み タイミング」などで検索しても
こちらの思っている内容がヒットすることがなかった。

内容は書き込みボタンをクリックして書き込みを行っても
タイムラグが生じ、書き込み処理のウィンドウ(等)を閉じて
しばらくしてから書き込みが完了するという現象。

どういうことかというと、書き込みボタンを押して
しばらくしてから書き込み処理が完了するため、
ボタンを押した時点の状態と実際に書き込まれるデータに
差が出てしまう。
例えばポイント0,0地点でデータを保存したのに、
実際書き込まれたのはポイント0,5地点で保存されるという
結構困る現象でした。

結果、おそらく書き込みに時間がかかっているということ
なんだろうけど、書き込み用にウェイトをかけても
あまりいい解決策にならなかった。
たぶんFlash側でデータの変換を行いながら記録しているのか
ここが結構ネックなのでは?という結論。


おまけに実際使っていたShared Objectのデータ容量が
「8KB」という結構でかいものになっていた。

無駄に無駄に無駄に数日悩み、
こちらに手間がかかるけど、配列や連想配列を
文字列に変換して保存してみよう、、、という方法。
要素数の分だけ、特定の文字で区切り、場合によっては
改行コードなども使って分ける。
それを文字列として記録、保存。

読み込み時にはこの文字列データをsplit等で分解し、
元の配列や、連想配列に戻してやるという作業。


実際にやってみた。
すると、使用容量8KBが(ものによっては8KBを少し越えた)
なんと2KB以下にまで減ってしまったwwwwww
ここにたどりつくまでにも、無駄なキーや変数自体を削除して
スマート化を頑張ってみたのだが解決せずで、


最終的に全部文字列で保存したら解決したwという話。


書き込み用に8秒ほどウェイトをかけていたのだが
(それでもやばい時があったw)
2秒ほどにまで縮められた。おそらく1秒でも
問題ないだろう…。この辺の微調整は最後に。


【結論】
SharedObjectの保存は全て「文字列」に。
書き込み時は
SharedObject.flush();
SharedObject.close();
を入れる。
(flushをいれたらcloseはいらんのか?)

戻す時にはString()やNumber()、Boolean()などで
型を戻すことも忘れずに。
posted by ごんたろう(Gontaro-Soft) at 20:38 | Comment(0) | ActionScript3.0