吹き飛ばしについて

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
シルバー

吹き飛ばしについて

#1

投稿記事 by シルバー » 14年前

初めまして
私のはC++でDXライブラリは使っていません。

今ゲームを作っているのですが吹き飛ばすプログラムがわかりません。キャラクター1がキャラクター2に体当たりをした時、左からなら右に、上からなら下に真っ直ぐ吹き飛ばすという感じでやってみたいと思うのですがよくわかりません。どうやれば吹き飛ばしができるのでしょうか?
当たり判定はRECTを使っています
ボタンを押すと攻撃グラフィックが出ます

gAttack、gPlayer2 x.y ...キャラクター1の攻撃座標  キャラクター2の座標
gAttack.gPlayer vx、vy ... キャラクター1の攻撃速度 キャラクター2の速度
gAttack.use ・・・ フラグ

コード:

	if(key & KEYIN_Z)
    {
	     if(gAttack.use == 0)
       {
	       gAttack.use =1;
	       (int)gAttack.x = (int)gPlayer1.x;
	       (int)gAttack.y = (int)gPlayer1.y;
	     }
	     if(gAttack.use == 1)
	     {
                   gAttack.use = 0;
	     }
        }
   RECT rc_gAttack , rc_gPlayerX , rc_dammy;

   SetRect(&rc_gAttack , (int)gAttack.x , (int)gAttack.y, ((int)gAttack.x + ATTACK_WIDTH ) , ((int)gAttack.y + ATTACK_HEIGHT ) );
   SetRect(&rc_gPlayerX  , (int)gPlayer2.x  , (int)gPlayer2.y  , ((int)gPlayer2.x + P2_WIDTH)  , ((int)gPlayer2.y + P2_HEIGHT) );

     if( IntersectRect( &rc_dammy , &rc_gAttack , &rc_gPlayerX) )
     {
	  (int)gAttack.vx = (int)gPlayer2.vx;
	  (int)gAttack.vy = (int)gPlayer2.vy;
     }

naohiro19
記事: 256
登録日時: 14年前
住所: 愛知県

Re: 吹き飛ばしについて

#2

投稿記事 by naohiro19 » 14年前

簡単に言えばスマブラのような感じですか?

アバター
a5ua
記事: 199
登録日時: 14年前

Re: 吹き飛ばしについて

#3

投稿記事 by a5ua » 14年前

攻撃が命中したときに、(敵の速度)=(攻撃速度)×(適当な倍率)とするのはどうでしょうか。
もしくは、攻撃オブジェクトごとに、吹き飛ばし方向のベクトルを持たせるということも考えられます。

シルバー

Re: 吹き飛ばしについて

#4

投稿記事 by シルバー » 14年前

>>naohiro19さん
naohiro19 さんが書きました:簡単に言えばスマブラのような感じですか?
そうですね。
ただ%がなくて吹き飛ぶ方向は真っ直ぐ飛ぶだけですね

>>a5uaさん
a5ua さんが書きました:攻撃が命中したときに、(敵の速度)=(攻撃速度)×(適当な倍率)とするのはどうでしょうか。
もしくは、攻撃オブジェクトごとに、吹き飛ばし方向のベクトルを持たせるということも考えられます。
ベクトルの方はベクトルのことがいまいちよくわかっていないので倍率の方を試してみます。

シルバー

Re: 吹き飛ばしについて

#5

投稿記事 by シルバー » 14年前

一応吹き飛ばしっぽいのはできましたが、一瞬で移動してしまいます。
吹き飛ばしている間キャラを回転させながら吹き飛ばしたいのですがどうすればいいのでしょうか?

今はこんな感じです。

コード:

			   
   RECT rc_gAttack , rc_gPlayerX , rc_dammy;
 
   SetRect(&rc_gAttack , (int)gAttack.x , (int)gAttack.y, ((int)gAttack.x + ATTACK_WIDTH ) , ((int)gAttack.y + ATTACK_HEIGHT ) );
   SetRect(&rc_gPlayerX  , (int)gPlayer2.x  , (int)gPlayer2.y  , ((int)gPlayer2.x + P2_WIDTH)  , ((int)gPlayer2.y + P2_HEIGHT) );
 
     if( IntersectRect( &rc_dammy , &rc_gAttack , &rc_gPlayerX) )
     {
		    gPlayer2.vx += gAttack.vx * 20;
	    gPlayer2.vy += gAttack.vy * 20;
	    }

閉鎖

“C言語何でも質問掲示板” へ戻る