本日仕事中に出会った現象です。
原因は自分のケアレスミスだったのですが、普通なら間違った記述ならそれなりのエラーが出るので問題箇所に気づくものの、今回はエラーも出ないので問題の記述に気づきづらかったので、書き残すことにしました。

環境

  • WinXP & FlashCS4 & FlashDevelop3.0.3RTM
  • DocumentClassで開発
  • AS3

(とはいえ他の環境でテストしてないのでCS3ならどうか、等はわかりません)

現象

  • 直前まで普通に開発をしていた
  • traceもいっぱい出してた
  • 何かを書いてパブリッシュしたら突然trace一切出ず、動きも一切なく、クラスを読んでないような雰囲気
  • ためしにコンストラクタにtraceを入れてもtrace出ず
  • Flashのデバッガ(Shift+Ctrl+Enterのやつね)を起動してみようとすると、「このSWFにはActionScriptが含まれていないためデバッグできません」と言われる
  • ドキュメントクラス記入欄の右にある鉛筆マークを押すとちゃんと該当のファイルが開くためパスやファイル名が間違っていることはない

と、よくわかんないことだらけなので、最初はflaファイルがぶっ壊れたのか、と思いDropBoxの履歴からちょっと前のファイルを取り出して試したりしました。が、やはり動かず。問題はどうやらflaファイルにはないようでした。

解決

そんなこんなで色々してたら解決しました。問題はクラスファイルのほうにありました。以下解決編。

これは動くクラスファイル↓

package
{
	import flash.display.MovieClip;

	public class Main extends MovieClip
	{
		public function Main()
		{
			var hoge:Number = 0.5;
			trace(hoge);
		}
	}
}

これは今回の現象を再現した動かないクラスファイル↓

package
{
	import flash.display.MovieClip;

	public class Main extends MovieClip
	{
		public function Main()
		{
			var hoge:Number = 0..5;
			trace(hoge);
		}
	}
}

このサンプルなら一目瞭然ですね。
そう、小数点が2個ついてます。
馬鹿ですね。

馬鹿でしょうもないミスとはいえ、エラーも出ないので原因がすぐには思い当たりづらく、traceもでないからエラー箇所の絞込みもできず、そもそもデバッグ起動すらできなくなるので、これが長いソースだとなかなか気づきづらいものです。(と、言い訳させてください)

「..」を使うのはまずXMLの時ですよね。あとはよく知りません。
なので、わかる人からしたらこの現象は当たり前なのかもしれませんが、僕としてはエラーくらい出て欲しいものです。

みなさんも、もし同様の現象に出会ったら、小数点が2個ないか、探してみてください!

原因がわからずにうんうんうなりながらtwitterで「困ったよ」って言ったら色々助言してくれた皆様。いつもながらありがとうございました!

おまけ

ただ単にその箇所のエラーが出ないだけでなく、そもそもクラスと認識してないので、ほかのエラーも出ません。たとえば

package
{
	import flash.display.MovieClip;

	public class Main extends MovieClip
	{

		piyopiyo

		public function Main()
		{
			fugafuga

			var hoge:Number = 0..5;
			trace(hoge);
		}
	}
}

のように、普段なら明らかにエラーが出る余計な文字列が入っていても、エラーが出ません。。。
packageより上に何か書くと、エラー出ました。

Leave a Reply