いなえさんのHGIMG3講座を進めてみます。
今日は、
ボックス表示と移動、回転、サイズ変更
です。いなえさんのプログラムは高度なものなので、分けて簡単にしてみました。
まず、
移動↓
#include "hgimg3.as" ;hgimg3プラグインをこのプログラムに結合する
;ボックス表示と移動
screen 0,480,360,0 ;WindowID0、480*360画面をフルカラーモードで初期化
hgini ;hgimg3の初期化
addbox modelid,10,10 ;モデルID:moderl,10*10の箱作成
regobj object1,modelid ;モデルID:modelidのモデルがオブジェクトID:object1に登録
x=0 : y=0 ;キー入力用の変数
*main ;メインルーチン
stick ky,15 ;全方向の矢印キー入力情報取得
if ky & 1 : x-=1 ;左矢印キーならxを1減らす
if ky & 2 : y-=1 ;上矢印キーならyを1減らす
if ky & 4 : x+=1 ;右矢印キーならxを1増やす
if ky & 8 : y+=1 ;下矢印キーならyを1増やす
setpos object1,x/10,y/10,0 ;object1の位置移動 hgdraw ;描画の実行
hgsync 10 ;10/1000秒の待ち時間
goto *main ;メインルーチンに戻る
次に、
回転↓
#include "hgimg3.as" ;hgimg3プラグインをこのプログラムに結合する
;ボックス表示と回転
screen 0,480,360,0 ;WindowID0、480*360画面をフルカラーモードで初期化
hgini ;hgimg3の初期化
addbox modelid,10.0,10.0 ;モデルID:moderl,10*10の箱作成
regobj object3,modelid ;モデルID:modelidのモデルがオブジェクトID:object3に登録
x=0 : y=0 ;キー入力用の変数
*main ;メインルーチン
stick ky,15 ;全方向の矢印キー入力情報取得
if ky & 1 : x-=1 ;左矢印キーならxを1減らす
if ky & 2 : y-=1 ;上矢印キーならyを1減らす
if ky & 4 : x+=1 ;右矢印キーならxを1増やす
if ky & 8 : y+=1 ;下矢印キーならyを1増やす
setang object3,x/10,y/10,0 ;object3の回転 hgdraw ;描画の実行
hgsync 10 ;10/1000秒の待ち時間
goto *main ;メインルーチンに戻る
そして、
サイズ変更↓
#include "hgimg3.as" ;hgimg3プラグインをこのプログラムに結合する
;ボックス表示とサイズ変更
screen 0,480,360,0 ;WindowID0、480*360画面をフルカラーモードで初期化
hgini ;hgimg3の初期化
addbox modelid,10.0,10.0 ;モデルID:moderl,10*10の箱作成
regobj object4,modelid ;モデルID:modelidのモデルがオブジェクトID:object4に登録
x=0 : y=0 ;キー入力用の変数
*main ;メインルーチン
stick ky,15 ;全方向の矢印キー入力情報取得
if ky & 1 : x-=1 ;左矢印キーならxを1減らす
if ky & 2 : y-=1 ;上矢印キーならyを1減らす
if ky & 4 : x+=1 ;右矢印キーならxを1増やす
if ky & 8 : y+=1 ;下矢印キーならyを1増やす
setscale object4,1+x/10,1+y/10,1 ;object4のサイズ変更 hgdraw ;描画の実行
hgsync 10 ;10/1000秒の待ち時間
goto *main ;メインルーチンに戻る
最後に、全部やってしまうプログラム↓
#include "hgimg3.as" ;hgimg3プラグインをこのプログラムに結合する
;ボックス表示と移動、角度変更、サイズ変更
screen 0,480,360,0 ;WindowID0、480*360画面をフルカラーモードで初期化
hgini ;hgimg3の初期化
addbox modelid,10.0,10.0 ;モデルID:moderl,10*10の箱作成
regobj object1,modelid ;モデルID:modelidのモデルがオブジェクトID:object1に登録
regobj object2,modelid ;モデルID:modelidのモデルがオブジェクトID:object2に登録
regobj object3,modelid ;モデルID:modelidのモデルがオブジェクトID:object3に登録
regobj object4,modelid ;モデルID:modelidのモデルがオブジェクトID:object4に登録
setpos object3,10.0,-10.0,0 ;オブジェクトID=3の位置移動
setpos object4,-10,-10,0 ;オブジェクトID=4の位置移動
x=0 : y=0 ;キー入力用変数
*main ;メインルーチン
stick ky,15 ;全方向の矢印キー入力情報取得
if ky & 1 : x-=1 ;左矢印キーならxを1減らす
if ky & 2 : y-=1 ;上矢印キーならyを1減らす
if ky & 4 : x+=1 ;右矢印キーならxを1増やす
if ky & 8 : y+=1 ;下矢印キーならyを1増やす
setpos object1,10.0+x/10,10.0+y/10,0 ;object1の位置移動 setpos object2,-10.0,10.0,(x+y)/10 ;object2の位置移動 setang object3,x/10,y/10,0 ;object3の回転 setscale object4,1.0+sin(x/10),1.0+sin(y/10),1.0 ;object4のサイズ変更 hgdraw ;描画の実行
hgsync 10 ;10/1000秒の待ち時間
goto *main ;メインルーチンに戻る
<実行結果>

<新しい命令>★オブジェクトの位置情報設定
setpos
id,x,y,z id : オブジェクトID
x,y,z : 座標
★キー入力情報を取得する
stick
p1,p2 p1 : 読み込み用変数
p2 : トリガータイプキー指定
・ボタンには以下のように番号が振られています:
1 : カーソルキー左(←)
2 : カーソルキー上(↑)
4 : カーソルキー右(→)
8 : カーソルキー下(↓)
16 : スペースキー
32 : Enterキー
64 : Ctrlキー
128 : ESCキー
256 : マウスの左ボタン
512 : マウスの右ボタン
1024 : TABキー
調べるキーを足し算していきます。今日のプログラムですと:
1+2+4+8=15
ですので、
stick key,15
となるわけです。
・ky&1とky=1の違いは、同時に押されていてキー入力を取得できるかどうかの違いのようです。
★オブジェクトの角度情報設定
setang
id,x,y,z id : オブジェクトID
x,y,z : 各角度(単位ラジアン)
★オブジェクトのサイズ情報設定
setscale
id,x,y,z id : オブジェクトID
x,y,z : 各表示倍率
<備考>・キー入力情報の数値を1以下の実数にすると、何故か全く動きませんでした。何度も見直しましたが原因が分かりません

。やむなく、1とし、後で10で割ると動きましたので、そうしました。
下の※参照
簡単にするつもりが、余計にややこしくなってしまいました

。
-----------
※その後の追記:原因分かりました。xとyの初期値(キー入力用の変数)で、整数を使っていました。従って、
x=0.0 : y=0.0
とすれば何ら問題ありませんでした。
m(_ _)mすみません。