GetNowCountを使ったときのエラー

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

GetNowCountを使ったときのエラー

#1

投稿記事 by keisuking » 13年前

コード:

	VECTOR2D c;

	g->Convert3Dto2D(&c, GetPosition());
	
	int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
		 LPSTR lpCmdLine, int nCmdShow )//getnowcountの定義
	{//←この部分にエラー発生;が抜けているとのこと、前の部分に;をつけると今度は下の部分に定義とのこと原因を教えてください。
	int StartTime;

	if( DxLib_Init() == -1 );	// DXライブラリ初期化処理
	{
		 return -1;	// エラーが起きたら直ちに終了
	}

	// 現在経過時間を得る
	StartTime = GetNowCount() ;
	// 計測開始から30秒が過ぎるまでループ
	while( GetNowCount() - StartTime < 30000 );
	{
		if( ProcessMessage() == -1 )
		{
			break ;	// エラーが起きたらループから抜ける
		}
	
		
		
	//枠の反射
	if (c.x < 0 || c.x > sizex);	
		vx *= -1.0f;//-をかけることによて反射
	if (c.y > sizey-50 && vy<0);
	    vy *= -1.0f;//-をかけることによて反射
    if (c.y >= sizey)SetPosition((rand()%10-5)*1.0f, 9.0f, 0.0f,GL_ABSOLUTE);
		int count;
		//do{
			
	//自由落下または停止
	if (c.y > (sizey-50) && vy<0.03f) 
		vy = 0;
	else
		srand((unsigned int)time(NULL));
		vy -= (rand()%30+1)*0.1f;
		//}while(count == 1);
		
	//空気抵抗
	vx *= 0.8f;
	vy *= 0.8f;
	
	

	SetPosition(0.0f ,vy, 0.0f, GL_RELATIVE);
	}
	DxLib_End() ;		// DXライブラリ使用の終了処理

	return 0 ;		// ソフトの終了
  }
pgmの5行目にエラー発生原因を教えてください。また改善策もお願いします。

アバター
h2so5
副管理人
記事: 2212
登録日時: 14年前
住所: 東京
連絡を取る:

Re: GetNowCountを使ったときのエラー

#2

投稿記事 by h2so5 » 13年前

原因は3行目です。関数の外で関数の呼び出しをすることはできません。

keisuking

Re: GetNowCountを使ったときのエラー

#3

投稿記事 by keisuking » 13年前

ありがとうございます。
いろいろ試してみましたが、エラー解除できませんでした。どうすればエラー解除できますか?

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: GetNowCountを使ったときのエラー

#4

投稿記事 by softya(ソフト屋) » 13年前

keisuking さんが書きました:ありがとうございます。
いろいろ試してみましたが、エラー解除できませんでした。どうすればエラー解除できますか?
C言語系は関数の外には基本的に定義や宣言を書くことしか出来ません。
g->Convert3Dto2D(&c, GetPosition());
は明らかに実行命令ですので、どこかの関数の中に書く必要があります。
詳細については、C言語の入門書で基礎を勉強して頂きたいです。

あと、DXライブラリのプログラム的にあまり良くない書き方がされていると思われます。
基本的な書き方は、こちらを参考になさってください。
「新・C言語 ~ゲームプログラミングの館~ [DXライブラリ]」
http://dixq.net/g/

1.9 ゲームプログラムの骨格の完成 をベースにされると良いと思います。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

keisuking

Re: GetNowCountを使ったときのエラー

#5

投稿記事 by keisuking » 13年前

基礎的な部分はわかります。
inline void Touchable::move()//moveについて
{
VECTOR2D c;

g->Convert3Dto2D(&c, GetPosition());





//枠の反射
if (c.x < 0 || c.x > sizex);
vx *= -1.0f;//-をかけることによて反射
if (c.y > sizey-50 && vy<0);
vy *= -1.0f;//-をかけることによて反射
if (c.y >= sizey)SetPosition((rand()%10-5)*1.0f, 9.0f, 0.0f,GL_ABSOLUTE);
int count;
//do{

//自由落下または停止
if (c.y > (sizey-50) && vy<0.03f)
vy = 0;
else
srand((unsigned int)time(NULL));
vy -= (rand()%30+1)*0.1f;
//}while(count == 1);

//空気抵抗
vx *= 0.8f;
vy *= 0.8f;




}
これだとエラーなく実行できるのですが・・・
どのように書けばいいのか教えてくだされば理解も早いと思うのでお願いします。
このpgm(ゲーム)
は制限時間を決めてボールをよける、ヨケゲーにしたいのですが・・・
projectはmicrosoft visual c++ 2010でDxLibにも対応してると思うのですが・・・
これを閲覧してくださるみなさまのためにもなると思うので、お願いします。かれこれ5時間悩んでます。。。。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: GetNowCountを使ったときのエラー

