ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

C言語とC++言語コミュの教えてください

  • mixiチェック
  • このエントリーをはてなブックマークに追加
初めまして
C++を独学で学びながらシューティングゲームを作成中なのですが、当たり判定の付け方がいまいちわかりません・・・。
↓↓↓現在作成中のコード↓↓↓

#include "DxLib.h"

int Key[256]; // キーが押されているフレーム数を格納する

// キーの入力状態を更新する
int gpUpdateKey(){
char tmpKey[256]; // 現在のキーの入力状態を格納する
GetHitKeyStateAll( tmpKey ); // 全てのキーの入力状態を得る
for( int i=0; i<256; i++ ){
if( tmpKey[i] != 0 ){ // i番のキーコードに対応するキーが押されていたら
Key[i]++; // 加算
} else { // 押されていなければ
Key[i] = 0; // 0にする
}
}
return 0;
}

int x = 200, y = 200;
int x02 =0, y02 = 0;
int Handle, Handle02,enemy; // 画像格納用ハンドル


void gpCalc(){
if(Handle){
if( Key[KEY_INPUT_RIGHT] >= 1 ){ // 5フレーム以上押されていたら
x = x + 5;
}
if( Key[KEY_INPUT_LEFT] >= 1 ){ // 5フレーム以上押されていたら
x = x - 5;
}
if( Key[KEY_INPUT_UP] >= 1 ){ // 5フレーム以上押されていたら
y = y - 5;
}
if( Key[KEY_INPUT_DOWN] >= 1 ){ // 5フレーム以上押されていたら
y = y + 5;
}
if( Key[KEY_INPUT_Z] >= 1 ){ // Zを押しtusukeたら
}
}
}

void gpGraph(){
DrawGraph( x, y, Handle, TRUE ); //画像の描画
if(Key[KEY_INPUT_Z] >= 1){
x02 = x + 25;
y02 = y - 5;
DrawGraph( x02, y02, Handle02, TRUE );
while(y02 > -20){
y02--;
DrawGraph( x02, y02, Handle02, TRUE );
}

}
}

void gpTest(){
DrawGraph(0,0,enemy,TRUE);
}

int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int){
ChangeWindowMode(TRUE), DxLib_Init(), SetDrawScreen( DX_SCREEN_BACK ); //ウィンドウモード変更と初期化と裏画面設定






Handle = LoadGraph( "./機体/jiki.png" ); // 画像のロード
Handle02 = LoadGraph( "./機体/tama.png" ); // 画像のロード
enemy = LoadGraph( "./機体/teki.png" ); // 画像のロード


// while(裏画面を表画面に反映, メッセージ処理, 画面クリア)
while( ScreenFlip()==0 && ProcessMessage()==0 && ClearDrawScreen()==0 && gpUpdateKey()==0 ){
gpCalc();
gpGraph();
gpTest();

}


DxLib_End(); // DXライブラリ終了処理
return 0;
}


どの場所に加えていけばいいのかもいまいちわからないので、アドバイスお願いします。

コメント(10)

うーん、こういう場合はフローチャート書いてくれたほうがわかりやすい…
あと、弾・敵の描画がどこでされているのかわからない。

まぁ、普通に考えたら
自キャラ更新(弾更新)
敵キャラ更新(弾更新)
当たり判定(移動した場所すべて)
描画
の順番とかかなぁ

まぁ、下とかが参考になるかな
http://dixq.net/rp/18.html
http://www.c3.club.kyutech.ac.jp/gamewiki/index.php?%C5%F6%A4%BF%A4%EA%C8%BD%C4%EA

この当たりも役立つかな?平方根はCではsqrt()かsqr()という関数を使えばたしかよかった気がします。

中ほどまで読み進めていくと四角どうしの当たり判定が書いてあるので、
まずはそれを参照にしてから練習するといいかもしれません。

またそれでも解らなかったり、回答のポイントのツボが違ってたら、またレスしてください。
きっとチュン様みたいな親切な方が教えてくれると思います。
>どの場所に加えていけばいいのかもいまいちわからないので、アドバイスお願いします。

自分と敵の座標を移動計算した後、自分と敵を表示した直後に判定するといいと思います。

判定直後当たってなかったら待ち時間Waitを置くといいと思います。

あまり参考にならないかもしれませんが、、、キーボードで入力して移動計算したあと出来るだけすぐ自機を表示するよう、キーの入力と表示のタイミングが短いといいです。反応が早くなります。

キー入力と表示の間に処理がいっぱい入ると、キー反応が鈍く感じるから。
>>1 分かりにくいコードですみません・・・。
URL参考にさせていただきます。

>>3参考になるURLをありがとうございます。
ちょっと練習させていただきます

>>4なるほど!
適切なアドバイスありがとうございます。
調べて使わせていただきます

>>5画像が重なったらってのもできるんですかね?
>画像が重なったら

できないことはないけど、当たり判定が超シビアになるよ?
どういう画像使うかわからないけど、カドの部分とか普通自機のエリア外じゃない?
表示画像的にはぶつかってないのに処理されると思う。

まぁ、自機画像が真四角ならそれでも問題ないだろうけど

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

C言語とC++言語 更新情報

C言語とC++言語のメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。

人気コミュニティランキング