ページ 1 / 1
GetNowCountを使ったときのエラー
Posted: 2012年11月01日(木) 14:46
by keisuking
コード:
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行目にエラー発生原因を教えてください。また改善策もお願いします。
Re: GetNowCountを使ったときのエラー
Posted: 2012年11月01日(木) 14:59
by h2so5
原因は3行目です。関数の外で関数の呼び出しをすることはできません。
Re: GetNowCountを使ったときのエラー
Posted: 2012年11月01日(木) 16:05
by keisuking
ありがとうございます。
いろいろ試してみましたが、エラー解除できませんでした。どうすればエラー解除できますか?
Re: GetNowCountを使ったときのエラー
Posted: 2012年11月01日(木) 16:34
by softya(ソフト屋)
keisuking さんが書きました:ありがとうございます。
いろいろ試してみましたが、エラー解除できませんでした。どうすればエラー解除できますか?
C言語系は関数の外には基本的に定義や宣言を書くことしか出来ません。
g->Convert3Dto2D(&c, GetPosition());
は明らかに実行命令ですので、どこかの関数の中に書く必要があります。
詳細については、C言語の入門書で基礎を勉強して頂きたいです。
あと、DXライブラリのプログラム的にあまり良くない書き方がされていると思われます。
基本的な書き方は、こちらを参考になさってください。
「新・C言語 ~ゲームプログラミングの館~ [DXライブラリ]」
http://dixq.net/g/
1.9 ゲームプログラムの骨格の完成 をベースにされると良いと思います。
Re: GetNowCountを使ったときのエラー
Posted: 2012年11月01日(木) 18:05
by keisuking
基礎的な部分はわかります。
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時間悩んでます。。。。
Re: GetNowCountを使ったときのエラー
Posted: 2012年11月01日(木) 18:13
by softya(ソフト屋)
>基礎的な部分はわかります。
関数外に命令を書いてはいけないと言うのは、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 ; // ソフトの終了
}
Re: GetNowCountを使ったときのエラー
Posted: 2012年11月01日(木) 18:31
by h2so5
基礎が分かっているというなら、
コード:
if ( c.x < 0 || c.x > sizex );
vx *= -1.0f;//-をかけることによて反射
と
コード:
if ( c.x < 0 || c.x > sizex )
vx *= -1.0f;//-をかけることによて反射
の違いについて説明してください。
Re: GetNowCountを使ったときのエラー
Posted: 2012年11月01日(木) 18:45
by AKIЯA
h2so5 さんが書きました:基礎が分かっているというなら、
コード:
if ( c.x < 0 || c.x > sizex );
vx *= -1.0f;//-をかけることによて反射
と
コード:
if ( c.x < 0 || c.x > sizex )
vx *= -1.0f;//-をかけることによて反射
の違いについて説明してください。
良い指摘ですね。
こういうのがバグの原因とかにも成るうるのでコーディングするときは一貫性を持ってコーディングした方がいいと思いますよ。
自分ならこう書きます。
46行目が怪しい、どっちなのかな
► スポイラーを表示
コード:
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )//getnowcountの定義
{
int StartTime;
VECTOR2D c;
if( DxLib_Init() == -1 ); // DXライブラリ初期化処理
{
return -1; // エラーが起きたら直ちに終了
}
// 現在経過時間を得る
StartTime = GetNowCount() ;
// 計測開始から30秒が過ぎるまでループ
while( GetNowCount() - StartTime < 30000 );
{
if( ProcessMessage() == -1 ) {
break ; // エラーが起きたらループから抜ける
}
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 ; // ソフトの終了
}
Re: GetNowCountを使ったときのエラー
Posted: 2012年11月01日(木) 19:25
by softya(ソフト屋)
45行目にsrand()がある事自体が、あまり良くないと思います。
このプログラムって描画らしきものが見当たらないんですよね。
あとScreenFlip()もないのでちゃんと制御できているか不安なコードです。
コメントアウトしてある//do{//}while(count == 1);も危険な香りですが。
Convert3Dto2Dと言うのも何故必要なのか分かんないんですよ。
2Dのゲームに見えるんですが実は3Dなんでしょうか。