#6

投稿記事 by softya(ソフト屋) » 13年前

>基礎的な部分はわかります。

関数外に命令を書いてはいけないと言うのは、C/C++の基礎の基礎だと思いますが。

この場合は
inline void Touchable::move()//moveについて
と言うメンバ関数内にありますよね?

最初のプログラムでは
VECTOR2D c;
g->Convert3Dto2D(&c, GetPosition());
は関数外に爪弾きになっています。

なので関数内に入れれば動くと思いますが、そもそも外に出した意図がわからないのです。
読みづらいインデントも直しておきました。

コード:


int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
                    LPSTR lpCmdLine, int nCmdShow )//getnowcountの定義
{
	//←この部分にエラー発生;が抜けているとのこと、前の部分に;をつけると今度は下の部分に定義とのこと原因を教えてください。
	int StartTime;

	if( DxLib_Init() == -1 );   // DXライブラリ初期化処理
	{
		return -1; // エラーが起きたら直ちに終了
	}

	// 現在経過時間を得る
	StartTime = GetNowCount() ;
	// 計測開始から30秒が過ぎるまでループ
	while( GetNowCount() - StartTime < 30000 );
	{
		if( ProcessMessage() == -1 ) {
			break ; // エラーが起きたらループから抜ける
		}


		VECTOR2D c;

		g->Convert3Dto2D( &c, GetPosition() );


		//枠の反射
		if ( c.x < 0 || c.x > sizex );
		vx *= -1.0f;//-をかけることによて反射
		if ( c.y > sizey - 50 && vy < 0 );
		vy *= -1.0f;//-をかけることによて反射
		if ( c.y >= sizey )SetPosition( ( rand() % 10 - 5 ) * 1.0f, 9.0f, 0.0f, GL_ABSOLUTE );
		int count;
		//do{

		//自由落下または停止
		if ( c.y > ( sizey - 50 ) && vy < 0.03f )
			vy = 0;
		else
			srand( ( unsigned int )time( NULL ) );
		vy -= ( rand() % 30 + 1 ) * 0.1f;
		//}while(count == 1);

		//空気抵抗
		vx *= 0.8f;
		vy *= 0.8f;


		SetPosition( 0.0f , vy, 0.0f, GL_RELATIVE );
	}
	DxLib_End() ;       // DXライブラリ使用の終了処理

	return 0 ;      // ソフトの終了
}
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

アバター
h2so5
副管理人
記事: 2212
登録日時: 14年前
住所: 東京
連絡を取る:

Re: GetNowCountを使ったときのエラー

#7

投稿記事 by h2so5 » 13年前

基礎が分かっているというなら、

コード:

if ( c.x < 0 || c.x > sizex );
vx *= -1.0f;//-をかけることによて反射

コード:

if ( c.x < 0 || c.x > sizex )
    vx *= -1.0f;//-をかけることによて反射
の違いについて説明してください。

AKIЯA
記事: 58
登録日時: 13年前

Re: GetNowCountを使ったときのエラー

#8

投稿記事 by AKIЯA » 13年前

h2so5 さんが書きました:基礎が分かっているというなら、

コード:

if ( c.x < 0 || c.x > sizex );
vx *= -1.0f;//-をかけることによて反射

コード:

if ( c.x < 0 || c.x > sizex )
    vx *= -1.0f;//-をかけることによて反射
の違いについて説明してください。
良い指摘ですね。
こういうのがバグの原因とかにも成るうるのでコーディングするときは一貫性を持ってコーディングした方がいいと思いますよ。

自分ならこう書きます。
46行目が怪しい、どっちなのかな
► スポイラーを表示
最後に編集したユーザー AKIЯA on 2012年11月02日(金) 05:51 [ 編集 1 回目 ]

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: GetNowCountを使ったときのエラー

#9

投稿記事 by softya(ソフト屋) » 13年前

45行目にsrand()がある事自体が、あまり良くないと思います。
このプログラムって描画らしきものが見当たらないんですよね。
あとScreenFlip()もないのでちゃんと制御できているか不安なコードです。
コメントアウトしてある//do{//}while(count == 1);も危険な香りですが。

Convert3Dto2Dと言うのも何故必要なのか分かんないんですよ。
2Dのゲームに見えるんですが実は3Dなんでしょうか。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

閉鎖

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