HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2013
0808
FunnyMakerモジュール内の 特定の数式が Android実機で落ちる10解決


FunnyMaker

リンク

2013/8/8(Thu) 21:58:46|NO.56221

題名の通りです。
どうしても分からないので質問しました。

下のコードが、Windows版hsp3dishでは正常に動くのに、付属のhsp3dishHelperを使って
Android2.3.3向けにビルドしたAPKファイルから実機にインストールして実行すると、そのアプリが
強制終了されます。


#include "hsp3dish.as" #module Name_M_CPN4 ;角度単純化モジュール ; [書式] ; val = Mod_SimplifyAngle(P1,P2,P3) ; P1 : ターゲットの角度 (実数) ; P2 : オプション1。(1,2,3) = (正負を維持,最も単純な正の角度,〃負の角度) ; P3 : オプション2。(1,2) = (度数法,弧度法) #defcfunc Mod_SimplifyAngle double angle ,int opt1 , int opt2 if opt2 = 1 {;度数法 result = angle - double(int(angle/360.0))*360.0;正負を維持した場合 if (opt1 = 2)&(result < 0.0) : result + 360.0;最も単純な正の角にする場合 if (opt1 = 3)&(result > 0.0) : result - 360.0;最も単純な負の角にする場合 } else {;弧度法 result = angle - double(int(angle/(m_pi*2.0)))*m_pi*2.0 ;↓展開(こうしないとdishで落ちる) ;k = m_pi*2.0 ;result = angle - double(int(angle/k))*m_pi*2.0 if (opt1 = 2)&(result < 0.0) : result + m_pi*2.0 if (opt1 = 3)&(result > 0.0) : result - m_pi*2.0 } return result #global Target = m_pi*2.5 k1 = Mod_SimplifyAngle(Target,2,2) redraw 0 color 0,0,0 : boxf color 255,255,255 pos 0,0 : mes rad2deg(k1) redraw 1

(※笑っちゃうような処理をやっているかもしれません。もしそうだったとしても、どうか堪えて相手してやってください。)

18行目でアウトになることは分かっています。
そこで、18行目の式を軽く展開して、20,21行目のように処理を分けてやると落ちませんでした。

どうしてこうなるんでしょうか?
大口をたたくようかもしれませんが、これはバグでしょうか?

テストしたHSPのバージョンは 3.32 と、 3.4beta2 で、両方で同じ結果でした。
あと、ビルドの対象がAndroid 2.3.3 なのは、それ以外のバージョンを選んで新規プロジェクトを
作ろうとするとファイルのコピーの途中で内部エラーが発生して上手くいかないからです。
(※SDKマネージャで必要なものは全部入れたはずなのですが)
それで、他のバージョンのAndroid向けにビルドして試すことができていません。
もしかするとこれも何かを意味するのでしょうか?


これ以上自分では分からないところまできてしまいました。
どなたかご教授ください。



この記事に返信する


YSR

リンク

2013/8/8(Thu) 22:12:46|NO.56222

よく分からんが、
「result = angle \ (m_pi * 2.0)」
と書き換えるってのはどうだ?



FunnyMaker

リンク

2013/8/8(Thu) 22:29:05|NO.56223

YSRさん、ありがとうございます。
時間の都合上、今日はできないので明日やってみます。



FunnyMaker

リンク

2013/8/9(Fri) 13:39:26|NO.56243

やってみました。

余り \ を使えば良かったのですね。(何で気がつかなかったんだろう...)

スクリプトは簡潔になりましたが、症状は相変わらずで、


result = angle \ (m_pi * 2.0)

のままでは、落ち、


k = m_pi * 2.0 result = angle/k

として処理を分けてやっと動きました。

「m_pi」が何か関係しているんですかね...。



どこぞのだれか

リンク

2013/8/9(Fri) 17:53:25|NO.56247

M_PI=3.14159265358979323846なので、桁を減らしてみるとか。



FunnyMaker

リンク

2013/8/9(Fri) 22:30:19|NO.56251

いや、桁自体に関しては大丈夫なようです。
適当な変数に 3.14159265358979323846 を保存して(※dishで動かした時点で32bit倍精度になってしまうが)
m_piの代わりに使うと、落ちずに済みました。

やっぱり m_pi に何かがあるような気がします。



YSR

リンク

2013/8/9(Fri) 23:46:38|NO.56253

>NO.56251
要するに長桁を#defineや#constで置き換える際に、
Androidだとバイナリをご認識するってことかな?
例えば「result = angle \ (3.14159265358979323846 * 2.0)」だと大丈夫なの?



FunnyMaker

リンク

2013/8/10(Sat) 09:24:49|NO.56261

>YSRさん

やってみましたが、やはり駄目なようです。落ちてしまいます。

そして、もっとおかしいことに気がつきました。

result = angle \ (3 * 2.0)
↑これは落ちないんですが、
以下のやつは全部落ちました。(※ちゃんと1行づつバラでテストしています。)
小数位を使うとアウトのようです。

result = angle \ (3.1 * 2.0) result = angle \ (3.14 * 2.0) result = angle \ (3.141 * 2.0) ・・・・・・(未テスト(∵結果は見えている)) result = angle \ (3.14159265358979323846 * 2.0)

でも変なんです。3.14・・・・・・ という数を直接書くと落ちるくせに、変通に代入して書くと落ちないんです。
いよいよ分からなくなってきました...。




おにたま(管理人)

リンク

2013/8/11(Sun) 00:56:24|NO.56274

ご報告ありがとうございます。
数式が正しく実行されない件は、HSP3Dish側の何らかの不具合かと思われます。
今後のバージョンで修正していきたいと思います。

Android 2.3.3より新しいバージョンのプロジェクトが作成できないという症状は、
ちょっと原因がわかりません。同様の症状が出る方がいましたらお知らせください。
3.4beta2を再度インストールしても同じ結果でしょうか。
あと、他のバージョンのAndroid端末であっても、Android 2.3.3でビルドした
アプリは動作するはずです。



FunnyMaker

リンク

2013/8/11(Sun) 11:30:36|NO.56276

>おにたまさん

ご回答ありがとうございます。
やはり、数式の件は不具合の可能性有りということですね。
とりあえず現在は、式を数段に分割するという方法でエラーを回避することにしました。
問題が修正されるのを楽しみに待ちます。

Android2.3.3向け以外のプロジェクトの新規作成に失敗する件についてですが、
AndroidSDK をマニュアルに従って入れ直し、3.4beta2も再インストールし直したところ、
API-16まで無事に作成できるようになりました。

>あと、他のバージョンのAndroid端末であっても、Android 2.3.3でビルドしたアプリは動作するはずです。
すみません、No.56221 で私の表現が足りていませんでした。ビルド対象はAndroid2.3.3でしたが、
テストした実機はバージョン4.1.2と2.3.5でした。

これでdish用アプリの製作を再開できるようになりました。ありがとうございました。



FunnyMaker

リンク

2013/8/11(Sun) 11:31:17|NO.56277

※解決チェック忘れていました。



ONION software Copyright 1997-2021(c) All rights reserved.