#include "DxLib.h"
#include <math.h>
#define MAX_M 100 // ミサイルの最大数定義
#define PI 3.14159 // 円周率
// データ定義
int Hx , Hy ; // 砲台の座標
int Hm ; // 砲台の移動方向
int Hsc ; // 砲台のショット間隔カウンタ
int Px , Py ; // 自機の座標
int Mg,hune,ko_n,haikei,clear,over; // ミサイルのグラフィック
int Mx[ MAX_M ] ,My[ MAX_M ] ; // ミサイルの座標
int Msx[ MAX_M ] , Msy[ MAX_M ] ; // ミサイルの速度
int Mv[ MAX_M ] ; // ミサイルデータの使用状態(1:使用中 0:未使用)
double Ma[ MAX_M ] ; // ミサイルの角度
int Mc[ MAX_M ] ; // ミサイルの追尾カウンタ
// WinMain関数
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )
{
int Key ;
LONGLONG Time ;
int i ;
int lost=0,win=0;
// 画面モードの設定
SetGraphMode( 640 , 480 , 16 ) ;
// DXライブラリ初期化処理
if( DxLib_Init() == -1 )
{
// エラーが起きたら直ちに終了
return -1;
}
// 描画先を裏画面にセット
SetDrawScreen( DX_SCREEN_BACK ) ;
// 初期化処理
{
// ミサイルのグラフィックロード
Mg = LoadGraph( "ika.png" ) ;
hune = LoadGraph("漁船.png");
ko_n = LoadGraph("コーン.png");
haikei = LoadGraph("haikei.png");
clear = LoadGraph("gameclear.png");
over = LoadGraph("gameover.png");
// 自機の座標セット
Px = 320 ; Py = 200 ;
// 砲台の座標セット
Hx = 320 ; Hy = 30 ;
// 砲台の移動方向セット
Hm = 3 ;
// 砲台の移動間隔カウンタセット
Hsc = 30 ;
// ミサイルデータの初期化
for( i = 0 ; i < MAX_M ; i ++ )
Mv[ i ] = 0 ;
}
// ゲームループ
Time = GetNowHiPerformanceCount() + 1000000 / 60 ;
while( ProcessMessage() == 0 && CheckHitKey( KEY_INPUT_ESCAPE ) == 0 )
{
// プレイヤーの移動処理
{
// 入力取得
Key = GetJoypadInputState( DX_INPUT_KEY_PAD1 ) ;
if( Key & PAD_INPUT_RIGHT ) Px += 5 ; // 右を押していたら右に進む
if( Key & PAD_INPUT_LEFT ) Px -= 5 ; // 左を押していたら左に進む
if( Key & PAD_INPUT_UP ) Py -= 5 ; // 上を押していたら上に進む
if( Key & PAD_INPUT_DOWN ) Py += 5 ; // 下を押していたら下に進む
// 画面外に出ていたら補正
if( Px > 640 - 16 ) Px = 640 - 16 ;
if( Px < 0 ) Px = 0 ;
if( Py > 480 - 16 ) Py = 480 - 16 ;
if( Py < 0 ) Py = 0 ;
}
// ミサイルの移動処理
for( i = 0 ; i < MAX_M ; i ++ )
{
// ミサイルデータが無効だったらスキップ
if( Mv[ i ] == 0 ) continue ;
// 照準に当たっていたらミサイルデータを無効にする
if( ( ( Mx[ i ] > Px && Mx[ i ] < Px + 32 ) || ( Px > Mx[ i ] && Px < Mx[ i ] + 16 ) ) &&
( ( My[ i ] > Py && My[ i ] < Py + 32 ) || ( Py > My[ i ] && Py < My[ i ] + 16 ) ) )
{
Mv[ i ] = 0 ;
continue ;
}
// 追尾カウンタが規定値に来ていなければ追尾処理
if( Mc[ i ] < 100 )
{
double ax , ay , bx , by ;
// bx,by 自分の進んでいる方向 ax,ay 本来進むべき方向
bx = cos( Ma[ i ] ) ;
by = sin( Ma[ i ] ) ;
ax = ( Px + 16 ) - Mx[ i ] ;
ay = ( Py + 16 ) - My[ i ] ;
// 外積を利用し向きを照準側に向ける
Ma[ i ] += ( ax * by - ay * bx < 0.0 ) ? + PI / 180 * 15 : - PI / 180 * 15 ;
}
// 追尾カウンタ加算
Mc[ i ] ++ ;
// 速度変更
Msx[ i ] += ( int )( cos( Ma[ i ] ) * 30.0 );
Msy[ i ] += ( int )( sin( Ma[ i ] ) * 30.0 );
// 移動
Mx[ i ] = ( Mx[ i ] * 100 + Msx[ i ] ) / 100 ;
My[ i ] = ( My[ i ] * 100 + Msy[ i ] ) / 100 ;
// 画面外に出ていたらミサイルデータを無効にする
if( Mx[ i ] < -100 || Mx[ i ] > 740 ||
My[ i ] < -100 || My[ i ] > 580 ) Mv[ i ] = 0 ;
}
// 砲台の移動処理
{
Hx += Hm ;
// 画面端まで来ていたら反転
if( Hx > 640 - 16 || Hx < 0 ) Hm *= -1 ;
// ショットカウンタを減らす
Hsc -- ;
// カウンタが0になっていたらミサイル発射
if( Hsc == 0 )
{
// 使われていないミサイルデータを探す
for( i = 0 ; i < MAX_M ; i ++ )
{
if( Mv[ i ] == 0 ) break ;
}
// もし使われていないミサイルデータがあったらショットを出す
if( i != MAX_M )
{
// ミサイルの位置を設定
Mx[ i ] = Hx + 16 ;
My[ i ] = Hy + 16 ;
// 速度セット
Msx[ i ] = 0 ;
Msy[ i ] = 0 ;
// 角度をセット
Ma[ i ] = PI / 2 ;
// 追尾カウンタをセット
Mc[ i ] = 0 ;
// ショットデータを使用中にセット
Mv[ i ] = 1 ;
}
// 発射間隔カウンタ値をセット
Hsc = 30 ;
}
}
// 描画処理
{
// 画面の初期化
ClearDrawScreen() ;
DrawExtendGraph(0,0,640,480,haikei,FALSE);
// ミサイルの描画
for( i = 0 ; i < MAX_M ; i ++ )
{
// ミサイルデータが有効でない場合は次に移る
if( Mv[ i ] == 0 ) continue ;
// ミサイルの描画
DrawRotaGraph( Mx[ i ], My[ i ], 1.0 , Ma[ i ] , Mg , TRUE ) ;
if(Px<=Mx && Mx<=(Px+32) && Py<=My && My<=(Py+32))
lost++;
}
// プレーヤーの描画
DrawExtendGraph( Px , Py , Px + 32 , Py + 32 , ko_n , TRUE ) ;
// 砲台の描画
DrawExtendGraph( Hx - 8 , Hy - 8 , Hx + 8 , Hy + 8 , hune , TRUE ) ;
if(Px<=(Hx+8) && (Hx-8)<=(Px+32) && Py<=(Hy+8) && (Hy-8)<=(Py+32))
win++;
// 裏画面の内容を表画面に反映
ScreenFlip() ;
// 時間待ち
while( GetNowHiPerformanceCount() < Time ){}
Time += 1000000 / 60 ;
if(lost>2)
DrawExtendGraph(0,0,640,480,over,FALSE);
if(win>10)
DrawExtendGraph(0,0,640,480,clear,FALSE);
}
}
DxLib_End() ; // DXライブラリ使用の終了処理
return 0 ; // ソフトの終了
}
自機が砲台に10回当たったら勝ちの画面を表示させて
自機がミサイルに当たったら負けの画面を表示させたいのですがうまくいきません
ご指導のほどをよろしくお願いします
DXlibの画像の当たり判定について
Re: DXlibの画像の当たり判定について
とりあえず、コードを提示するときはBBcodeを有効にした状態でcodeタグで囲み、
かつ適切なインデントをしていただけると、見やすくて助かります。
かつ適切なインデントをしていただけると、見やすくて助かります。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: DXlibの画像の当たり判定について
>
申し訳ありません、初めて利用するので詳しいルール等は存じ上げませんでした
次回から気を付けます
みけCAT さんが書きました:とりあえず、コードを提示するときはBBcodeを有効にした状態でcodeタグで囲み、
かつ適切なインデントをしていただけると、見やすくて助かります。
申し訳ありません、初めて利用するので詳しいルール等は存じ上げませんでした
次回から気を付けます
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 14年前
- 住所: 東海地方
- 連絡を取る:
Re: DXlibの画像の当たり判定について
フォームルールはこちらです。
http://dixq.net/board/board.html
フォーラムルールの説明にありますが、「うまく行きません」は何も説明していないと同じですので今起こっている想定と違う所を事細かに説明しください。
http://dixq.net/board/board.html
フォーラムルールの説明にありますが、「うまく行きません」は何も説明していないと同じですので今起こっている想定と違う所を事細かに説明しください。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: DXlibの画像の当たり判定について
自機と砲台が10回接触するとクリア画面が表示されるようにしたいのですが、10回以上接触しても何も起こりませんプレイ画面がそのまま続きます
自機とロケットが接触しても同じ現象が起こります
ちなみにC言語は約一年勉強しました
自機とロケットが接触しても同じ現象が起こります
ちなみにC言語は約一年勉強しました
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 14年前
- 住所: 東海地方
- 連絡を取る:
Re: DXlibの画像の当たり判定について
とにかく読みづらいため、codeタグを付与してみました。
マウス次郎 さんが書きました:#include "DxLib.h" #include <math.h> #define MAX_M 100 // ミサイルの最大数定義 #define PI 3.14159 // 円周率 // データ定義 int Hx , Hy ; // 砲台の座標 int Hm ; // 砲台の移動方向 int Hsc ; // 砲台のショット間隔カウンタ int Px , Py ; // 自機の座標 int Mg,hune,ko_n,haikei,clear,over; // ミサイルのグラフィック int Mx[ MAX_M ] ,My[ MAX_M ] ; // ミサイルの座標 int Msx[ MAX_M ] , Msy[ MAX_M ] ; // ミサイルの速度 int Mv[ MAX_M ] ; // ミサイルデータの使用状態(1:使用中 0:未使用) double Ma[ MAX_M ] ; // ミサイルの角度 int Mc[ MAX_M ] ; // ミサイルの追尾カウンタ // WinMain関数 int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { int Key ; LONGLONG Time ; int i ; int lost=0,win=0; // 画面モードの設定 SetGraphMode( 640 , 480 , 16 ) ; // DXライブラリ初期化処理 if( DxLib_Init() == -1 ) { // エラーが起きたら直ちに終了 return -1; } // 描画先を裏画面にセット SetDrawScreen( DX_SCREEN_BACK ) ; // 初期化処理 { // ミサイルのグラフィックロード Mg = LoadGraph( "ika.png" ) ; hune = LoadGraph("漁船.png"); ko_n = LoadGraph("コーン.png"); haikei = LoadGraph("haikei.png"); clear = LoadGraph("gameclear.png"); over = LoadGraph("gameover.png"); // 自機の座標セット Px = 320 ; Py = 200 ; // 砲台の座標セット Hx = 320 ; Hy = 30 ; // 砲台の移動方向セット Hm = 3 ; // 砲台の移動間隔カウンタセット Hsc = 30 ; // ミサイルデータの初期化 for( i = 0 ; i < MAX_M ; i ++ ) Mv[ i ] = 0 ; } // ゲームループ Time = GetNowHiPerformanceCount() + 1000000 / 60 ; while( ProcessMessage() == 0 && CheckHitKey( KEY_INPUT_ESCAPE ) == 0 ) { // プレイヤーの移動処理 { // 入力取得 Key = GetJoypadInputState( DX_INPUT_KEY_PAD1 ) ; if( Key & PAD_INPUT_RIGHT ) Px += 5 ; // 右を押していたら右に進む if( Key & PAD_INPUT_LEFT ) Px -= 5 ; // 左を押していたら左に進む if( Key & PAD_INPUT_UP ) Py -= 5 ; // 上を押していたら上に進む if( Key & PAD_INPUT_DOWN ) Py += 5 ; // 下を押していたら下に進む // 画面外に出ていたら補正 if( Px > 640 - 16 ) Px = 640 - 16 ; if( Px < 0 ) Px = 0 ; if( Py > 480 - 16 ) Py = 480 - 16 ; if( Py < 0 ) Py = 0 ; } // ミサイルの移動処理 for( i = 0 ; i < MAX_M ; i ++ ) { // ミサイルデータが無効だったらスキップ if( Mv[ i ] == 0 ) continue ; // 照準に当たっていたらミサイルデータを無効にする if( ( ( Mx[ i ] > Px && Mx[ i ] < Px + 32 ) || ( Px > Mx[ i ] && Px < Mx[ i ] + 16 ) ) && ( ( My[ i ] > Py && My[ i ] < Py + 32 ) || ( Py > My[ i ] && Py < My[ i ] + 16 ) ) ) { Mv[ i ] = 0 ; continue ; } // 追尾カウンタが規定値に来ていなければ追尾処理 if( Mc[ i ] < 100 ) { double ax , ay , bx , by ; // bx,by 自分の進んでいる方向 ax,ay 本来進むべき方向 bx = cos( Ma[ i ] ) ; by = sin( Ma[ i ] ) ; ax = ( Px + 16 ) - Mx[ i ] ; ay = ( Py + 16 ) - My[ i ] ; // 外積を利用し向きを照準側に向ける Ma[ i ] += ( ax * by - ay * bx < 0.0 ) ? + PI / 180 * 15 : - PI / 180 * 15 ; } // 追尾カウンタ加算 Mc[ i ] ++ ; // 速度変更 Msx[ i ] += ( int )( cos( Ma[ i ] ) * 30.0 ); Msy[ i ] += ( int )( sin( Ma[ i ] ) * 30.0 ); // 移動 Mx[ i ] = ( Mx[ i ] * 100 + Msx[ i ] ) / 100 ; My[ i ] = ( My[ i ] * 100 + Msy[ i ] ) / 100 ; // 画面外に出ていたらミサイルデータを無効にする if( Mx[ i ] < -100 || Mx[ i ] > 740 || My[ i ] < -100 || My[ i ] > 580 ) Mv[ i ] = 0 ; } // 砲台の移動処理 { Hx += Hm ; // 画面端まで来ていたら反転 if( Hx > 640 - 16 || Hx < 0 ) Hm *= -1 ; // ショットカウンタを減らす Hsc -- ; // カウンタが0になっていたらミサイル発射 if( Hsc == 0 ) { // 使われていないミサイルデータを探す for( i = 0 ; i < MAX_M ; i ++ ) { if( Mv[ i ] == 0 ) break ; } // もし使われていないミサイルデータがあったらショットを出す if( i != MAX_M ) { // ミサイルの位置を設定 Mx[ i ] = Hx + 16 ; My[ i ] = Hy + 16 ; // 速度セット Msx[ i ] = 0 ; Msy[ i ] = 0 ; // 角度をセット Ma[ i ] = PI / 2 ; // 追尾カウンタをセット Mc[ i ] = 0 ; // ショットデータを使用中にセット Mv[ i ] = 1 ; } // 発射間隔カウンタ値をセット Hsc = 30 ; } } // 描画処理 { // 画面の初期化 ClearDrawScreen() ; DrawExtendGraph(0,0,640,480,haikei,FALSE); // ミサイルの描画 for( i = 0 ; i < MAX_M ; i ++ ) { // ミサイルデータが有効でない場合は次に移る if( Mv[ i ] == 0 ) continue ; // ミサイルの描画 DrawRotaGraph( Mx[ i ], My[ i ], 1.0 , Ma[ i ] , Mg , TRUE ) ; if(Px<=Mx[i] && Mx[i]<=(Px+32) && Py<=My[i] && My[i]<=(Py+32)) lost++; } // プレーヤーの描画 DrawExtendGraph( Px , Py , Px + 32 , Py + 32 , ko_n , TRUE ) ; // 砲台の描画 DrawExtendGraph( Hx - 8 , Hy - 8 , Hx + 8 , Hy + 8 , hune , TRUE ) ; if(Px<=(Hx+8) && (Hx-8)<=(Px+32) && Py<=(Hy+8) && (Hy-8)<=(Py+32)) win++; // 裏画面の内容を表画面に反映 ScreenFlip() ; // 時間待ち while( GetNowHiPerformanceCount() < Time ){} Time += 1000000 / 60 ; if(lost>2) DrawExtendGraph(0,0,640,480,over,FALSE); if(win>10) DrawExtendGraph(0,0,640,480,clear,FALSE); } } DxLib_End() ; // DXライブラリ使用の終了処理 return 0 ; // ソフトの終了 }
自機が砲台に10回当たったら勝ちの画面を表示させて
自機がミサイルに当たったら負けの画面を表示させたいのですがうまくいきません
ご指導のほどをよろしくお願いします
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: DXlibの画像の当たり判定について
#include "DxLib.h"
#include <math.h>
#define MAX_M 100 // ミサイルの最大数定義
#define PI 3.14159 // 円周率
// データ定義
int Hx , Hy ; // 砲台の座標
int Hm ; // 砲台の移動方向
int Hsc ; // 砲台のショット間隔カウンタ
int Px , Py ; // 自機の座標
int Mg,hune,ko_n,haikei,clear,over; // ミサイルのグラフィック
int Mx[ MAX_M ] ,My[ MAX_M ] ; // ミサイルの座標
int Msx[ MAX_M ] , Msy[ MAX_M ] ; // ミサイルの速度
int Mv[ MAX_M ] ; // ミサイルデータの使用状態(1:使用中 0:未使用)
double Ma[ MAX_M ] ; // ミサイルの角度
int Mc[ MAX_M ] ; // ミサイルの追尾カウンタ
// WinMain関数
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )
{
int Key ;
LONGLONG Time ;
int i ;
int lost=0,win=0;
// 画面モードの設定
SetGraphMode( 640 , 480 , 16 ) ;
// DXライブラリ初期化処理
if( DxLib_Init() == -1 )
{
// エラーが起きたら直ちに終了
return -1;
}
// 描画先を裏画面にセット
SetDrawScreen( DX_SCREEN_BACK ) ;
// 初期化処理
{
// ミサイルのグラフィックロード
Mg = LoadGraph( "ika.png" ) ;
hune = LoadGraph("漁船.png");
ko_n = LoadGraph("コーン.png");
haikei = LoadGraph("haikei.png");
clear = LoadGraph("gameclear.png");
over = LoadGraph("gameover.png");
// 自機の座標セット
Px = 320 ; Py = 200 ;
// 砲台の座標セット
Hx = 320 ; Hy = 30 ;
// 砲台の移動方向セット
Hm = 3 ;
// 砲台の移動間隔カウンタセット
Hsc = 30 ;
// ミサイルデータの初期化
for( i = 0 ; i < MAX_M ; i ++ )
Mv[ i ] = 0 ;
}
// ゲームループ
Time = GetNowHiPerformanceCount() + 1000000 / 60 ;
while( ProcessMessage() == 0 && CheckHitKey( KEY_INPUT_ESCAPE ) == 0 )
{
// プレイヤーの移動処理
{
// 入力取得
Key = GetJoypadInputState( DX_INPUT_KEY_PAD1 ) ;
if( Key & PAD_INPUT_RIGHT ) Px += 5 ; // 右を押していたら右に進む
if( Key & PAD_INPUT_LEFT ) Px -= 5 ; // 左を押していたら左に進む
if( Key & PAD_INPUT_UP ) Py -= 5 ; // 上を押していたら上に進む
if( Key & PAD_INPUT_DOWN ) Py += 5 ; // 下を押していたら下に進む
// 画面外に出ていたら補正
if( Px > 640 - 16 ) Px = 640 - 16 ;
if( Px < 0 ) Px = 0 ;
if( Py > 480 - 16 ) Py = 480 - 16 ;
if( Py < 0 ) Py = 0 ;
}
// ミサイルの移動処理
for( i = 0 ; i < MAX_M ; i ++ )
{
// ミサイルデータが無効だったらスキップ
if( Mv[ i ] == 0 ) continue ;
// 照準に当たっていたらミサイルデータを無効にする
if( ( ( Mx[ i ] > Px && Mx[ i ] < Px + 32 ) || ( Px > Mx[ i ] && Px < Mx[ i ] + 16 ) ) &&
( ( My[ i ] > Py && My[ i ] < Py + 32 ) || ( Py > My[ i ] && Py < My[ i ] + 16 ) ) )
{
Mv[ i ] = 0 ;
continue ;
}
// 追尾カウンタが規定値に来ていなければ追尾処理
if( Mc[ i ] < 100 )
{
double ax , ay , bx , by ;
// bx,by 自分の進んでいる方向 ax,ay 本来進むべき方向
bx = cos( Ma[ i ] ) ;
by = sin( Ma[ i ] ) ;
ax = ( Px + 16 ) - Mx[ i ] ;
ay = ( Py + 16 ) - My[ i ] ;
// 外積を利用し向きを照準側に向ける
Ma[ i ] += ( ax * by - ay * bx < 0.0 ) ? + PI / 180 * 15 : - PI / 180 * 15 ;
}
// 追尾カウンタ加算
Mc[ i ] ++ ;
// 速度変更
Msx[ i ] += ( int )( cos( Ma[ i ] ) * 30.0 );
Msy[ i ] += ( int )( sin( Ma[ i ] ) * 30.0 );
// 移動
Mx[ i ] = ( Mx[ i ] * 100 + Msx[ i ] ) / 100 ;
My[ i ] = ( My[ i ] * 100 + Msy[ i ] ) / 100 ;
// 画面外に出ていたらミサイルデータを無効にする
if( Mx[ i ] < -100 || Mx[ i ] > 740 ||
My[ i ] < -100 || My[ i ] > 580 ) Mv[ i ] = 0 ;
}
// 砲台の移動処理
{
Hx += Hm ;
// 画面端まで来ていたら反転
if( Hx > 640 - 16 || Hx < 0 ) Hm *= -1 ;
// ショットカウンタを減らす
Hsc -- ;
// カウンタが0になっていたらミサイル発射
if( Hsc == 0 )
{
// 使われていないミサイルデータを探す
for( i = 0 ; i < MAX_M ; i ++ )
{
if( Mv[ i ] == 0 ) break ;
}
// もし使われていないミサイルデータがあったらショットを出す
if( i != MAX_M )
{
// ミサイルの位置を設定
Mx[ i ] = Hx + 16 ;
My[ i ] = Hy + 16 ;
// 速度セット
Msx[ i ] = 0 ;
Msy[ i ] = 0 ;
// 角度をセット
Ma[ i ] = PI / 2 ;
// 追尾カウンタをセット
Mc[ i ] = 0 ;
// ショットデータを使用中にセット
Mv[ i ] = 1 ;
}
// 発射間隔カウンタ値をセット
Hsc = 30 ;
}
}
// 描画処理
{
// 画面の初期化
ClearDrawScreen() ;
DrawExtendGraph(0,0,640,480,haikei,FALSE);
// ミサイルの描画
for( i = 0 ; i < MAX_M ; i ++ )
{
// ミサイルデータが有効でない場合は次に移る
if( Mv[ i ] == 0 ) continue ;
// ミサイルの描画
DrawRotaGraph( Mx[ i ], My[ i ], 1.0 , Ma[ i ] , Mg , TRUE ) ;
if(Px<=Mx[i] && Mx[i]<=(Px+32) && Py<=My[i] && My[i]<=(Py+32))
lost++;
}
// プレーヤーの描画
DrawExtendGraph( Px , Py , Px + 32 , Py + 32 , ko_n , TRUE ) ;
// 砲台の描画
DrawExtendGraph( Hx - 8 , Hy - 8 , Hx + 8 , Hy + 8 , hune , TRUE ) ;
if(Px<=(Hx+8) && (Hx-8)<=(Px+32) && Py<=(Hy+8) && (Hy-8)<=(Py+32))
win++;
// 裏画面の内容を表画面に反映
ScreenFlip() ;
// 時間待ち
while( GetNowHiPerformanceCount() < Time ){}
Time += 1000000 / 60 ;
if(lost>2)
DrawExtendGraph(0,0,640,480,over,FALSE);
if(win>10)
DrawExtendGraph(0,0,640,480,clear,FALSE);
}
}
DxLib_End() ; // DXライブラリ使用の終了処理
return 0 ; // ソフトの終了
}
失礼なことをして申し訳ありません
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 14年前
- 住所: 東海地方
- 連絡を取る:
Re: DXlibの画像の当たり判定について
コードを見る限りはゲームループ内にlost>2とwin>10が入っていますが、これだと描画後にClearDrawScreen() ;が先に走るので、ScreenFlip() ;しても表示されません。
この
は、ClearDrawScreen()とScreenFlip() ;の間にないといけないのです。
どうすれば良いかというと、ゲームプレイ中とゲームオーバー、ゲーム勝利の描画状態を分けてやる必要があります。
if文の使い方やif文の位置を工夫すれば出来ます。
【補足】
ClearDrawScreen() ;の前のゲーム処理も「ゲームオーバー」、「ゲーム勝利」の時は通らないようにしないと行けません。
この
if(lost>2)
DrawExtendGraph(0,0,640,480,over,FALSE);
if(win>10)
DrawExtendGraph(0,0,640,480,clear,FALSE);
どうすれば良いかというと、ゲームプレイ中とゲームオーバー、ゲーム勝利の描画状態を分けてやる必要があります。
if文の使い方やif文の位置を工夫すれば出来ます。
【補足】
ClearDrawScreen() ;の前のゲーム処理も「ゲームオーバー」、「ゲーム勝利」の時は通らないようにしないと行けません。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。