|
|
2007/4/21(Sat) 04:41:05|NO.7617
はじめまして、丸子と申します。
hgimg3の2Dスプライトを使っていますが、
絵のパターンの切り替えがうまくできません。
下記、そのテストの例ですが、regobjの切り替えも含めて
かなりいろいろとやってみましたが方法がわかりません。
良い方法がありましたら教えてください。
;==========================================
;2Dのパターンチェンジのテスト ALT+F4で停止
;==========================================
#include "hgimg3.as"
;-----------------------------------------フル画面モード
bgscr 0,1024,768,0 : cls 4
hgsetreq SYSREQ_DXMODE,1
hgsetreq SYSREQ_DXWIDTH,1024
hgsetreq SYSREQ_DXHEIGHT,768
hgini
;-----------------------------------------test
setuv 0,0,300,300 : addspr sp0,1
texload "b1.bmp"
regobj my,sp0
setscale my,1,1,1
i=0
*main
hgdraw : hgsync 100
gosub *patchange
addang my,0,0,0.1
goto *main
*patchange ;2Dスプライトの絵を任意に切り替えたい!
i=i+1 : m=i/128 :m=m&3
if m=0:texload "b1.bmp"
if m=1:texload "b2.bmp"
if m=2:texload "b3.bmp"
if m=3:texload "b4.bmp"
return
;----------------------------------------- 終了
*owari
end
|
|
2007/4/21(Sat) 06:39:35|NO.7618
> if m=0:texload "b1.bmp"
アニメーションさせるタイミングでのロード系命令は、お勧め出来ません・・・
後、ヘルプに
>texidが省略された場合は、次に登録されるテクスチャが参照されます。
と、あるので、テクスチャが設定されるのは addsprの次に読み込まれる一回だけです。
アニメーションさせる方法を、二つ挙げときます。
#include "hgimg3.as"
screen 0
hgini
//イベントのuvアニメを利用する方法(アニメ速度を可変させたい場合は工夫が必要)
//アニメ画像がテクスチャ1枚に収まって必要がある(自前処理より確実に高速なので大量に表示させたい時に有利)
newevent evid ;新規イベント
repeat 16
event_uv evid,0,cnt*50 ;アニメーション設定
event_wait evid,10 ;ウェイト
loop
event_jump evid,0 ;イベントの最初に戻る
setuv 0,0,80,50 : addspr sp0,1
texload dir_exe+"\\sample\\demo\\hsplogo8.bmp"
txid=stat
regobj my,sp0
setevent my,evid ;イベントセット
//アニメ枚数分モデルを作ってオブジェクトの表示モデルを切り替える方法(自由度は高い)
//アニメ画像が複数枚のテクスチャに分かれててもいい(一枚に収めた方が描画が早いかも・・・)
repeat 16
addspr spmid(cnt),1,0,50*cnt,80,50*cnt+50,txid ;16個モデル作成
loop
regobj spoid,spmid(0)
setpos spoid,-100
*main
hgdraw : hgsync 100
gosub *patchange
addang my,0,0,0.1
goto *main
*patchange
i=i+1 : m=i/5 :m=m\16 ;16コマでループ
setobjmodel spoid,spmid(m) ;表示モデル切り替え
return
|
|
2007/4/22(Sun) 05:47:04|NO.7668
KIMUさま
大変丁寧に教えていただいたのですが、どうもうまくいきません。
1つ目の方法だとうまく表示されたのですが
回転などをかける方法と、パターンを任意に切り替える方法がわからず
2つ目の方法はおそらくtexloadの入れる位置がわからないせいか
表示がうまくできません。
重ね重ねすみませんが、解決方法を教えていただけませんでしょうか?
|
|
2007/4/22(Sun) 06:01:43|NO.7669
あれから少し実験して2つ目の方は下記のようにしたらパターンで
アニメするようになりました。
しかしながら、やはり回転がうまくできないようです。
(テクスチャーは縦に8パターン並べて1枚にしています。=graphic.bmp)
repeat 8
addspr spmid(cnt),1,0,100*cnt,160,100*cnt+100,txid ;8個モデル作成
texload "graphic.bmp"
loop
regobj spoid,spmid(0)
setpos spoid,-100
*main2
hgdraw : hgsync 100
gosub *patchange2
addang my,0,0,0.1
goto *main2
*patchange2
i=i+1 : m=i/5 :m=m\8 ;8コマでループ
setobjmodel spoid,spmid(m) ;表示モデル切り替え
return
|
|
2007/4/22(Sun) 11:04:01|NO.7672
>NO.7668
>回転などをかける方法と、パターンを任意に切り替える方法がわからず
回転は普通にsetang 、addang 等で出来ますよ?(NO.7618でやってるんですが・・・)
eventを使ってで任意に切り替える方法(あくまで一例として)
repeat 8 ;アニメーション用のイベントを8種類用意
newevent evid(cnt) ;新規イベント
event_uv evid(cnt),0,cnt*100 ;各コマの左上の座標を設定
loop
//*patchange2の中で↓をやってイベント切り替え
setevent my,evid(m),0 ;イベントセット
eventを使用する利点を生かせない気がしますが・・・
(右向き用、下向き用等を一つのグループとしてevent設定すれば生かせるかな)
>NO.7669
>しかしながら、やはり回転がうまくできないようです。
regobj で作ったオブジェクIDが保存されてる変数名をよく確認して見てください
texload "graphic.bmp" ;テクスチャIDが stat に返される(一枚目は0なのでNO.7669のが問題出なかった)
txid=stat ;テクスチャIDを txid に代入
repeat 8
addspr spmid(cnt),1,0,100*cnt,160,100*cnt+100,txid ;8個モデル作成
loop
regobj my,spmid(0)
setpos my,-100
*main2
hgdraw : hgsync 100
gosub *patchange2
addang my,0,0,0.1
goto *main2
*patchange2
i=i+1 : m=i/5 :m=m\8 ;8コマでループ
setobjmodel my,spmid(m) ;表示モデル切り替え
return
後、NO.7669のテクチャ指定は少し間違いあるので
これを見て何が間違いだったか確認してください
(NO.7669のは偶々旨く行ってるだけ)
|
|
2007/4/22(Sun) 13:09:17|NO.7677
KIMUさま
本当に丁寧にありがとうございました。
説明してくださった通りstat txidの意味がわからないでいました。
正しく動くようになりました。
お付き合いくださってありがとうございました。
|
|