問答収集 カテゴリ:Flashプログラミング
現在のスレッド一覧 / 新規に質問を投稿
レス数:8 / 状態:解決済み / No:23 / ATOM
1 名前:k 日付:2010/05/16(日)16:28:29 ID:9kJEWPZA4knz
フリーのFlash作成ソフト、paraFlaで携帯用Flashゲームを作っております。
http://www.geocities.jp/coa9999/
ActionScript1.0相当のスクリプトを使用できるそうです。

早速質問ですが、このソフトで作る際、条件演算子の処理が上手くいかないときがあります。

例)var t = (false ? "true" : "false") + "!";
(↑falseでなくtrueにすると、なぜか上手くいきます。)

もちろん条件演算子を使わずに作ることも可能ですが、携帯用のFlashなので、
極力容量を抑えるためにも、これを使いたいのです。

対処方法をご存知の方は、どうかご教授願います。
2 日付:2010/05/17(月)13:10:46 ID:2iuB4losX8Zs
条件演算子はここですよね?
(false ? "true" : "false")

条件の部分が定数になっているため、常に "false" になると思うのですが
どういう条件で "true" と "false" を切り替えたいですか?

3 名前:k 日付:2010/05/17(月)17:25:33 ID:9kJEWPZA4knz
分かりにくい例ですみません。
実際には、falseではなく、変数とか評価式を使っています。

var t = (○○ ? "true" : "false")+"!";   のときに、
○○の部分が、falseである変数や、falseになる評価式や、
定数のfalseでも同じ現象が起こります。

(○○の部分がtrueだと上手くいきます。
 +"!"がなくても、上手くいきます。)

ご存知でしたら、ご回答お願いします。
4 日付:2010/05/17(月)22:03:44 ID:yDl4tzgDJCHR
var i;
for(i=0;i<10;i++){
var t = ((i < 5) ? "true" : "false")+"!";
trace( i + " : " + t );
}

確かに挙動がおかしいですね。
括弧をすべて外すと動くようですが如何でしょう?

var t = ○○ ? "true" : "false"+"!";
5 名前:k 日付:2010/05/19(水)14:22:28 ID:9kJEWPZA4knz
返答が遅くなってしまい、申し訳ありませんでした。

その方法だと、
  var t = i < 5 ? "true" : ("false" + "!");
と同じ解釈になっていると思いますけど…。

いろいろ実験してみたところ、
1:条件演算子単独では上手くいく
var t = i < 5 ? "true" : "false";
2:でも、その後に何か文字列をつなげると、上手くいかない
var t = (i < 5 ? "true" : "false") + "!";
3:でも、その前に何か文字列をつなげると、上手くいく
var t = "Boolean : " + (i < 5 ? "true" : "false") + "!";

何か、ちゃんとした法則があるのでしょうか…。

私は、AS1.0に関してはparaFlaしか使ったことがないのですが、
他のソフトでも同じなのでしょうか?
6 日付:2010/05/19(水)18:52:09 ID:2iuB4losX8Zs
>同じ解釈になっていると思いますけど…。

ご指摘の通りですね。すみません…。



>他のソフトでも同じなのでしょうか?

Adobe Flash で以下のスクリプトを動作させると
----------------------------------------------------------
var i;
for(i=0;i<10;i++){
var t = ((i < 5) ? "true" : "false")+"!";
trace( i + " : " + t );
}
----------------------------------------------------------

以下のように出力されます。

----------------------------------------------------------
0 : true!
1 : true!
2 : true!
3 : true!
4 : true!
5 : false!
6 : false!
7 : false!
8 : false!
9 : false!
----------------------------------------------------------
ParaFla とは違う結果になりますね。



>3:でも、その前に何か文字列をつなげると、上手くいく

確かに先頭に文字列を足すと回避できますね。

var t = "" + (i < 5 ? "true" : "false") + "!";

swfのサイズが 4 バイト増えますが回避策のひとつになりそうです。
7 名前:k 日付:2010/05/19(水)21:59:32 ID:9kJEWPZA4knz
Adobe Flashでは正常なのですね…。
ということは、paraFla固有の問題ということでしょうか?
もしそうなら、フリーのソフトということで諦めますが…。

>var t = "" + (i < 5 ? "true" : "false") + "!";
あ、なるほど。空文字列を足せば、問題は解決できますね…!参考になりました!
8 名前:状態変更 日付:2010/05/21(金)07:26:22 ID:9kJEWPZA4knz
この質問の状態を『解決』に変更しました。
このスレッドについて
質問の状態 :
解決済み
投稿開始日 :
2010/05/16(日)16:28:29
投稿終了日 :
2010/05/21(金)07:26:22
投稿者 :
k
レス総数 :
8
スレッド番号 :
23
MondoCollectionSystem ver.0x00020000 by Hakuhin