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


HSPTV!掲示板


未解決 解決 停止 削除要請

2007
1213
MAC弾の消滅5解決


MAC

リンク

2007/12/13(Thu) 16:50:43|NO.12788

始めまして、私はHGIMG3で3Dシューティングを製作している者です。
弾を発射するところまでは上手くいったのですが、IFを使って、
例えば弾のx座標が○を超えた時、弾のオブジェクトを消滅させ
るようなスクリプトを組んでみたのですが、その座標を超えたと
思われた瞬間、エラーが発生してしまいました。壁との当たり判定
は実装させたいので、どうにかしたいのですが、上手い方法が見つ
かりません。もし下のスクリプトで何かおかしい所があれば、教えてください。
どうかお願いします。

#include "hgimg3.as"

pi=atan(1,0)*2 ;π
fullscr=1 ; スルスクリーンか? (1=yes/0=no)
_dispx=640:_dispy=480 ; 画面サイズ
;
randomize
if fullscr=0 {
screen 0,_dispx,_dispy,0
} else {
bgscr 0,_dispx,_dispy,0
hgsetreq SYSREQ_DXMODE,1 ; フルスクリーンモードを指定
hgsetreq SYSREQ_DXWIDTH,_dispx ; フルスクリーン解像度X
hgsetreq SYSREQ_DXHEIGHT,_dispy ; フルスクリーン解像度Y
}
cls 4
hgini
setfont 16,16,12,1
texload dir_exe+"\\sample\\hgimg3\\fontchr.bmp"
setuv 0,0,122,127
addxfile xobj,"juu.x"
modelorder xobj,0
modelshade xobj,0
addxfile m_xmodel,"tikaro.x" ; モデルを読み込む
getpos HGOBJ_CAMERA,cpx,cpy,cpz
regobj obj, m_xmodel
clscolor $4040
addpos HGOBJ_CAMERA,5,-1.1,-50

setuv 0,0,256,256
addspr pchr,1 ; プレイヤーキャラ
regobj mychr,pchr
texload "asd.bmp" ; テクスチャの登録

setpos mychr, 196,120

mouse 280, 200

*main
hgdraw
stick key,$3ff
getkey p1,87
getkey p2,83
getkey p3,65
getkey p4,68
getkey p5,1
if key&128 {end}
addcy=double(280-mousex)*0.002
addcx=double(200-mousey)*0.002

getang HGOBJ_CAMERA,cx,cy,cz
selang juu:objgetfv jan
if cx>=1.2 {
setang HGOBJ_CAMERA,1.19,cy,cz;現在のカメラアングルにマウスによる回転量を加算
}else{
addang HGOBJ_CAMERA,addcx,addcy,addcz
}
if cx<=-1.2 {
setang HGOBJ_CAMERA,-1.19,cy,cz;現在のカメラアングルにマウスによる回転量を加算
}else{
addang HGOBJ_CAMERA,addcx,addcy,addcz
}

mouse 280,200


si=sin(cy)
co=cos(cy)
si1=si*0.2
co1=co*0.2

if p1=1 : addpos HGOBJ_CAMERA,-si1,0,-co1
if p2=1 : addpos HGOBJ_CAMERA,si1,0,co1
cy2=cy+1.57
si=sin(cy2)
co=cos(cy2)
si1=si*0.2
co1=co*0.2
if p3=1 {addpos HGOBJ_CAMERA,-si1,0,-co1}
if p4=1 {addpos HGOBJ_CAMERA,si1,0,co1}




t=t-(t>0)
if (p5=1)&(t=0){  //マウスが左クリックされたら発砲
t=6
regobj tama,xobj,OBJ_MOVE
getang HGOBJ_CAMERA,cx,cy,cz
getpos HGOBJ_CAMERA,cpx,cpy,cpz
setpos tama,cpx,cpy,cpz
setang tama,cx,cy,cz
sincx =sin(cx)
ccx = cos(cx)
sincx2=sincx*(-1)
ccy= cos(cy)
ccy2=ccy*(-1)*ccx
scy= sin(cy)
scy2=scy*(-1)*ccx
seldir tama:objset3 scy2*2,sincx2*2,ccy2*2

addang HGOBJ_CAMERA,0.015,0.01*(1-rnd(3)),0

}

    getpos tama,tpx,tpy,tpz  //弾の座標を所得
if tpx>20:delobj tama //弾のx座標が20以上になったら、弾を消滅させる

hgsync 10
goto *main



この記事に返信する


D.K

リンク

2007/12/13(Thu) 20:37:39|NO.12789

自分以外にも指摘する人がいそうですがとりあえず。
まず、このままでは実行して確かめることも出来ません。
ファイルを上げるなりなんなりしてください。
また、エラー行の位置、エラーメッセージがあるとなおいいです。
あと、スクリプトはpreタグで囲むとみやすくなります。

ところでスクリプトの中に全角スペースがあるのですが
これは単に掲示板記入時のミスでしょうか。
もしこれがエラーの原因でしたら
ツール>オプション>エディタ>表示
で全角スペースは可視化出来ますので活用されることをお勧めします。



MAC

リンク

2007/12/13(Thu) 21:36:43|NO.12790

最低限必要なものをまとめたファイルをこちらにUPしました。パスワードは「fpstest」です。
エラー行の位置は101行目で、内容は「パラメータの値が異常です」というものでした。
h ttp://www.dotup.org/uploda/www.dotup.org12075.zip.html



D.K

リンク

2007/12/15(Sat) 13:13:10|NO.12808

IDtamaをdelobjで消去した後にgetposでtamaのパラメータ取得を行っているためです。
101、102行目を

objexist tama;tamaが有効かどうかを確認 if stat=0{;有効ならば判定を行う getpos tama,tpx,tpy,tpz if tpx>20:delobj tama }
で置き換えると動作します。



MAC

リンク

2007/12/15(Sat) 16:15:59|NO.12810

試してみたところ、弾を消滅させることが出来ました。本当にありがとうございます。



MAC

リンク

2007/12/16(Sun) 18:37:25|NO.12820

解決にチェックを入れておきながらもう一つ質問をするのは本当に申し訳ないのですが、
複数の弾丸を表示したときには、最期に表示された弾丸のみが消されてしまい、消えた弾丸よりも前に放たれた他の弾丸はそのまま通過してしまいます。
それぞれの弾丸全てに当たり判定を実装するにはどうすればよいのでしょうか?



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