C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[3]: ロック○ンエグ○みたいなものがつくりたい


(過去ログ 88 を表示中)

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■52709 / inTopicNo.1)  ロック○ンエグ○みたいなものがつくりたい
  
□投稿者/ チョコ助 (1回)-(2010/08/22(Sun) 19:17:50)

分類:[C/C++] 

Visual C++ 2008 Expressを使用、DXライブラリを使用してます。
単刀直入に言います。Bボタンで弾を発射させたいんですが、なぜかBボタンを長押ししないと弾が描写されないんですよ。そしてデバッグをしても原因が分からないんですよ。
多分ささいなミスか、または根本的に考え方が間違えているのかもしれません。だれか親切な方、どこをどうすればいいのか教えてください。


#include "DxLib.h"

int x,y;
int idoutime1,idoutime2,idouf;
int tamatime1,tamatime2,tamaY[6],tamaX[6],tamaf[6],tamacount;
void idou()
{
	//左キー入力時
	if( CheckHitKey( KEY_INPUT_LEFT ) == 1 && idouf == 1 &&  x != 75 )
	{
		idouf = 0;
		x = x - 105;
		idoutime1 = GetNowCount();
		idoutime2 = GetNowCount();
	}
	//右キー入力時
	else if( CheckHitKey( KEY_INPUT_RIGHT ) == 1 && idouf == 1 && x != 285 )
	{
		idouf = 0;
		x = x + 105;
		idoutime1 = GetNowCount();
		idoutime2 = GetNowCount();
	}
	//下キー入力時
	else if( CheckHitKey( KEY_INPUT_DOWN  ) == 1 && idouf == 1 && y != 400 )
	{
		idouf = 0;
		y = y + 100;
		idoutime1 = GetNowCount();
		idoutime2 = GetNowCount();
	}
	//上キー入力時
	else if( CheckHitKey( KEY_INPUT_UP    ) == 1 && idouf == 1 && y != 200 )
	{
		idouf = 0;
		y = y - 100;
		idoutime1 = GetNowCount();
		idoutime2 = GetNowCount();
	}
	//弾発射
	else if( CheckHitKey( KEY_INPUT_B ) == 1 && idouf == 1)
	{
		idouf = 0;
		idoutime1 = GetNowCount();
		idoutime2 = GetNowCount();
		
		//弾発射フラグを立てる
		if(tamaf[tamacount] == 0)
		{
			tamaf[tamacount] = 1;
			tamaX[tamacount] = x;
			tamaY[tamacount] = y;
		}
		//弾をカウントする(5回までカウントしたら0に戻す)
		if(tamacount > 4)
		{
			tamacount = 0;
		}
		else
		{
			tamacount = tamacount + 1;
		}
		tamatime1 = GetNowCount();
		tamatime2 = GetNowCount();
	}
}


int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
		 LPSTR lpCmdLine, int nCmdShow )
{

// 画面モードの変更
	SetGraphMode( 800 , 600 , 16 ) ;

// ウインドウモードに変更
	ChangeWindowMode( TRUE ) ;

//変数宣言
	int chara;
	int tama;
	
	if( DxLib_Init() == -1 )	// DXライブラリ初期化処理
	{
		 return -1;	// エラーが起きたら直ちに終了
	}
//変数初期化
	y = 300;
	x = 180;
	idouf = 1;
	tamacount = 0;
	for(int n = 0; n <= 5; n++)
	{
		tamaf[n] = 0;
		tamaX[n] = 0;
		tamaY[n] = 0;
	}
// 透過色を変更
	SetTransColor(0,255,0) ;

// 画像の読み込み
	chara = LoadGraph( "image/chara.png" ) ;
	tama = LoadGraph( "image/tama.png" ) ;
	

// グラフィックの描画
	DrawGraph( x , y , chara , true ) ;

	while(1){
		ProcessMessage();
		idou();
		//移動が可能になるまでの時間計測
		if (idoutime2 - idoutime1 >  200 && idouf == 0)
		{
			idouf = 1;
		}
		else
		{
			idoutime2 = GetNowCount();
		}

		//弾が一定時間ごとに進む
		if (tamatime2 - tamatime1 >  200)
		{
			for(int n = 0; n <= 5; n++)
			{
				//弾発射フラグが立っていたら弾のX座標を移動させる
				if(tamaf[n] == 1)
				{
					tamaX[n] = tamaX[n] + 50;
					//弾が画面端までいったら弾発射フラグをなくす
					if(tamaX[n] > 600)
					{
						tamaf[n] = 0;
					}
				}

			}
		}
		else
		{
			tamatime2 = GetNowCount();
		}

		
		//画面を初期化
		ClearDrawScreen() ;

		DrawGraph( x , y , chara , true ) ;
		
		//弾発射フラグが立っていたら画面に表示させる
		for(int k = 0; k <=5; k++)
		{
			if(tamaf[k] == 1)
			{
				DrawGraph( tamaX[k] , tamaY[k] , tama , true ) ;

			}
		}
	}

	DxLib_End() ;		// DXライブラリ使用の終了処理

	return 0 ;		// ソフトの終了
}


引用返信 編集キー/
■52710 / inTopicNo.2)  Re[1]: ロック○ンエグ○みたいなものがつくりたい
□投稿者/ επιστημη (2545回)-(2010/08/23(Mon) 01:32:30)
επιστημη さんの Web サイト
> なぜかBボタンを長押ししないと弾が描写されないんですよ。

//弾発射フラグを立てる
の直後にbreakpointを仕込み、Bボタン押したときにbreakpointに引っかかることを確認。
そこからstep-traceで一行ずつ実行し、弾発射コードに到達するかを検証。

> そしてデバッグをしても原因が分からないんですよ。

デバッグの仕方が下手なだけちゃいます?

引用返信 編集キー/
■52711 / inTopicNo.3)  Re[2]: ロック○ンエグ○みたいなものがつくりたい
□投稿者/ 甕星 (17回)-(2010/08/23(Mon) 08:01:21)
プログラムを見る限りでは、最悪の場合は200ms以上押し続けないと反応しないように作られているけど、作った通りに動いていると言う話ではなくて?

それとも2〜3秒長押ししないと反応しないと言う話?
引用返信 編集キー/
■52736 / inTopicNo.4)  Re[3]: ロック○ンエグ○みたいなものがつくりたい
□投稿者/ チョコ助 (2回)-(2010/08/23(Mon) 19:33:24)
επιστημηさん、甕星さん回答ありがとうございます。
すいません、自分のミスでした。なんとか解決しました。弾の座標移動のときタイムのカウントをリセットするのを忘れていました。
こういうのはなかなか自分では見つからないんですよね。デバッグの仕方が下手なのも原因ですがね。本当にすいませんでした。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -