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


HSPTV!掲示板


未解決 解決 停止 削除要請

2010
1222
ひらまるhgimgで画面全体のスクロール2解決


ひらまる

リンク

2010/12/22(Wed) 14:38:58|NO.36284

hgimg3において、2Dスプライトの描画基点は、カメラに影響されず、画面の中央になるのですが、
この基点をずらすなどして、画面全体をスクロールするにはどうしたら良いでしょうか。
正確なスクリーン上の座標を用いて高速に処理する必要があるので、
3D板ポリゴンに貼りつけて常にカメラの方向を向かせるような方法はとりたくありません。

動作としては、以下のスクリプトのようにしたいと思っています。
以下のスクリプトでは、全てのオブジェクトを個別に移動することによって、
擬似的にスクロールに見せかけていますが、これだとオブジェクトが増えた分だけ処理がかさんでしまいます。

;hgimg3結合 #include "hgimg3.as" ;スクリーン初期化 screen 0,320,240 title "hgimg 全体移動サンプル" hgini ;バッファ生成 buffer 1, 32, 32 color 255,0,0 boxf color 255,255,255 boxf 1,1,30,30 ;テクスチャ生成 settex TexID = stat ;モデル生成 addspr ModelID, 0, 0, 0, 31, 31, TexID ;オブジェクト生成 repeat 100 regobj ObjID( cnt ), ModelID setpos ObjID( cnt ), -160 + rnd( 320 ), -120 + rnd( 240 ), 0.01 * rnd( 100 ) loop ;メインループ repeat hgdraw allMove 0.2, 0.1 hgsync 16 loop ;全体移動命令(これじゃイヤ) #deffunc allMove double _addX, double _addY repeat 100 addpos ObjID( cnt ), _addX, _addY loop return
hgimg3において、2Dスプライトを全体スクロールする方法。
ひとりでは見つけられなかったので、どなたかご教授いただけると幸いです。



この記事に返信する


晩御飯

リンク

2010/12/22(Wed) 17:32:45|NO.36288

私見ですが、オブジェクトの座標と実際に描写する座標は分けて扱ったほうが良いと思います。

#enum X = 0 #enum Y #enum Z #define OBJMAX 100 #define SPEED 2 // オブジェクトの座標を格納する配列 dim objpos, OBJMAX, 2 // 擬似カメラの座標 dim cmrpos, 2 ;hgimg3結合 #include "hgimg3.as" ;スクリーン初期化 screen 0,320,240 title "hgimg 全体移動サンプル" hgini ;バッファ生成 buffer 1, 32, 32 color 255,0,0 boxf color 255,255,255 boxf 1,1,30,30 ;テクスチャ生成 settex TexID = stat ;モデル生成 addspr ModelID, 0, 0, 0, 31, 31, TexID ;オブジェクト生成 repeat OBJMAX regobj ObjID( cnt ), ModelID objpos( cnt, X ) = -160 + rnd( 320 ) objpos( cnt, Y ) = -120 + rnd( 240 ) objpos( cnt, Z ) = 0 loop // 擬似カメラ初期化 cmrpos( X ) = 0 cmrpos( Y ) = 0 cmrpos( Z ) = 0 ;メインループ repeat // 矢印で擬似カメラの移動 getkey keyup, 38 : if keyup : cmrpos( Y ) -= SPEED getkey keyright, 39 : if keyright : cmrpos( X ) += SPEED getkey keydown, 40 : if keydown : cmrpos( Y ) += SPEED getkey keyleft, 37 : if keyleft : cmrpos( X ) -= SPEED getkey esc, 27 : if esc : end // カメラの座標に合わせて描写する座標の更新 repeat OBJMAX setpos ObjID( cnt ), objpos( cnt, X ) - cmrpos( X ), objpos( cnt, Y ) - cmrpos( Y ), objpos( cnt, Z ) - cmrpos( Z ) loop // 描写 hgdraw hgsync 16 loop
結局これも擬似的なスクロールに変わりないので解決にはなってませんけど。



ひらまる

リンク

2010/12/22(Wed) 18:09:36|NO.36289

返信ありがとうございます。
自分も、標準命令(gcopyなど)で描画する場合はその方法をとっていました。
しかし画像処理に長けたhgimgなら、
自分が見落としているだけで、しっかりしたスクロール機能があるのではないかと思ったのです。
せめて親子化ができれば……親子化?

;hgimg3結合 #include "hgimg3.as" ;スクリーン初期化 screen 0,320,240 title "hgimg 全体移動サンプル" hgini ;バッファ生成 buffer 1, 32, 32 color 255,0,0 boxf color 255,255,255 boxf 1,1,30,30 ;テクスチャ生成 settex TexID = stat ;モデル生成 addspr ModelID, 0, 0, 0, 31, 31, TexID ;オブジェクト生成 ;2次元カメラオブジェクト regobj Camera2D, , OBJ_HIDE;(new) ;ザコオブジェクト repeat 100 regobj ObjID( cnt ), ModelID setpos ObjID( cnt ), -160 + rnd( 320 ), -120 + rnd( 240 ), 0.01 * rnd( 100 ) objchild Camera2D, ObjID( cnt );(new) loop ;メインループ repeat hgdraw camMove 0.2, 0.1 ;(new) hgsync 16 loop ;カメラ移動 (new) #deffunc camMove double _addX, double _addY addpos Camera2D, _addX, _addY return
んー 悪くない。汎用性も高そう。
これで決まりですね!
ありがとうございました!



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