上視点レースゲームで車が横の時
投稿者 : renf(softbank220018203123.bbtec.net)
- 2008/12/17(Wed) 13:49
No.12079
|
|
|
|
|
上視点レースゲーム車が横に滑るのを控えたいのですが どうすればいいでしょうか・・・ 車が「━」こうむいてて、↑に滑ってるならそれを控えたいのです。
車の動きはこんなんです if (getkey(37)>0) a-=2; if (getkey(39)>0) a+=2; if (getkey(38)>0) { vx+=cos(a)/4; vy+=sin(a)/4; } angle=a+90; x+=vx; y+=vy;
|
Re: 上視点レースゲームで車が横の時
投稿者 : N@N(cc-y5026.wsr.st.keio.ac.jp)
- 2008/12/18(Thu) 14:58
No.12080
|
|
|
|
その方法だと、上キーを押さない限りvx,vyの変更ができません(車というより宇宙船の状況ですね)。 そこで、 if (getkey(37)>0) a-=2; if (getkey(39)>0) a+=2; if (getkey(38)>0) spd=2; angle=a+90; x+=spd*cos(a); y+=spd*sin(a); のようにすると、常にx増加量,y増加量が再計算されるので向いている方向に行きます。
|
Re: 上視点レースゲームで車が横の時
投稿者 : renf(softbank220018203123.bbtec.net)
- 2008/12/18(Thu) 15:15
No.12081
|
|
|
|
少し改造して加速が付くようにしたのですが。 動きが鋭すぎます・・・。 すこし横に滑るくらいがいいんです。 軽くドリフトっぽいのが出来るようにしたいのです・・・。
|
Re: 上視点レースゲームで車が横の時
投稿者 : うみんちゅー(nthkid207239.hkid.nt.ftth.ppp.infoweb.ne.jp)
- 2008/12/18(Thu) 23:18
No.12082
|
|
|
|
if (getkey(37)>0) a-=2; if (getkey(39)>0) a+=2; if (getkey(38)>0) { vx+=cos(a)*inr; vy+=sin(a)*inr; } angle=a+90; x+=vx; y+=vy; vx=vx*0.7; vy=vy*0.7;
(inr;加速度)
これならvx,vyがだんだん減速していき、やがて止まります。 ただこれだと机の上の玉のような減速の仕方なので、 車の横方向の速度ならすぐ減速、縦方向ならちょっとずつ減速、という感じにしないといけないんですが^^; ごめんなさい、そのやり方はまだわからないです><
|
Re: 上視点レースゲームで車が横の時
投稿者 : renf(softbank220018203123.bbtec.net)
- 2008/12/19(Fri) 11:44
No.12085
|
|
|
|
angleを90度回転させてそっちの方向に減速させる・・・ という考えが頭にあるんですけど。 どうすればいいのかが分からない・・・。 もし←に向いてて上にすこしうごいてるなら。 angleとかで90度左に回転させてそっちに動かすとか考えてみたりしたんですけど。 どうすりゃいいんだ・・・。orz
|
Re: 上視点レースゲームで車が横の時
投稿者 : cF(z155.124-45-175.ppp.wakwak.ne.jp)
- 2008/12/19(Fri) 23:28
No.12087
|
|
|
|
速度 vx, vy を用いるのであれば vx, vy の値より移動方向、つまり移動している角度を求め オブジェクトの向き angle の値との差の絶対値から 減速量を割り出すというのはどうでしょう。
たとえば move_angle = angle( vx, vy ) + 90; diff_angle = abs( anglediff( angle, move_angle ) ); これにより、0 <= diff_angle <= 180 の値が入るので cos( diff_angle ) などを利用して減速量を決める
|
Re: 上視点レースゲームで車が横の時
投稿者 : renf(softbank220018203123.bbtec.net)
- 2008/12/22(Mon) 12:18
No.12100
|
|
|
|
if (getkey(37)>0) a-=2; if (getkey(39)>0) a+=2; if (getkey(38)>0) { vx+=cos(a)/4; vy+=sin(a)/4; } angle=a+90; x+=vx; y+=vy;
move_angle = angle( vx, vy ) + 90; diff_angle = abs( anglediff( angle, move_angle ) ); if(vx>0.1)vx-=cos( diff_angle )/5; if(vx<-0.1)vx+=cos( diff_angle )/5; if(vy>0.1)vy-=sin( diff_angle )/5; if(vy<-0.1)vy+=sin( diff_angle )/5;
こうゆう風にしてみたんですけど 動きが少し変です。 これでいいんでしょうか・・・?
|
|