|
|
2006/4/30(Sun) 19:08:20|NO.545
・・・
まず、自分なりにやった結果を出し
本当は、こうしたいんだけど、実際はこうなるってのを示して
何処がダメなのかを聞くべきです。(手がかりすら分からない訳じゃないんだから・・・)
1、2Dでやったスクリプトを見せる
2、それを3Dにしようとしていたスクリプトを見せる
3、1,2、の動きの仕様を書く(障害物に当たると止まるだけとか)
4、1,2、の実際の動きを書く(通りすぎたりするとか)
スクリプトは、なるべく必要ない物をそぎ落として
それだけでも動かせる方が答える方は楽が出来る。
どこで、何をしてるかもちゃんと書く
答える方は、分かりやすいように答えようと努力するんですから
貴方も、回答者に自分の状況を分かるように説明する努力をしてください
|
|
2006/4/30(Sun) 19:23:57|NO.546
Dripです。
のほほんズさん、こんにちは。
当たり判定が2Dで成功しているのであれば、3Dでもエラーせずに正しく動作します。
理由は、実数がサポートされたHSP3であれば、2Dも3Dも判定の仕方は一字一句変わらないからです。
(正しく当たり判定がされなくても、エラーは発生しないはずです。)
恐らくエラーする原因は、当たり判定ではなく物体の配置や、自分のプログラム用に新たに
書き加えた部分等で何らかのエラーが発生しているものと考えられます。
のほほんズさんが書いた3Dの当たり判定を行うスクリプトをお見せ頂ければ、
何かアドバイスができるかもしれません。
|
|
2006/4/30(Sun) 19:37:39|NO.547
文法が間違ってるってことは命令の誤入力か、無くなった命令を入力していないか
関数と命令を間違えてないか、拡張プラグインのファイルはインクルードできているか。
ってとこかな。
どういう仕組みで衝突判定を行っているかが書いてあるともっと確実に答えられるかも。
|
|
2006/5/2(Tue) 16:46:42|NO.560
皆さん回答ありがとうございます
文法が間違っていますエラーは出なくなったのですが
今度は障害物をすり抜けてしまいます
実は障害物に円柱みたいなのを使っているので
getcoliでがんばろうと思っています
前回2Dのスクプリトを公開してくれた
Dripさん風にやってみたのですがだめです
そのダメスクプリトが下のスクプリトです(3D)
if RET!-1 {
getang RBOBJ,x,y,z
x=-x
y=-y
z=-z
}
RBOBJというのは
タンク本体のオブジェクトIDです
スクプリトがたぶん
根本的にちがうかもしれませんが
よろしくお願いします
|
|
2006/5/2(Tue) 16:49:19|NO.561
すいません
if RET!-1 {
の上に
getcoli RET,RBOBJ,1.0f
を投稿するのを忘れました
|
|
2006/5/2(Tue) 17:09:52|NO.565
あと一応作ったスクリーンセーバーのスクプリトを公開します
長くなるから
本当はこういうのやめたほうがいいのかな
#packopt type 2
unknown=dir_cmdline
saver=strmid(unknown,1,1)
if (saver="P")or(saver="p"):goto *sspre
if (saver="S")or(saver="s"):goto *ssfull
if (saver="C")or(saver="c"):goto *sscfg
screen 0,300,200,0
title "のほほんズスクリーンセーバー"
pos 10,10
mes "Unknown switch"+dir_cmdline+""
pos 220,160
objsize 70,30
button "OK",*ssend
stop
*sscfg
screen 0,300,200,0
title "のほほんズスクリーンセーバー"
pos 10,10
mes "のほほんズのスクリーンセーバーです。"
mes "OKボタンをおして閉じてください。"
pos 220,160
objsize 70,30
button "OK",*ssend
stop
*sspre
x=ginfo_winx:y=ginfo_winy
goto *ssmain
*ssfull
chgdisp 1,1360,768
if stat=1:goto *ssend
if stat=2:goto *ssend
x=ginfo_dispx:y=ginfo_dispy
bgscr 1,x,y,0
*ssmain
color 255,255,255:boxf
font "MSゴシック",100,1
ms="のほほんズ"
ax=160:ay=160:px=4:py=4
repeat
redraw 0
hsvcolor cnt/2,255,255
gmode 0,200,200
grect ax,ay,double(cnt)*0.07
pos 450,340:color 0,0,0:mes ms
pos 455,345:color 255,255,255:mes ms
await 15
redraw 1
ax+=px:if (ax=0)or(ax=x):px=-px
ay+=py:if (ay=0)or(ay=y):py=-py
loop
*ssloop
await 2
goto *ssloop
*ssend
end
これはサンプルにあったやつをスクリーンセーバーにしたものです
ご回答よろしくお願いします
連続で投稿して申し訳ございません
| |
|
2006/5/2(Tue) 19:08:18|NO.574
>2Dはほとんどマスターしたのですが
全然マスターしたようには見えないのですが・・・
なぜ、自動で動くキャラじゃなくてキーで動かせるキャラと固定のキャラを表示させて
試さないんでしょうか・・
障害物に対する動きは、全て自分で組むしかありません
障害物制作の命令が、あるわけでも無いので、教えてくれと言われても
のほほんズさんの考える障害物とは何なのか不明で
接触した後の動きも不明です。
なんで、接触後にどう動かしたいかを書かないんですか?
接触後の動作によってはgetcoliで判定した後に自分で改めて判定処理をする
必要も出てきます。
ただ、動きを停止させたいだけなら
getpos RBOBJ,oldx,oldy,oldz ;キーによる移動処理前の座標を保存
;-----------------------------------------------------------
getcoli RET,RBOBJ,1.0f
if RET!-1 {
setpos RBOBJ,oldx,oldy,oldz ;接触したので接触前の座標に戻す
}
この方法には色々問題もあります。
その問題の原因を探し出せれば解決も出来ると思います。
後、getcoliは正方形で回転を考慮しない判定のようです。
(回転を考慮しない判定だから上の方法が出来るんだけど・・・)
|
|
2006/5/2(Tue) 21:21:23|NO.575
Dripです。
・・・ちょっと気になったのですが、のほほんズさんは当たり判定の質問をされていらっしゃるのですよね?
当たり判定の実験のはずが、提示されたスクリプトには全く障害物が存在していないのでちょっと謎です。
3Dの当たり判定は試みていないのでしょうか。
ひょっとしたら障害物の意味が間違って伝わっているのかも・・
のほほんズさんは2Dは殆どマスターしたとのことですので、もうサンプル改造の
必要性は無いように思えます。うまく動作しないという当たり判定のスクリプトを書いて
質問すれば、適切な回答を受け取れる可能性が高まると思います。
がんばってください。
|
|
2006/5/2(Tue) 21:51:46|NO.577
>当たり判定の実験のはずが、提示されたスクリプトには全く障害物が存在していないのでちょっと謎です。
たぶん560見ると聞きたいのは当たった後の事だと思う
接触判定だけじゃ次の行動をさせるにも限界があるんだけど
その辺が分かってないんだと思う
(皆はその辺を考えてアドバイスしてるんだけどね・・・)
|
|
2006/5/3(Wed) 01:01:26|NO.578
Dripです。
移動したことが原因でgetcoliを使ってヒット判定が下されたら、
今の移動をキャンセルすれば済むことなのですが・・この方法だと
カニ歩き処理もできなければ完全な壁の接面もできません;
それらをすべて犠牲にするならば、処理はとても簡単です。
以下にわかりやすさを重視したため問題がある当たり判定のサンプルを示します。
尚、実行したことで画像ファイルをHSPディレクトリに生成しますが、終了と同時に削除
しますのでご安心ください。
#define file "このファイルは削除しても問題ありません。.bmp"
buffer 3,256,256:cls 4
repeat 32
color cnt*8,cnt*8,cnt*8:circle cnt,cnt,256-cnt*2,256-cnt*2
loop
bmpsave file
onexit *exit
#include "hgimg3.as"
hgini
texload file:tex=stat
gsel 0
addbox box,10,10
regobj ball,box:setcoli ball,4
regobj box,box:setcoli box,1,4
selpos HGOBJ_CAMERA:objset3 0,0,100
clscolor $111133
setpos box,-30,-20,0
repeat
hgdraw
stick ky,15
if ky&1:addpos box,-1
if ky&2:addpos box,,-1
if ky&4:addpos box,1
if ky&8:addpos box,,1
gmode 2,256,256
pos 320,240:hgrotate tex,0,0,0.0,256,256
selpos box:objgetfv fv
getcoli tmp,box,20:if tmp>-1:{ //★ここで当たり判定
if ky&1:addpos box,1
if ky&2:addpos box,,1
if ky&4:addpos box,-1
if ky&8:addpos box,,-1
}
hgsync 15
if cnt\20=0:{
if cnt\40=0:title "カーソルキーで移動します。":else:title ""
}
loop
*exit
exist file
if strsize>0:delete file
hgbye
end
とりあえずこれで簡単な当たり判定はできます。
次にこのプログラムの問題性に気づき、修正することを目指してみてくださいね。
| |
|
2006/5/3(Wed) 01:14:27|NO.579
Kさんのアドバイスで気づいたんですがgetcoliの判定距離は物体の半径ではないようですね。
HSPのマニュアルには「半径」としっかり書かれているのに・・今まで騙されてました;
のほほんズさんすみません;球体や円柱の正確な判定にはピタゴラスの定理とか使ってください;_(_ _;
|
|
2006/5/3(Wed) 14:57:53|NO.586
みなさんご回答ありがとうございます
Dripさんのスクプリトを修正したら
望んでいた結果がでました
みなさん
ご協力ありがとうございました
|
|