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


HSPTV!掲示板


未解決 解決 停止 削除要請

2007
0421
丸子hgimg3の2Dスプライトの絵のパターンの切り替え5解決


丸子

リンク

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



この記事に返信する


KIMU

リンク

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



KIMU

リンク

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の意味がわからないでいました。
正しく動くようになりました。
お付き合いくださってありがとうございました。



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