|
|
2007/9/9(Sun) 16:16:10|NO.10995
HGIMGで2Dスプライトの左右反転表示を行いたいのですが、
scaleグループを(-1, 1, 1)に設定しても、上手くいきません。
どうやって左右反転すればいいのでしょうか。
あとposグループのz値についてですが、
2Dスプライトにおいての描画優先度が機能してないように思います。
これについてもどうなんでしょうか。
HSP3.1及びHGIMG ver3.1FIX1を使用しています。
|
|
2007/9/10(Mon) 17:33:18|NO.11014
・・・反転した画像使えばいいんじゃね?
|
|
2007/9/11(Tue) 09:00:52|NO.11016
画像を増やすと容量が増えるので、
内部の処理で出来ることは内部でやりたいんです。
|
|
2007/9/11(Tue) 13:02:29|NO.11017
つーか、出来んとはっきり言った方が早かったかも知れんな。
|
|
2007/9/11(Tue) 17:23:44|NO.11018
Dripです。
サインさん、こんにちは。
>HGIMGで2Dスプライトの左右反転表示を行いたい
fさんの出来ないという指摘は誤りです。
スプライトの反転表示をスクリプト側で処理することは可能です。
以下にスプライトの反転表示を行うサンプルを示します。
#include "hgimg3.as"
hgini
texload dir_exe+"\\sample\\hgimg3\\testchr.bmp":t=stat
addspr s(0),0,64,64,127,127,t
addspr s(1),0,127,64,64,127,t
regobj a,s(0):setpos a,-40,0,0
regobj b,s(1):setpos b,40,0,0:setscale b,-1,1,1
repeat
hgdraw
hgsync 16
loop
>2Dスプライトにおいての描画優先度が機能してないように思います。
スプライトのZ軸に関しては、スプライトは基本的に2Dでの処理なので、
Zソートは行われません。もしもZソートを有効にしたい場合は、
スプライトではなく、3Dのプレートを使用するようにしてください。
>画像を増やすと容量が増えるので、
>内部の処理で出来ることは内部でやりたいんです。
ところでこれは私の憶測ですが、
スプライトでこんなことがしたかったのでしょうか。
#include "hgimg3.as"
hgini
texload dir_exe+"\\sample\\hgimg3\\testchr.bmp":t=stat
addspr s(0),0,64,64,127,127,t
addspr s(1),0,127,64,64,127,t
regobj a,s(0):regobj b,s(1)
repeat
hgdraw
setscale a,sin(double(cnt)/10),1,1
setscale b,sin(double(cnt)/10),1,1
hgsync 16
loop
このような回転エフェクトをかけたい場合、左右反転画像を一々用意するのは
後々テクスチャを修正したときに反転画像側の修正を忘れるなど、バグ出現の確立が高まりますね。
反転画像を使用するデータが大量にある場合等は尚のことです。
このような明確な理由があれば“それを解決するためのアドバイス”がもらえると思います。
もしも本当に、単にデータ容量を気にしているだけであれば、前者の指摘のように、
反転した画像を用意した方が楽ですし、安全です。
余談でした。参考までにがんばってください。
| |
|
2007/9/11(Tue) 17:32:49|NO.11019
ほうほう。
addspr s(1),0,127,64,64,127,t
こんな指定ができるのか。これは知らなかった。
大変失礼致しました。
|
|
2007/9/11(Tue) 22:58:45|NO.11027
っていうことは
Ta(x2-x1)かな?
それともオブジェクトに直接アフィン変換を施すんじゃなくて
スプライトに演算した後、オブジェクトにベクトルを代入してるのかな?
ともかく(i,i)成分の中身を把握し損ねてたんですね。
ありがとうございます。
>Zソートは行われません。
docsフォルダのテキストファイルによると
>2Dオブジェクトの場合は、(X,Y)が座標に使用され、Zは優先度(0.0〜1.0)として扱われます。
とあるんですが、どうも働いていなくて。
#include "hgimg3.as"
hgini
texload dir_exe+"\\sample\\hgimg3\\testchr.bmp":t=stat
addspr a,0,128,64,191,127,t
texload dir_exe+"\\sample\\hgimg3\\testchr.bmp":t=stat
addspr b,0,192,64,255,127,t
regobj a1,a:regobj b1,b
setpos a1,16,32,0:setpos b1,-16,32,1
regobj a2,a:regobj b2,b
setpos a2,16,-32,1:setpos b2,-16,-32,0
repeat
hgdraw
hgsync 16
loop
こうすると上下で重なり方が逆にならないとおかしいはずなんです。
描画順はある程度操作したいんで、
hspdxに乗り換えようかなと考えてるんですが、
アクション性の高いゲームだと
hspdxとhgimgではどちらが最適なんでしょうか?
|
|
2007/9/12(Wed) 00:02:13|NO.11029
Dripです。
>>2Dオブジェクトの場合は、(X,Y)が座標に使用され、Zは優先度(0.0〜1.0)として扱われます。
>とあるんですが、どうも働いていなくて。
確かに書いてありますね。これは気付きませんでした。
バグか仕様なのかわからないのでこれはおにたまさんに直接伺うのが良さそうですね。
ちなみに、一応「ある程度」であれば、OBJ_LATEの最優先描画オプションを設定する事で
描画順の制御は可能です。
以下のように、手前に表示させたいオブジェクトにOBJ_LATEオプションを付加してみてください。
#include "hgimg3.as"
hgini
texload dir_exe+"\\sample\\hgimg3\\testchr.bmp":t=stat
addspr a,0,128,64,191,127,t
texload dir_exe+"\\sample\\hgimg3\\testchr.bmp":t=stat
addspr b,0,192,64,255,127,t
regobj a1,a,OBJ_LATE:regobj b1,b
setpos a1,16,32,0:setpos b1,-16,32,1
regobj a2,a,OBJ_LATE:regobj b2,b
setpos a2,16,-32,1:setpos b2,-16,-32,0
repeat
hgdraw
hgsync 16
loop
ただ、これは半透明オブジェクトに向けたオプションの特性を利用しているに過ぎず、
これを使用した場合、半透明オブジェクトの描画優先指定が効かなくなります。
また、スプライトのZソートが行われない事がバグであった場合、問題が修正された時、
OBJ_LATEで最優先指定したはずの表示のされ方が変化する恐れが出てきます。
どうしてもhgimg3で本格的に2Dスプライトを扱いたいのであれば、
一度優先度の指定方法について、おにたまさんに意見を伺った方が良いと思います。
hspdxに乗り換えるかどうかですが、これは考えどころですね。
hgimg3よりは2Dの処理に長けていますが、スプライトの扱い方にかなり
癖があるため、慣れるまで少し時間を要するかもしれません。
「標準命令ではどうしても重くて作れず、DirectXを使用して完全2Dのゲームを作りたい」
ということであれば、hspdxを使う余地は充分にあると思います。
また、hspdxの修正版のhspdxfixもこちらのサイト( http://www.hspdx.net/)で
随時リリースされているようなので、合わせて検討してみてください。
| |
|
2007/9/12(Wed) 13:23:26|NO.11038
Z値の描画優先度について報告しておきました。
hgimgは本家のプラグインだからと使っていたのですが
hspdxの方が2D処理は強いのですか。
ありがとうございます。
テキストファイルを読みながら検討してみます。
色々と相談に乗っていただきありがとうございました。
|
|