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


HSPTV!掲示板


未解決 解決 停止 削除要請

2007
0909
サインHGIMG3で2Dの反転及び描画優先度について8解決


サイン

リンク

2007/9/9(Sun) 16:16:10|NO.10995

HGIMGで2Dスプライトの左右反転表示を行いたいのですが、
scaleグループを(-1, 1, 1)に設定しても、上手くいきません。

どうやって左右反転すればいいのでしょうか。

あとposグループのz値についてですが、
2Dスプライトにおいての描画優先度が機能してないように思います。
これについてもどうなんでしょうか。

HSP3.1及びHGIMG ver3.1FIX1を使用しています。



この記事に返信する


f

リンク

2007/9/10(Mon) 17:33:18|NO.11014

・・・反転した画像使えばいいんじゃね?



サイン

リンク

2007/9/11(Tue) 09:00:52|NO.11016

画像を増やすと容量が増えるので、
内部の処理で出来ることは内部でやりたいんです。



f

リンク

2007/9/11(Tue) 13:02:29|NO.11017

つーか、出来んとはっきり言った方が早かったかも知れんな。



Drip

リンク

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
 このような回転エフェクトをかけたい場合、左右反転画像を一々用意するのは
後々テクスチャを修正したときに反転画像側の修正を忘れるなど、バグ出現の確立が高まりますね。
反転画像を使用するデータが大量にある場合等は尚のことです。
このような明確な理由があれば“それを解決するためのアドバイス”がもらえると思います。

 もしも本当に、単にデータ容量を気にしているだけであれば、前者の指摘のように、
反転した画像を用意した方が楽ですし、安全です。
余談でした。参考までにがんばってください。



f

リンク

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ではどちらが最適なんでしょうか?



Drip

リンク

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処理は強いのですか。
ありがとうございます。
テキストファイルを読みながら検討してみます。

色々と相談に乗っていただきありがとうございました。



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