hsp3dishをAndroid実機(SO-04E Android4.1.2)を動かしていたのですが、
#deffunc で用意した命令内で m_pi を含む数式を計算するとこの命令のルーチンから復帰(return)できなくなる
という現象に遭遇しました。logcatを見るとエラー10 (「サブルーチン外のreturnは無効です」)となっていました。
因みにPCの環境は Windows7 Home Premium 64bit, HSP 3.5beta, JRE8+JDK8 です。
(※もう少し前のHSPでも同じ現象に遭います)
数千行のコードから特定した原因がこれでした。↓ (なんか1年程前にも同じような...)
5〜8行目では平気な顔をしていますが、おそらく5行目でサブルーチンの情報が壊れているのか6〜8行目では「もう死んでい」て、
#include "hsp3dish.as" #module mod1 #deffunc cmd1 int div Δθ = m_pi*2.0/div a = 1+2 b = a*4 c = sqrt(b) return sin(Δθ) #global cmd1 12 redraw 0 color : boxf color 255 : mes "stat="+refdval+"" redraw 1
9行目の return でそれが明らかになります。
やってみると分かりますが、6行目に return 0 を突っ込んで此処で error 10 を出すこともできます。
勿論これだけを報告しにやってきたわけではなく、一応の解決策も見つけています。(と言ってもあのときと一緒ですが)
これだけです。前述のコードであれば、5行目を次で置き換えると平気になります。
とりあえず計算を分割する
Δθ = m_pi*2.0 : Δθ/div
まさか数式で落ちているとは夢にも思わないでしょうからこれはなかなか特定できません。
しかも、地雷を踏んだ後に repeat 〜 loop やるとこれまたすごい肩すかしを喰らいます。
なんと、repeat の第二引数で明示的に0を指定しないと、cnt の始値が0にならないのです。
(今日は6とかでした。おかげで「配列の要素が無効です」と言われて、原因を大まじめに探るも、どこが悪いのかさっぱり。それもそのはずですが。)
dishで何か作っていて実機で不思議なエラーが出てどうにも困った時は一度 数式 を疑ってみるのもいいかもしれません。
同じことで困っている人(※もしいれば)のヒントになるといいな〜と思います。