当たり判定
Posted: 2010年10月19日(火) 14:43
質問ですが、よろしくお願いします。
ゲームプログラミングの館の当たり判定でたくさんの当たり判定をやろうと思い
描画する円の数を増やして、当たり判定の式を入れようとしたら詰まってしまいました。
円が2つだけだったらこの式でいいというのは理解できるのですが
range=enemy[0].range+enemy[1].range;
もっと数が増えた場合はどのような式になるのでしょうか?(自分とそれ以外の円のrangeの計算方法)
下記に指定した数の円を描画するプログラムを作ったので記載しておきます。
構造体とかポインタはあまり理解していないので間違っていたらそちらも指摘をお願いします・・・
************************************************************************
#include "DxLib.h"
#define NUM 5
typedef struct{
int x,y,range;
}enemy_t;
char Key[256];
void enemy_circle(enemy_t*e , int x,int y,int range){
e->x=x;
e->y=y;
e->range=range;
}
void Circle(enemy_t e){
DrawCircle(e.x,e.y,e.range,GetColor(255,0,0),FALSE);
}
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
enemy_t En[NUM];
if( ChangeWindowMode(TRUE) != DX_CHANGESCREEN_OK || DxLib_Init() == -1 ) return -1; //初期化処理
SetDrawScreen( DX_SCREEN_BACK ); //描画先を裏画面に設定
SetDrawBlendMode( DX_BLENDMODE_ADD , 256 ) ;
for(int i=0;i<NUM;i++){
enemy_circle(&En,GetRand(640),GetRand(480),GetRand(200));
}
while(!ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll( Key ) && !Key[KEY_INPUT_ESCAPE]){
//↑メッセージ処理 ↑画面をクリア ↑キーボード入力状態取得 ↑ESCが押されると終了
for(int i=0;i<NUM;i++){
Circle(En);
}
ScreenFlip();
}
DxLib_End();
return 0;
}
************************************************************************
ゲームプログラミングの館の当たり判定でたくさんの当たり判定をやろうと思い
描画する円の数を増やして、当たり判定の式を入れようとしたら詰まってしまいました。
円が2つだけだったらこの式でいいというのは理解できるのですが
range=enemy[0].range+enemy[1].range;
もっと数が増えた場合はどのような式になるのでしょうか?(自分とそれ以外の円のrangeの計算方法)
下記に指定した数の円を描画するプログラムを作ったので記載しておきます。
構造体とかポインタはあまり理解していないので間違っていたらそちらも指摘をお願いします・・・
************************************************************************
#include "DxLib.h"
#define NUM 5
typedef struct{
int x,y,range;
}enemy_t;
char Key[256];
void enemy_circle(enemy_t*e , int x,int y,int range){
e->x=x;
e->y=y;
e->range=range;
}
void Circle(enemy_t e){
DrawCircle(e.x,e.y,e.range,GetColor(255,0,0),FALSE);
}
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
enemy_t En[NUM];
if( ChangeWindowMode(TRUE) != DX_CHANGESCREEN_OK || DxLib_Init() == -1 ) return -1; //初期化処理
SetDrawScreen( DX_SCREEN_BACK ); //描画先を裏画面に設定
SetDrawBlendMode( DX_BLENDMODE_ADD , 256 ) ;
for(int i=0;i<NUM;i++){
enemy_circle(&En,GetRand(640),GetRand(480),GetRand(200));
}
while(!ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll( Key ) && !Key[KEY_INPUT_ESCAPE]){
//↑メッセージ処理 ↑画面をクリア ↑キーボード入力状態取得 ↑ESCが押されると終了
for(int i=0;i<NUM;i++){
Circle(En);
}
ScreenFlip();
}
DxLib_End();
return 0;
}
************************************************************************