■実験室

■プロフィール

Sligh'Hand

Author:Sligh'Hand

所属ギルド
Open Travelers
称号
ぐったりたぬぬ
特徴
公園内でマジシャンを目指す新米教師。桜の下で「たぬき寝入り」するのがマイブーム。

■最近の記事
■最近のコメント
■ブログ内検索

■リンク
■RSSリンク
■カテゴリー
■月別アーカイブ

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。


スポンサー広告 | --:--:--

ActionScript Number関数の仕様

 おはよーございます。 ぐったりたぬぬです。

 ブログ式神というか、左上のあの子が 「0 番目の (ry」 とか混乱したことを口走る症状の修正が完了しました。 結論から言うと、アクセスタイミングなんかにはまったく関係なく、Flash 内で ActionScript のコーディングにミスがあって、受け取ったカウンタキーを間違った値に変換してしまっていた、と。 そんなことが起きていた模様です。

 追記に詳細。 Flash 作ったり ActionScript 書いたりする人には、ちょっとだけ役に立つかも?





 今回の不具合の原因は、ActionScript の Number という関数。 この関数は Flash 5 以降で使われるもので、諸々の型で表現された情報を数値型に変換するというもの。 たとえば '7' という文字列を 7 という数値に変換してくれるわけです。 そもそも、コンピュータの上では、文字列と数値は異なる形式で表現・記録されていて云々……。 うむ、プログラミングしない方には、何のことだかサッパリかもですね……。 人間の感覚的にたとえるなら、紙の上に書かれた 7 とか 七 とか seven とか VII という形を見て、「よくわからないけど 6 より大きくて 8 より小さい自然数」 の概念を思い浮かべるようなものでしょうか。 いや、余計にわからない。 ま、何にしても、この Number 関数の仕様をスラ←が正確に理解していなかったのがそもそもの間違いだったわけです。

 具体的に、Number 関数の仕様を、スラ←がどう勘違いしていたかは下記の通り。

スラ←の認識
(間違い)
引数に数値として解釈可能な文字列を与えた場合、Number 関数はその数値を返す。
引数に数値として解釈不能な文字が混入している場合、NaN (Not a Number = 数じゃない!) を返す。
正しい仕様引数に数値として解釈可能な文字列を与えた場合、Number 関数はその数値を返す。
引数に数値として解釈不能な文字が混入している場合、NaN (Not a Number = 数じゃない!) を返す。
なお、文字列が 0x から始まる場合には、その文字列を 16 進数として解釈しようと試みる。 また、文字列が 0 から始まる場合には、その文字列を 8 進数として解釈しようと試みる。 文字列が 0 以外の数字から始まる場合には、10 進数としての解釈を試みる。

 とまぁ、こんな具合。 後半の太文字部分、基数の指定があることを見落としていました。

 以前の記事で、Flash の動作に必要な情報を php から埋め込んでいるということを書いていますけど、このとき、該当する情報を全て文字列の形で埋め込んでいるんですね。 んで、その情報から数値を取り出そうとしてこの Number 関数を使っていたんですけど、文字列の長さを一定にするために、数字の桁数が少ない場合には、上位の桁に 0 を挿入していたんですよ。 実際に挿入したい値は 「300」 なんだけど、文字列としての長さを 5 文字分にしたいから 「00300」 として挿入する、的な。 で、コレが↑で書いた基数指定に引っかかって 8 真数の数値として解釈されてしまったワケ。 10 進数の 300 を埋め込んだつもりが Flash 側では 8 進数の 300、つまり、10 進数だと 192 として認識されてしまっていた、と。

 ↑のようなことが起きた結果、データベースへの問い合わせに使用するキーが実在しない値となってしまい、問い合わせたものの値が取得できないため、カウンタ値としてデフォルトの 0 が使用されてしまったご様子。 通常、0 から始まる数字を 10 進数の数値に変換するときは parseInt を使うみたいなんですけど、まぁ、要するにスラ←のお勉強不足だったというわけです。 ゴメンナサイ……。

 ActionScript を修正して一通りのテストを終了。 この問題についてはクローズとしたいと思います。

P.S. ご指摘ありがとうございました m(_ _)m

テーマ:Flash - ジャンル:コンピュータ

幻と現の間で | 06:04:43 | Trackback(0) | Comments(0)
コメントの投稿

管理者にだけ表示を許可する

FC2Ad

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。