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


HSPTV!掲示板


未解決 解決 停止 削除要請

2008
0929
かってぃんぐE3Dでのスプライト表示4解決


かってぃんぐ

リンク

2008/9/29(Mon) 15:26:13|NO.19863

 E3DRenderSpriteでHUD表示などを行いたいのですが、E3DCreateSpriteFromBMSCRで
バッファに読み込んだ画像を出力しています。しかしこれではメインループ前に一度だけ
しか読み込めないのでリアルタイムで動くメーターや一文字ずつ表示する(これは一応
ほかの方法もありますけど)文字列などを表現できません。何か良い方法はないのでしょうか?

毎度申し訳ありません。



この記事に返信する


レヴィン

リンク

2008/9/29(Mon) 16:59:15|NO.19868

>>動くメーター
これって格闘ゲームの北斗の体力ゲージとかギルティのテンションゲージのことですか?
(要はゲージの長さは同じでもスクロールしてやつってこと?)

あれは最大値の2倍の長さの絵を用意して
コピー位置をずらしながらループしているだけです。
(コピー位置が最大値の時の長さと同じ位置に来たら最初に戻すだけ)

↓ゲージ画像
---------------------------------------------
|           |        |
---------------------------------------------
|← 最大値の長さ  →|
   |←コピー開始位置
|←ゲージの量→|
    |←その次のコピー開始位置
     |←さらにその次のコピー開始位置
      ・
      ・
      ・
           |←ここに来たら最初に戻す

流れる方向はコピーする位置のずらし方をきちんと調節すればどうとでもなります。
反転表示を使うのもありでしょう。
他に方法はあるのかもしれんが、俺は知りません。

あと1文字ずつ文字を表示する方法ですが、
出力用の文字列を入れる変数を用意し、1フレームごとに文字を追加していく。
出力はE3DDrawTextで。

てかE3DDrawTextByFontIDWithCnt やE3DDrawTextByFontIDWithCnt2があるのに
使わないのは敢えて?


Easy3Dは最初にマニュアル読んだ段階で投げた(hgimgやZGPの方が2D関連が
充実していると思ったから)ので表示や画像のロードに関しては詳しいことは
わかりませんが、マニュアルを見る限りゲージスクロールの方法は使えそうもありません。

gcopyやhgrotateのように表示する範囲を毎フレーム指令できる命令がないと
無理です。

ちなみに、C++&Direct3Dでガチ書きの場合、スプライトの表示する範囲は
テクスチャの一部のみを指定するも可能なので、
「スプライトの表示範囲=テクスチャ全体」なってしまうのはEasy3Dの仕様のようです。

hgrotateのような仕様の命令を探すか、なければ追加されるのを待つか、おちゃっこさんに
お願いするか、あきらめるか、別の方法を考えるか、プラグインを変えてでもやるか、
それはかってぃんぐさんの判断です。



sei

リンク

2008/9/29(Mon) 20:08:45|NO.19873

たとえば自動車のメーターのようなものなら
回転させたり、HPゲージのようなものなら拡大縮小
させてから使ったりします。
Easy3Dスプライトで言えば

E3DSetSpriteRotation
E3DRenderSprite
などです

その他にbillboardやsig/mqoでも
似たようなことができます。



おちゃっこ

リンク

2008/10/2(Thu) 18:49:42|NO.19928

スプライトにUVを指定できるようにしてリリースしました。
これにより画像の一部分だけを表示することが可能です。
あとはseiさんの書き込みの通り回転や拡大縮小をうまく使ってみてください。



かってぃんぐ

リンク

2008/10/3(Fri) 16:19:37|NO.19941

なるほど、やはりboxfなどでバッファ画面に書き込んでリアルタイムで
表示するのは不可能でしたか。しかしスプライトで出来るのであれば
問題ないです。何でこんな簡単な事気づかなかったのでしょうか^^;

毎回すみません^^
今回も助かりました。



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