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 ; // ソフトの終了
}
GetNowCountを使ったときのエラー
GetNowCountを使ったときのエラー
Re: GetNowCountを使ったときのエラー
原因は3行目です。関数の外で関数の呼び出しをすることはできません。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: GetNowCountを使ったときのエラー
C言語系は関数の外には基本的に定義や宣言を書くことしか出来ません。keisuking さんが書きました:ありがとうございます。
いろいろ試してみましたが、エラー解除できませんでした。どうすればエラー解除できますか?
g->Convert3Dto2D(&c, GetPosition());
は明らかに実行命令ですので、どこかの関数の中に書く必要があります。
詳細については、C言語の入門書で基礎を勉強して頂きたいです。
あと、DXライブラリのプログラム的にあまり良くない書き方がされていると思われます。
基本的な書き方は、こちらを参考になさってください。
「新・C言語 ~ゲームプログラミングの館~ [DXライブラリ]」
http://dixq.net/g/
1.9 ゲームプログラムの骨格の完成 をベースにされると良いと思います。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: GetNowCountを使ったときのエラー
基礎的な部分はわかります。
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時間悩んでます。。。。
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を使ったときのエラー
>基礎的な部分はわかります。
関数外に命令を書いてはいけないと言うのは、C/C++の基礎の基礎だと思いますが。
この場合は
inline void Touchable::move()//moveについて
と言うメンバ関数内にありますよね?
最初のプログラムでは
VECTOR2D c;
g->Convert3Dto2D(&c, GetPosition());
は関数外に爪弾きになっています。
なので関数内に入れれば動くと思いますが、そもそも外に出した意図がわからないのです。
読みづらいインデントも直しておきました。
関数外に命令を書いてはいけないと言うのは、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(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: GetNowCountを使ったときのエラー
良い指摘ですね。
こういうのがバグの原因とかにも成るうるのでコーディングするときは一貫性を持ってコーディングした方がいいと思いますよ。
自分ならこう書きます。
46行目が怪しい、どっちなのかな
► スポイラーを表示
最後に編集したユーザー AKIЯA on 2012年11月02日(金) 05:51 [ 編集 1 回目 ]
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: GetNowCountを使ったときのエラー
45行目にsrand()がある事自体が、あまり良くないと思います。
このプログラムって描画らしきものが見当たらないんですよね。
あとScreenFlip()もないのでちゃんと制御できているか不安なコードです。
コメントアウトしてある//do{//}while(count == 1);も危険な香りですが。
Convert3Dto2Dと言うのも何故必要なのか分かんないんですよ。
2Dのゲームに見えるんですが実は3Dなんでしょうか。
このプログラムって描画らしきものが見当たらないんですよね。
あとScreenFlip()もないのでちゃんと制御できているか不安なコードです。
コメントアウトしてある//do{//}while(count == 1);も危険な香りですが。
Convert3Dto2Dと言うのも何故必要なのか分かんないんですよ。
2Dのゲームに見えるんですが実は3Dなんでしょうか。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。