C言語~ゲームプログラミングの館~について

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

C言語~ゲームプログラミングの館~について

#1

投稿記事 by ガジェット » 15年前

いつもお世話になっております。今、C言語について勉強中です。困ったことに26節の「シューティング基本。」をサンプル通りにやってみたのですが、エラーメッセージは無いのですが画面が真っ暗なんですが、
どうしたらいいのですか?
OS;WindowsXP SP3
です。どうかご指導お願いします!!

Dixq (管理人)

Re:C言語~ゲームプログラミングの館~について

#2

投稿記事 by Dixq (管理人) » 15年前

多分画像の保存場所がおかしいのではないでしょうか?
画像を使っている他の章のプログラムならうまくいきますか?

まず、1章は済んでいますか?

ガジェット

Re:C言語~ゲームプログラミングの館~について

#3

投稿記事 by ガジェット » 15年前

いえ、キャラクター移動等はちゃんとできるのですが、何故か26節からできなくなってしまいました。
保存位置もしっかりとできているのですが、どうしたらいいのでしょうか?

Dixq (管理人)

Re:C言語~ゲームプログラミングの館~について

#4

投稿記事 by Dixq (管理人) » 15年前

うむむ・・そんなはずは・・。

では


#include "DxLib.h"

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
ChangeWindowMode( TRUE ) ; // ウィンドウモードに変更
if( DxLib_Init() == -1 ) return -1 ; // DXライブラリ初期化処理


SetDrawScreen( DX_SCREEN_BACK ) ; // 描画先を裏画面に設定

int i ;
for( i = 0 ; i < 300 ; i ++ )
{
ClearDrawScreen(); // 裏画面のデータを全て削除
LoadGraphScreen( i, 0, "char.png" , TRUE ) ; //裏画面へ画像を描写
ScreenFlip() ; // 裏画面データを表画面へ反映
}


WaitKey(); // 何かキー入力があるまで待つ
DxLib_End() ; // DXライブラリ使用の終了処理
return 0 ; // ソフトの終了
}



これと



#include "DxLib.h"

struct shot{
int x,y;
int flag;
};

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
ChangeWindowMode( TRUE ) ; // ウインドウモードに変更
if( DxLib_Init() == -1 ) return -1; //DXライブラリ初期化 エラーが起きたら終了

int image[16],i,counter=0; //counter=発射してからのカウントをする変数。
char Key[256];
struct shot tama[10]; //tamaを10個作る。

for(i=0;i<10;i++){ //初期化処理
tama.x=640/2; tama.y=480; //座標代入
tama.flag=0; //飛んでいない事を示すフラグ=0
}

SetDrawScreen( DX_SCREEN_BACK ) ;//描画先を裏画面に設定

LoadDivGraph( "char.png" , 16 , 4 , 4 , 32 , 32 , image ) ;//画像を分割してimage配列に保存

while(1){
ClearDrawScreen(); //裏画面のデータを全て削除
GetHitKeyStateAll( Key ) ; // すべてのキーの状態を得る

if( ProcessMessage() == -1 ) break ; //異常がおきたら終了

if(counter<5) //前にエンターを押してから5カウント未満なら
counter++; //カウントアップ

else if( Key[ KEY_INPUT_RETURN ] == 1 ){//5カウント以上たっていたら
counter=0; //カウンターを戻す
for(i=0;i<10;i++){
if(tama.flag==0){ //発射していない玉を探し、
tama.flag=1; //発射フラグを立てる
break;
}
}
}
for(i=0;i<10;i++){
if(tama.flag==1){ //発射している玉なら
tama.y-=8; //座標を8減らす
DrawGraph( tama.x , tama.y , image[1] , TRUE );//玉を描画
if(tama.y < -32){ //もし画面外まで来たら
tama[i].y=480; //初期値に戻し、
tama[i].flag=0; //発射フラグを戻す
}
}
}

if( Key[ KEY_INPUT_ESCAPE ] == 1 ) break;//Escボタンが押されたらブレイク

ScreenFlip() ;//裏画面データを表画面へ反映
}
DxLib_End() ;// DXライブラリ使用の終了処理
return 0 ;// ソフトの終了
}



これ、両方画像が表示されることを確認してみてください。

ガジェット

Re:C言語~ゲームプログラミングの館~について

#5

投稿記事 by ガジェット » 15年前

上のサンプルプログラムでは正常に動くのですが、下のサンプルプログラムは真っ暗な画面が出るだけです。
あと、どちらのサンプルプログラムも、エラーメッセージはありませんでした。
どうしたらいいのですか?

ムンバ

Re:C言語~ゲームプログラミングの館~について

#6

投稿記事 by ムンバ » 15年前

こんばんは。
私も、ガジェットさんと同じ現象が起こります。^^;

OS:Windows7(Pro)
DXライブラリ:Ver 3.00f
VC++2008(たぶんSP1)

Dixq (管理人)

Re:C言語~ゲームプログラミングの館~について

#7

投稿記事 by Dixq (管理人) » 15年前

おかしいなぁ・・こちらでは正常に動きます。
プロジェクトごとアップしてみました。
これなら動くはずです。
これを見ながらちょっと何が違うのか見比べてみてください。
これで表示されないとなるとエンターキーの入力が取得出来ていないとしか思えません・・。

http://dixq.net/zip/StgSample.zip

ブレイクポイントなどを使ってなぜ表示されないのか調べてみてください。

ムンバ

Re:C言語~ゲームプログラミングの館~について

#8

投稿記事 by ムンバ » 15年前

ああっ!?もしかして、エンターキー押して無いとか言う落ち・・・?
でした。
エンターキー押したら出ました。
相変わらず、どじ間抜けでした。失礼します。<(_ _)>

---↓編集・追記---
>相変わらず、どじ間抜けでした。

は、ガジェットさんの事では無く、私の事ですので。^^ 画像

ガジェット

Re:C言語~ゲームプログラミングの館~について

#9

投稿記事 by ガジェット » 15年前

上のプロジェクトをやってみたら正常に動きました。ありがとうございました。
今後もこんなミスがない様にがんばりたいです!!

Dixq (管理人)

Re:C言語~ゲームプログラミングの館~について

#10

投稿記事 by Dixq (管理人) » 15年前

解決したようでよかったです。
・・が、私のプロジェクトはDXライブラリのサンプルフォルダと同じなので、
違いがあるはずがないのですが・・
ガジェットさんの不具合は何だったのでしょうか?

閉鎖

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