U⁄A LABO

RSS

SEARCH

AUTHOR

  • Naoki Muramatsu (1件) Twitter:@Stryfy.

  • deco-dekai (1件) ビートダウンパートでご飯何杯も食べられます。
    ハードコア・テクニカルディレクターを目指して日々精進。

  • yanbou (6件) 犬と猫で、家が毎日運動会のフラッシュデベロッパー。
    ビールから発泡酒へ変更で節約中。

  • chikatherrsix (8件) メタル界のフラッシュデベロッパー。またある時はメタルギタリスト。オーサリング中もヘッドバンギングは絶やさない。

  • akuze (2件) 2003年からユナイティアに寄生しているフラッシュデベロッパー。
    シルクドソレイユとカナダが好き。

  • knockknock (16件) 小遣い2万円のフラッシュデベロッパー。
    帰りが遅いのにキレる嫁をだましだまし制作中・・・。

  • takaiw (18件) フラッシュデベロッパー。遊びでゲームを作るのも好きです。外見に似合わないイラストを描くのも好きです。とにかく作るのが好きです。

CATEGORY

HOME  >  NaNとDisplayObjectの座標

2009.11.05 takaiw

NaNとDisplayObjectの座標

もうすぐUA-LABOもリニューアルします!
実験的にフレーム&Flashを使ってしまって、ちょっと
使い勝手が悪かったので、普通のHTMLに一旦直して
読みやすくしていきたいと思います。
最近は後輩の良い記事がでてきましたので...。

公開されてからもう半年を過ぎまして、
記者も減りましたが、まだまだがんばってゆきたいと思います。

今回は、つい最近ハマったプチ問題をメモ代わりに書きますね。

NaNというものをご存知だと思いますが、NaNというのは
Numberの型で数字で無いもの(Not a Number)を指します。

ここでいう数字とは正確には「倍精度浮動小数点数」といいます。

var num:Number = Number("あああ");
trace(num);

上記のように数字でないものを数字にキャストしようとすると、

NaN

というトレース結果になり、

Number,uint,intなどの数字以外は
NaNになります。

そしてNumberの初期値、つまり
下記のように何も代入しない場合も
トレース結果がNaNになります。

var num:Number;
trace(num);


このNaNをDisplayObjectクラスの
xおよびyに代入すると
ブラウザによって挙動が変わってしまいます。

たとえば

var sp:Sprite = new Sprite(); 
var g:Graphics = sp.graphics; 
g.beginFill(0xff0000,1); 
g.drawRect(0,0,100,100); 
this.addChild(sp); 
sp.x = NaN; 
sp.y = 200; 

のように書きます。

wonderflでも一応書いておきました。各ブラウザでも確認してもらえればと思います。

■パブリッシュプレビュー
0になります。

■XP+IE7
表示されません。

■XP+FF
0になります。

■XP+GC
0になります。

■Vista+IE7
0になります。

■Vista+FF
表示されません。

■Vista+GC
表示されません。

OSとブラウザによって全然変わりますね...。
筆者はこれだけしか確認できてませんが、
他のも確認してもらえればと思います。

プレビュー上で表示されていたので
安心していましたが
ブラウザによって表示されなくなる場合もあるので
注意してください。

座標にはハッキリした値を代入できれば問題ないのですが
プロパティ変数を座標に入れ込むとなった際に
そのプロパティ変数も別のプロパティ変数の
四則演算を施した後ですと、
どれかがnullやNaNであればNaNになってしまいます。
しかも、例外をthrowしないのでバグが潜伏して
しまいます。
setterのx,yにNaNを代入しようとすると例外をthrowするように
してほしかったのですけどね。


このブラウザだと消えてしまうんだけど...と言われたときに
思い出してもらえれば嬉しいですね。

CATEGORY