2016年7月23日土曜日

HSPの落とし穴(市松模様)

おはようございます、セルディアです。

まだあった! HSP3Dishの落とし穴!


前回にいろいろとHSP3Dishのこいつぁヤバイ仕様を挙げていましたが、今回新たな仕様を発見したのでご連絡いたします。

・関数にldimで定義したラベル配列変数の要素を渡せない

どういうことかと申しますと、たとえば以下のサンプルプログラムを例に挙げます。

goto *start
#include "hsp3dish.as"

*label0
mes "label0"
return

*label1
mes "label1"
return

*label2
mes "label2"
return

#deffunc testfunction1 var m_label, int m_int
; 数字
mes "" + m_int
gosub m_label
return

*start

redraw 0
color 255, 255, 255
boxf

color 0, 0, 0
ldim labelarray, 3
labelarray(0) = *label0
labelarray(1) = *label1
labelarray(2) = *label2

; 本来の使いかた
gosub labelarray(0)
gosub labelarray(1)
gosub labelarray(2)

; 関数へ引き渡す
testfunction1 labelarray(0), 0
testfunction1 labelarray(1), 1
testfunction1 labelarray(2), 2

redraw 1
ldim配列変数labelarrayを定義して、一度gosubで普通に呼び出し、次にtestfunction1で一度ラベル変数を渡して呼び出しています。

関数testfunctionは、var型の引数を定義していて、こうすると引数にラベル変数を渡すことができます。

本来、このプログラムはgosubで"label0","label1","label2"が出力され、もう一度testfunctionで同じく出力されるのですが、Androidアプリに変換して実行すると、testfinctionでは"label0","label0","label0"と同じ出力しかされません。

testfunctionには、配列の0番目の要素しか渡っていないんですね。

困った。

以下のようにすれば一時的にしのげます。


_label = labelarray(2)
testfunction1 _label, 2

丁寧に解説しましたが、要するにラベル型配列の要素を関数に渡すなってことですね!

いじょ。

0 件のコメント:

コメントを投稿