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


HSPTV!掲示板


未解決 解決 停止 削除要請

2006
0524
HK3Dゲームの表示9解決


HK

リンク

2006/5/24(Wed) 13:22:34|NO.848

3DのアクションRPGなどでは、キャラの体力やらレベルやらが常に画面に
リアルタイムで表示されてますよね。
あの仕組みってHSPだとどんな感じにすればできるんですか?

小さい板をカメラ視線に垂直になるように画面の端に配置して上にテクスチャフォントとか、
他の画面で2Dとして描いてから持ってきて合成、とか。



この記事に返信する


NICE

リンク

2006/5/24(Wed) 16:16:03|NO.850

どうもはじめまして
HSPのヘルプで
「fprt」
と入力してください
くわしいことはそこに書いてあります
めんどくさいことをやらなくても
英数字だけは描画することができます
HKさんが聞きたいことと違っていたらすいません



HK

リンク

2006/5/24(Wed) 16:37:36|NO.852

えー。説明不足でした。すいません。

英数字だけでなく日本語の表示もできるようにしたいのです。
fprtはもうやりました。(No848"テクスチャフォント"→fprt)
でも文字だけじゃ寂しいですよね。ポケモンのようにメーターで表示とかしたいんですが。
それをどういう要領で行えばいいのかという事を聞きたかったのです。



NICE

リンク

2006/5/24(Wed) 17:06:55|NO.853

どうも
日本語表示については
HSPを起動してツール サンプルスクプリト参照 HGIMG test4.hsp
にありますが
メーターについては
正直自分もわかりません
たぶんプレートを作って
ダメージを食らったらプレートが書き換わる
ように組むんだと思います
まともな回答ができなくてすいません



NICE

リンク

2006/5/24(Wed) 17:10:06|NO.854

すいません
訂正です
3行目の HGIMG となっているところを HGIMG3 と間違えました
すいませんでした



デシャ

リンク

2006/5/24(Wed) 17:42:39|NO.856

以前、自分がした質問の回答中
(2006/5/4(Thu) 23:30:18|NO.605)
で、
Kさん
が回答してくださった内容でうまくいきましたので
転載いたします。


#include "hgimg3.as" hgini clscolor $6060 texmake 640,480 ; フォント描画テクスチャの準備 mest = stat ; テクスチャIDを変数mestに保存 texcls mest,$004000 ; フォント描画テクスチャをクリア font "MS ゴシック",22,1 ; フォントの選択 repeat hgdraw color 255,255,255 ; 描画色を設定 gmode 4,640,480,200 texcls mest,0 texmes "cnt"+str(cnt),mest,(20*(cnt/64))\600,20*(cnt\24) pos 640/2,480/2 hgrotate mest,0,0,0 hgsync 15 loop



K

リンク

2006/5/26(Fri) 04:57:53|NO.871

3Dより手前に表示されるもの
addspr
hgrect
hgline
hgrotate

背景>3Dモデル>2Dスプライト>直接描画
右側が手前に表示される


2Dスプライトと直接描画を使ったサンプル


