どんなプログラムでも配列は使うということで
配列の練習です。
---
; 配列
; 3要素の配列を定義
dim naRGB, 3
; 値を設定
naRGB(0) = 200
naRGB(1) = 240
naRGB(2) = 200
; 値を取得
color naRGB(0), naRGB(1), naRGB(2)
; テスト
boxf
stop
---
特に問題なし。
定義のところが特殊かなぁ。
HSPはオブジェクト指向的な仕組みがない・・と思ったら
似たようなことができるのでそのメモ。
使うのは、#moduleです。
---
; モジュール定義
; classTest
; プロパティ
; int nNo
; str strName
; メソッド
; GetName
; GetNo
; AddNo
#module classTest nNo, strName
#modinit int p_nNo, str p_strName
nNo = p_nNo
strName = p_strName
return
#modcfunc GetName
return strName
#modcfunc GetNo
return nNo
#modcfunc AddNo int nNum
nNo = nNo + nNum
return 0
#global
;****************************
; メイン処理
;****************************
; インスタンス生成
newmod obj1, classTest, 1, "obj1"
; GetName
strTemp = GetName(obj1)
mes "str:" + strTemp
; AddNo
nTemp = AddNo(obj1, 5)
nTemp = GetNo(obj1)
mes "no:" + str(nTemp)
stop
---
長い!
やってることはたいしたことないのに。。
ポイントは、うーん・・あんまりないな。
やり方さえわかれば難しくない。
ただ、ユーザ定義関数とユーザ定義命令というのがあって、
ここらの使い分けが難しそう。
呼び方もちょっと気になる。
~関数が、戻り値ありの関数
~命令が、一般的に言うサブルーチン
という感じ。
似たようなことができるのでそのメモ。
使うのは、#moduleです。
---
; モジュール定義
; classTest
; プロパティ
; int nNo
; str strName
; メソッド
; GetName
; GetNo
; AddNo
#module classTest nNo, strName
#modinit int p_nNo, str p_strName
nNo = p_nNo
strName = p_strName
return
#modcfunc GetName
return strName
#modcfunc GetNo
return nNo
#modcfunc AddNo int nNum
nNo = nNo + nNum
return 0
#global
;****************************
; メイン処理
;****************************
; インスタンス生成
newmod obj1, classTest, 1, "obj1"
; GetName
strTemp = GetName(obj1)
mes "str:" + strTemp
; AddNo
nTemp = AddNo(obj1, 5)
nTemp = GetNo(obj1)
mes "no:" + str(nTemp)
stop
---
長い!
やってることはたいしたことないのに。。
ポイントは、うーん・・あんまりないな。
やり方さえわかれば難しくない。
ただ、ユーザ定義関数とユーザ定義命令というのがあって、
ここらの使い分けが難しそう。
呼び方もちょっと気になる。
~関数が、戻り値ありの関数
~命令が、一般的に言うサブルーチン
という感じ。
画像を移動したかったのでサンプルを探して、結論はこう。
---
*loop
nPosx = 20
nPosy = 40
; 描画処理の停止
redraw 0
; 背景で塗りつぶす
color 200,240,200
boxf
; 画像を表示
gmode 2
pos nPosx, nPosy
celput imgPack
; 描画処理の再開
redraw 1
; 位置を変更
nPosx = nPosx + 5
nPosy = nPosy + 5
; 少し待つ
await 20
goto loop
---
ポイントは、描画処理をいったん停止すること。
今は、塗りつぶしの四角と、1つの画像を表示するだけだけど、
画像が多くなったりするとちらつくので
停止して、全部描画してから、再開。
そうすると一気に描画するからちらつかない。(そういう理由だと思う。。)
あとawait20は、ちらつき防止と、CPUの負荷を軽減するためかなぁ。
よくわからないや。
---
*loop
nPosx = 20
nPosy = 40
; 描画処理の停止
redraw 0
; 背景で塗りつぶす
color 200,240,200
boxf
; 画像を表示
gmode 2
pos nPosx, nPosy
celput imgPack
; 描画処理の再開
redraw 1
; 位置を変更
nPosx = nPosx + 5
nPosy = nPosy + 5
; 少し待つ
await 20
goto loop
---
ポイントは、描画処理をいったん停止すること。
今は、塗りつぶしの四角と、1つの画像を表示するだけだけど、
画像が多くなったりするとちらつくので
停止して、全部描画してから、再開。
そうすると一気に描画するからちらつかない。(そういう理由だと思う。。)
あとawait20は、ちらつき防止と、CPUの負荷を軽減するためかなぁ。
よくわからないや。