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


HSPTV!掲示板


未解決 解決 停止 削除要請

2009
1023
kazstruct型ってなんでしょう?3解決


kaz

リンク

2009/10/23(Fri) 10:12:42|NO.28513

HSP付属のシューティングゲームのサンプルの中に

; 敵全体の初期化
;
etime=0
dimtype mod_enemy,vartype("struct"),32
return
という部分があるのですが、structという変数型についての説明を見つけられませんでした。
見るからに便利そうなのですが、struct型がどういうものか、情報おもちの方がおられましたら教えていただけませんでしょうか。
よろしくお願いします。



この記事に返信する


窓口

リンク

2009/10/24(Sat) 07:13:32|NO.28523

ストラクチャー、構造体の事ですね。
異なるデータ形式のデータ。を一つのポインタ(変数)に収めることができる機能です。

mes vartype("struct")

を実行してみると5が返っているみたいですから、これはそれがmodule型変数で有る事を表しています。
モジュール型変数は構造体の様に扱うことが可能みたいです。


#module a x,y,z ; module定義 ;モジュール型配列の初期化 および配列の拡張 ; 0 初期化する構造体名 ; 1 モジュール名 ; 2~3 その他のステータス #modinit int p1,int p2,str p3 x = p1 : y = p2 : z = p3 : return ;指定されたmodule変数に値をセットする #modfunc setele int SE_1 , int SE_2 , str SE_3 x = se_1 : y = se_2 : z = se_3 : return return ;構造体の内容をプリントする #modfunc mesvar mes strf("%08x,%08x,%s",x,y,z) return #global ;モジュール型配列変数の初期化 ;モジュール型配列10まで確保する repeat 10 newmod v,a,cnt+10,cnt+100,"v"+str(cnt) loop ;モジュール型配列変数 1 に値を代入 ;第二引数のbitフラグにより y と z の初期化をキャンセル setele v(1), 0xffffffff , 1200 , "こんにちは" ;モジュール型配列の内容全てをプリント foreach v mesvar v(cnt) loop mes length(v)

まだ試していませんが配列変数も扱うことが出来そうですね。
HSP付属のプログラミングマニュアルにも情報が載っていますのでそちらも参照してください。



kaz

リンク

2009/10/25(Sun) 20:10:26|NO.28545

窓口さん、返信ありがとうございます。
うまく使えば、かなり便利そうですね。
というか、HSPのゲーム製作は、これを使いこなすのが基本なんでしょうか^^;
いただいたスクリプトを理解できるようにがんばります。
ありがとうございました!



窓口

リンク

2009/10/26(Mon) 02:01:40|NO.28551

>>というか、HSPのゲーム製作は、これを使いこなすのが基本なんでしょうか^^;

かなり特殊な状況でない限り、使うことはないと思いますね(笑)
例えば4次元配列変数変数10個を用意してそれをif文を使用せずにインデックス番号だけで
参照したい場合とか。




#module hoge struct ;newmod を実行した際にサブルーチンジャンプを行う。 ; 1 登録するmodule変数名 ; 2〜 その他のステータス #modinit int nwp1 , int nwp2 , int nwp3 , int nwp4 len = nwp1 , nwp2 , nwp3 , nwp4 dim struct , len(0) , len(1) , len(2) , len(3) return ;四次元配列の1要素から値を代入 #modcfunc get int G_p1 , int G_p2 , int G_p3 , int G_p4 return struct(G_p1,G_p2,G_p3,G_p4) ;四次元配列の1要素に値を代入 #modfunc set int s_p1 , int s_p2 , int s_p3 , int s_p4 , int s_p5 struct(s_p1,s_p2,s_p3,s_p4) = s_p5 : return #global ;------------------------------------- ;module型変数を定義 ;変数「VM」をmodule型変数とする newmod VM , hoge , 10,10,10,10 ; #modinitを実行 変数VM(0)を定義 newmod VM , hoge , 10,10,10,10 ; #modinitを実行 変数VM(1)にリサイズ newmod VM , hoge , 10,10,10,10 ; #modinitを実行 変数VM(2)にリサイズ ;dim struct,10,10,10,10 ;dim len,4 ;上記の二つの配列変数が module変数「VM」の1要素毎に確保された状態 ;------------------------------------- ;「 #modfunc 」 ;「 #modcfunc 」 ;で定義された命令関数はユーザーで定義した引数に加えて先頭にmodule変数名を記述する必要がある mes "代入前" mes strf("VM(0)の struct(9,9,9,9) = %d" , get(VM(0),9,9,9,9) ) ; VM(0)の struct(9,9,9,9)からロード mes strf("VM(1)の struct(9,9,9,9) = %d" , get(VM(1),9,9,9,9) ) ; VM(1)の struct(9,9,9,9)からロード mes strf("VM(2)の struct(9,9,9,9) = %d" , get(VM(2),9,9,9,9) ) ; VM(1)の struct(9,9,9,9)からロード set VM(0) , 9,9,9,9 , 1200 ; VM(0)内の struct(9,9,9,9) に 1200を代入。 set VM(1) , 9,9,9,9 , 1201 ; VM(1)内の struct(9,9,9,9) に 1201を代入。 set VM(2) , 9,9,9,9 , 1202 ; VM(2)内の struct(9,9,9,9) に 1202を代入。 mes "代入後" mes strf("VM(0)の struct(9,9,9,9) = %d" , get(VM(0),9,9,9,9) ) ; VM(0)の struct(9,9,9,9)からロード mes strf("VM(1)の struct(9,9,9,9) = %d" , get(VM(1),9,9,9,9) ) ; VM(1)の struct(9,9,9,9)からロード mes strf("VM(2)の struct(9,9,9,9) = %d" , get(VM(2),9,9,9,9) ) ; VM(1)の struct(9,9,9,9)からロード

解決後に失礼しました。



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