今まで敵機などの管理に1次元配列を使ってました。
dim enemyType,100この3つの1次元配列を、1つの2次元配列にすれば、
dim enemyX,100 dim enemyY,100
配列の個数を減らせると思い列挙定数を使ってみました。
#enum eType=0 ;敵機のタイプこのような感じで、敵機の発生は成功しました。
#enum eX ;敵機の横軸 #enum eY ;敵機の縦軸 #enum MAX_PARAM *Main dim enemy,100,MAX_PARAM gosub *EnemyBirth stop *EnemyBirth foreach enemy if(enemy.cnt.eType==0){ enemy.cnt.eType=1 enemy.cnt.eX=rnd(640-32) enemy.cnt.eY=0 break } loop return
しかし、次をご覧ください。
#enum eType=0 ;敵機のタイプこれを実行すると(2A)、(2B)は、列挙定数の eType、eX、eY が正しく評価されません。
#enum eX ;敵機の横軸 #enum eY ;敵機の縦軸 #enum MAX_PARAM *Main ;(1) dim enemy,100,MAX_PARAM enemy.0.0=100 enemy.0.1=200 enemy.0.2=300 Display 0,"(1)" ;(2A) dim enemy,100,MAX_PARAM enemy.0.eType=100 enemy.0.eX=200 enemy.0.eY=300 Display 0,"(2A)" ;(2B) dim enemy,100,MAX_PARAM enemy.1.eType=100 enemy.1.eX=200 enemy.1.eY=300 Display 1,"(2B)" ;(3) dim enemy,100,MAX_PARAM n=0 enemy.n.eType=100 enemy.n.eX=200 enemy.n.eY=300 Display 0,"(3)" stop #deffunc Display int _no_,str _msg_ mes _msg_ mes strf("eType=%d",enemy(_no_,0)) mes strf("eX=%d",enemy(_no_,1)) mes strf("eY=%d",enemy(_no_,2)) mes "" return
つまり、整数値に置き変わらずに変数の参照扱いになってます。
どうやら配列の1次元「添え字」に整数値を与えると2次元「添え字」の列挙定数は正しく評価されないようだ。
これは、HSPのバグと考えて良いと思いますが、どうでしょうか。