#include "hgimg3.as" hgini clscolor $4040 setsizef 5,5:setuv 0,0,127,127:addbox boxid:regobj boxoid,boxid:texload dir_exe+"\\sample\\hgimg3\\btex.bmp" //ntsx,y名前用テクスチャサイズ ntsx=128:ntsy=24:texmake ntsx,ntsy: nammest = stat ; 名前用テクスチャIDを変数nammestに保存 texcls nammest,$000000 texmake 640,480 ; フォント描画テクスチャの準備 mest = stat ; テクスチャIDを変数mestに保存 texcls mest,$000000 ; フォント描画テクスチャをクリア font "MS ゴシック",18,1 ; フォントの選択 //txsx,y枠テクスチャ用バッファサイズ:psx,y枠(2Dスプライト)サイズ:spx,y枠プライト座標:nx,y名前位置:msizx,yメーターサイズ(偶数限定) txsx=(2<<7):txsy=(2<<6):psx=229:psy=75:spx=00:spy=100:nx=10:ny=5:msizx=200:msizy=20 //ofx,y外枠線位置:mx,yメーター位置:gsx,yゲージ枠サイズ:mh2個目のメーター縦位置 ofx=0:ofy=28:mx=ofx+25:my=ofy+2:gsx=1+msizx:gsy=1+msizy:mh=1+gsy //fpx,yスプライトの中心を直接描画の基準位置に:mpx,yメーター左上:npx,y名前左上 fpx=(320+spx):fpy=(240+spy):mpx=fpx-(psx-msizx)/2+mx:mpy=fpy-(psy-msizy)/2+my:npx=fpx-(psx-ntsx)/2+32:npy=fpy-(psy-ntsy)/2 gosub *tex ;枠テクスチャを作るテクスチャID=texno(画像ファイルがないので・・・) gsel 0 addspr spmd,1,0,0,psx+((psx\2)=0),psy+((psy\2)=0),texno ;枠テクスチャを2Dスプライトモデルに(サイズは偶数限定) regobj spobj,spmd ;2Dスプライトモデルをオブジェクトに setpos spobj,spx,spy,0.0 setefx spobj,220,220,220 ;半透明 color 01,01,01:texmes "浦島 太郎",nammest,2,2:color 240,240,240:texmes "浦島 太郎",nammest,0,0 ;名前をnammestに maxhp=300.0:sethp=0.0:maxmp=50:setmp=0.0 repeat addang boxoid,0.01,0.005,0.01:addpos boxoid,0,0,0.1*((cnt\1000)<500)-0.1*((cnt\1000)>=500) hgdraw sethp=limitf(mousex/2,0,maxhp):hp=msizx-limit((sethp/maxhp)*msizx,0,msizx) gmode 5,,,255:color limit(50+hp,0,255),limit(100-hp/2,0,255),limit(255-hp,0,255) hgrect mpx-hp/2,mpy,0,msizx-hp,msizy ;メーター描画 if (msizx-hp)\2 {hgline mpx-msizx/2,mpy-msizy/2,mpx-msizx/2,mpy-msizy/2+msizy-1};hgrectが2ドットづつしか範囲を広げられないので奇数ラインを追加 setmp=limitf(mousey/8,0,maxmp):mp=msizx-limit((setmp/maxmp)*msizx,0,msizx) gmode 5,,,255:color 30,180,30 hgrect mpx-mp/2,mpy+mh,0,msizx-mp,msizy if (gsizx-mp)\2 {hgline mpx-msizx/2,mpy-msizy/2+mh,mpx-msizx/2,mpy-msizy/2+mh+msizy-2} texcls mest,$000000 color 255,255,255 texmes "現在/最高:表示幅",mest,10,10 texmes "HP"+str(int(sethp))+"/"+str(int(maxhp))+":"+str(msizx-hp),mest,10,30 texmes "MP"+str(int(setmp))+"/"+str(int(maxmp))+":"+str(msizx-mp),mest,10,50 gmode 4,ntsx,ntsy,250:pos npx+nx,npy+ny:hgrotate nammest,0,0,0 ;名前表示 gmode 2,640,480,255:pos 640/2,480/2:hgrotate mest,0,0,0 ;データ表示 hgsync 10 loop //ここは本題と、あまり関係ない *tex buffer 9,,,0 picload dir_exe+"\\sample\\hgimg3\\testchr.bmp" gmode 4,32,32,200:pos 0,0:gzoom 30,30,9,64,64,64,64,1 buffer 10,txsx,txsy,0:color 0,0,0:boxf 0,0,txsx,txsy cntt=psy-ofy:cl=128.8 repeat cntt color limit(cl-(cl/cntt)*cnt,0,cl),limit(cl-(cl/cntt)*cnt,0,cl),200.0-(cl/cntt)*cnt line -1,cnt+ofy,psx,cnt+ofy loop color 200,200,200 dim gdat,4,3:gdat(0,0)=ofx,ofy,psx,psy: gdat(0,1)=mx,my,mx+gsx,my+gsy:gdat(0,2)=mx,my+mh,mx+gsx,my+gsy+mh repeat 3 for a,0,4 line gdat((a/2)*2,cnt),gdat(1+(a\2)*2,cnt),gdat(2-(a\2)*2,cnt),gdat(1+(a/2)*2,cnt) ;枠線 next loop pos gdat(0,1)-20,gdat(1,1)+2:mes "HP":pos gdat(0,2)-20,gdat(1,2)+2:mes "MP" gmode 2,32,32,200:color 0,0,0:pos -1,-1:gcopy 9,0,0,30,30 settex txsx,txsy,0,-1 ;バッファをテクスチャに texno=stat if texno<0:end return

