Flash MXと MX2004の違いではまった件についてメモ

いま毎日Flashの本を見ながらFlashの勉強をしています。
↓今勉強に使ってるのがこの本
macromedia FLASH ActionScriptスーパーサンプル集
macromedia FLASH ActionScriptスーパーサンプル集
で、一晩中はまってしまった事象があったのでメモしておきます。
参考にしている本は
「macromedia FLASH ActionScript スーパーサンプル集」っていう本なのですが、このサンプルを毎日自分で打ち込みながら試してみています。サンプルのコードもついていますがなるべく見ないようにして全部手打ちでやってます。この本自体は凄く丁寧なつくりで、ActionScriptを勉強するのにはとてもいい本だと思います。
しかし、この本はFlash MX用でFlash MX 2004用ではないのです。でもまーほとんど問題なく参考になるわけです。


で、ですね、雪の降るサンプルスクリプトがあるのですが、これがどうしても動かないんですよねー
下がそのサンプルコードのはじめの数行です。

init();
function init() {
// 擬似的な深度
trace(_global.depth);
myDepth = ++_global.depth;
(以下略)

_global.depthってのが曲者で、値をプリインクリメントしているのにtraceしてみると値がundefinedから始まってNaNとかになって全然インクリメントされない。
うーむ、これは変数があらかじめ初期化されていないためではないだろうか?と考えシーン1のフレーム1で下の用に初期化したら動いた。( ゚Д゚)
_global.depth = 0;
うーむ、このサンプルコードのバグではなかろーか?と考えて、本の発売物とページにいって正誤表がでていないか調べてみるがでてないようだった。
じゃーついてきたサンプルコードはどうなってるんだろうか?ちゃんと動くのだろうかと思いサンプルソースを読み込んで実行してみた。
普通に動く
なんでだーと思いつつもじゃーきっとオイラのソースのどこかがおかしいに違いないと思いソースを見比べてみたが違うところが見つけられない。
どこかで初期化を行っているのではないかといろんなところを見たが見つからない。
フラッシュ自体で_globalの変数を初期化する設定があるのではないかと思い探すがそんな設定は無い。
両方のソースにtraceを埋め込んでみて変数の内部の変化をみてみた。
下の様になっている場合。
trace(_global.depth);
myDepth = ++_global.depth;
trace(_global.depth);
おいらのソースの方の場合この部分が3回呼び出されると
出力には
undefined
NaN
NaN
NaN
NaN
NaN
になるが、サンプルソースの方では
undefined
1
1
2
2
3
となる、
おかしい、明らかにおかしい、なんで同じソースなのに変数の挙動が違うのだろう???
でも、考えるに明らかに初期化してないほうが他しいのになーと思う。初期化して動くようになってるのでこのままスルーするかなーと思うがどうしても納得できないので原因を探しつづけるも判らない。
もしかしたら、MXでは勝手に初期化されてMX 2004では勝手に初期化されないのではなかろうか?という考えに行き着くが、でも読み込んだサンプルソースはMX 2004でもしっかり動いてる。
その後もなやみながら、もしかして、サンプルソースはMX形式で保存されているからMX 2004でも動くのではないかという考えが浮かぶ、試しに自分のソースをMX形式で保存してみる。
うごいた。(´・ω・`)
(‘A‘)エエエエエッ
その後MX 2004形式で保存しても普通に動く。なんですとー
結局そういう単純なことでした。でも普通わかんないよね。ていうかサンプルソースも動くからって初期しないのいくないと思う。(´・ω・`)
この本、最新版のフラッシュにも対応した版もでてるみたいだからどうなってるか見てみたいなー。
ちなみに現在最新のフラッシュはFlash8です。僕も持ってるんだけどマシンが非力なので前から入れっぱなしになってる。MX 2004でお勉強中な訳です。
しかしFlashいじってみるとマルチディスプレイ環境にしたくなりますねー。画面が狭くて困ります。
↓最新版はこれらしい、ほしいなー。
FLASH ActionScript スーパーサンプル集 1.0/2.0対応版[CD-ROM付き]
FLASH ActionScript スーパーサンプル集 1.0/2.0対応版[CD-ROM付き]

タグ :