まだあった! HSP3Dishの落とし穴!
前回にいろいろとHSP3Dishのこいつぁヤバイ仕様を挙げていましたが、今回新たな仕様を発見したのでご連絡いたします。
・関数にldimで定義したラベル配列変数の要素を渡せない
どういうことかと申しますと、たとえば以下のサンプルプログラムを例に挙げます。
ldim配列変数labelarrayを定義して、一度gosubで普通に呼び出し、次にtestfunction1で一度ラベル変数を渡して呼び出しています。goto *start#include "hsp3dish.as"*label0mes "label0"return*label1mes "label1"return*label2mes "label2"return#deffunc testfunction1 var m_label, int m_int; 数字mes "" + m_intgosub m_labelreturn*startredraw 0color 255, 255, 255boxfcolor 0, 0, 0ldim labelarray, 3labelarray(0) = *label0labelarray(1) = *label1labelarray(2) = *label2; 本来の使いかたgosub labelarray(0)gosub labelarray(1)gosub labelarray(2); 関数へ引き渡すtestfunction1 labelarray(0), 0testfunction1 labelarray(1), 1testfunction1 labelarray(2), 2redraw 1
関数testfunctionは、var型の引数を定義していて、こうすると引数にラベル変数を渡すことができます。
本来、このプログラムはgosubで"label0","label1","label2"が出力され、もう一度testfunctionで同じく出力されるのですが、Androidアプリに変換して実行すると、testfinctionでは"label0","label0","label0"と同じ出力しかされません。
testfunctionには、配列の0番目の要素しか渡っていないんですね。
困った。
以下のようにすれば一時的にしのげます。
_label = labelarray(2)testfunction1 _label, 2
丁寧に解説しましたが、要するにラベル型配列の要素を関数に渡すなってことですね!
いじょ。