マウスでメーターが動く



HK

リンク

2006/5/26(Fri) 17:40:46|NO.877

Kさん、NICEさん、ありがとうございます。
日本語表示の方はNICEさんに教えて頂いたtest4のサンプル見ながらやっていきます。
メーターの方はKさんのスクリプトを参考にしてhgrotateなどを使っていこうと思います。

カメラの角度に応じて回転するコンパスも作るつもりですー。



K

リンク

2006/5/26(Fri) 23:34:27|NO.881

解決したみたいですが一応・・・

NO.871のサンプルは3.0a用です
3.1β3で実行する場合は

>setefx spobj,220,220,220 ;半透明(これ使い方間違ってた本当はsetefx spobj,220,0,0)
の次ぐらいに

setobjmode spobj,OBJ_LATE,0 ;通常のオブジェより上に表示させるのはこれしかなくなってる
を挿入

*tex内の
>buffer 10,txsx,txsy,0
から
>settex txsx,txsy,0,-1 ;バッファをテクスチャに
までの間に

gsel 10
を追加

>背景>3Dモデル>2Dスプライト>直接描画
>右側が手前に表示される
勘違いしてました(2Dのz値が3Dとの優先度にも関係あると思わなかった)

β3だと、これが無効になっててOBJ_LATEを使うしかないみたい
3DOBJ_LATEより2DOBJ_LATEのがIDに関係なく下に描画されるから
両方で半透明を使うのは、難しくなったかも

OBJ_NOSORTが有効になってるのかと、思ったら
OBJ_NOSORTはhgimg3.as内で定義されてなかった・・・
(OBJ_2Dも使えないような・・・)

>NO.877
>カメラの角度に応じて回転するコンパスも作るつもりですー。
オブジェクトのモードをOBJ_LATEにすれば3Dコンパスも簡単だと思うけど
3.0aの場合使えない・・・

後、ちょっと追加
NO.871のは後からオブジェを追加すると、半透明が意味無くなる
それの一応の対策(3.1β3の場合意味無い)

スプライトの所を書き換え

OBJ3DUP=10 ;3Dオブジェより上に表示する数 setcolor 0,0,0 addplate dummyid,0,0,0 ;ダミーモデル regobj tmp0id,dmiyid,OBJ_HIDE ;tmp0idのIDからtmpmaxidを一次的に登録 hggetreq MAXOBJ,SYSREQ_MAXOBJ MAX3DID=MAXOBJ-OBJ3DUP-1 ;IDは0からだから最大数より-1 repeat MAX3DID-tmp0id regobj tmpmaxid,dummyid,OBJ_HIDE loop addspr spmd,1,0,0,psx+((psx\2)=0),psy+((psy\2)=0),texno ;枠テクスチャを2Dスプライトモデルに(サイズは偶数限定) regobj spobj,spmd ;2Dスプライトモデルをオブジェクトに setpos spobj,spx,spy,0 setefx spobj,220,0,0 ;半透明 repeat 1+tmpmaxid-tmp0id,tmp0id ;一次的に登録したオブジェを削除 delobj cnt loop

必要な分を最初に非表示でobjID確保しといて、setobjmodel で
モデルを変えるしかないかな



soma

リンク

2006/11/16(Thu) 14:28:34|NO.3503

Hello, my name is soma



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