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


HSPTV!掲示板


未解決 解決 停止 削除要請

2017
0416
ZAP【hgimg3】登録したオブジェクトをまとめて初期化したい5解決


ZAP

リンク

2017/4/16(Sun) 02:10:23|NO.79119

HGIMG3で、regobjで登録したオブジェクトをすべて初期化したい場合、
(モデルやテクスチャはそのままで、オブジェクトのみ)
regobj時にオブジェクト番号を記録しておいて、
delobjで一個一個削除していく以外に効率的な方法はありますか?

引数なしのdelobjで一発で初期化できるかと思いきや、画面が真っ黒になってしまいます。



この記事に返信する


ZAP

リンク

2017/4/16(Sun) 18:06:21|NO.79125

機械的にオブジェクトを全部消すと、カメラオブジェクトやライトオブジェクトも消えてしまうようですね。
そこで考えてみたのですが、


;オブジェクト初期化 #const OBJMAX 1024 ;3dオブジェクト最大数 hgsetreq SYSREQ_MAXOBJ,OBJMAX ;オブジェクト最大数設定 repeat OBJMAX objexist cnt if stat==0 :delobj cnt loop

上記のように「ループでオブジェクトを調べていき、登録されていたら削除する」
という流れまではできたのですが、
「そのオブジェクトがカメラオブジェクトまたはライトオブジェクトであれば消さない」
という処理をどう組み込んだらいいのかが分からないのです。



Makoto

リンク

2017/4/16(Sun) 22:01:03|NO.79130

基準のカメラとライトについては、
特別なことをしなければ、それぞれ ID 0 と 1 に割り当てられます。

#include "hgimg3.as" hgini addbox box,1,1 regobj objid,box mes HGOBJ_CAMERA mes HGOBJ_LIGHT mes objid
ですから、その2つを除けばその他のオブジェクトについては処理できると思います。
(追加のライトについては分かりません…すみません)

余談ですが、HGIMG3 を使っていて、急に画面が表示されなくなったなんて時は、
たいてい間違ってカメラオブジェクトを削除してしまっている事が多いんですよね。
削除する変数の名前を間違ったりして。



ZAP

リンク

2017/4/17(Mon) 00:41:29|NO.79131

つまりはこういうことですね。


repeat OBJMAX if (cnt==HGOBJ_CAMERA) or (cnt==HGOBJ_LIGHT) :continue objexist cnt :if stat==0 :delobj cnt loop

ハナから0と1を除外してID2から調べるというやり方もありかと思いますが、
正確を期するならこっちかなと。



Makoto

リンク

2017/4/17(Mon) 19:39:33|NO.79133

"hgimg3.as" を見てみると、
HGOBJ_CAMERA と HGOBJ_LIGHT は、それぞれ 0 と 1 の定数として定義されているので、
2 から調べても問題ないと思いますよ。

万が一、HGOBJ_CAMERA や HGOBJ_LIGHT の ID が変えられていた場合に
対処しなければならない必要があるのなら考えなければならないですが、
そういう方法があるのかどうか。
もしできたとしても、特にメリットはなさそうな気もしますが。



ZAP

リンク

2017/4/17(Mon) 21:55:13|NO.79135

>Makotoさん

ありがとうございます。

今マニュアルを読み返してみました。
HGOBJ_CAMERA と HGOBJ_LIGHTが定数として定義されている記載はあったのですが、
それぞれ0と1がデフォルトで割り当てられているとは書かれていないみたいですね。

今更ではありますが、できればマニュアルに書いておいてほしかったですね・・・



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