選択画面

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

選択画面

#1

投稿記事 by yux » 15年前

今あるゲームを製作中で、タイトル(選択画面)を作っているところです。
しかし、画像を表示しようとすると、GAMESTARTの画像しか出てこなく、矢印とExitが出てきません。
初心者なのでよく分かりません。
どうすればいいでしょうか m(__)m
因みに、ソースは、メイン関数にインクルードして、title関数を使っています。

OS:WindowsXP HomeEdition
VisualC++2008

ソース---------------------------------------------------------

#include "DxLib.h"
#include "../head/global.h"
#include "../head/struct.h"

void title(void){

title_t title;

title.arrow_img = LoadGraph("dat/img/title/arrow.png");
title.manu_img[0] = LoadGraph("dat/img/title/GAMESTART.png");
title.manu_img[1] = LoadGraph("dat/img/title/Exit.png");


title.manu_x[0] = 225;
title.manu_y[0] = 100;

title.manu_x[1] = 225;
title.manu_y[1] = 120;

title.arrow_x = 210;
title.arrow_y = 100;


DrawGraph(title.arrow_x ,title.arrow_y ,title.arrow_img,TRUE);
DrawGraph(title.manu_x[0],title.manu_y[0],title.manu_img[0],TRUE); //配列番号0は、GAMESTART
DrawGraph(title.manu_x[1],title.manu_y[1],title.manu_img[1],TRUE); //配列番号1は、Exit


if(Key[KEY_INPUT_DOWN] == 1)
title.arrow_y += 20;


if(Key[KEY_INPUT_UP] == 1)
title.arrow_y -= 20;

}

よろしくお願いします。 画像

シエル

Re:選択画面

#2

投稿記事 by シエル » 15年前

ではゲームスタートの画像だけコメントアウトして描画しない状態にすると、
何が描画されますか?

yux

Re:選択画面

#3

投稿記事 by yux » 15年前

シエルさんありがとうございます。m(__)m

ゲームスタートのところだけコメントアウトすると、
何も描画されませんでした。

Ma

Re:選択画面

#4

投稿記事 by Ma » 15年前

(title_t 内の img がポインタだとしたら)manu.img は、配列のようですが、title の初期化時に配列も初期化(領域の確保を)してますか?
画像は指定されたパスに存在しますか?
ブレイクポイントをいれて、値に異常がないかチェックしましたか?


あと、どうでもいいですが、メニューは英語で menu です。

シエル

Re:選択画面

#5

投稿記事 by シエル » 15年前

この関数を実行するたびに、画像を読み込んでしまっているので、
画像はゲーム開始時に読み込んでハンドルを保存しておき、
描画する方が効率がいいですよ。

でも、それが原因ではなさそうですので、
一度画像を違う画像に変更してみてどうなるか教えてください。

あとメインループのコードも貼ってもらえると、原因が分かるかもしれません。

yux

Re:選択画面

#6

投稿記事 by yux » 15年前

Maさん、シエルさんありがとうございます!
とりあえずパスは正確でした。
それと、manu→menuに訂正しました。
後、別の画像に変えると、title.menu_img[0]が表示されます。

因みに、title.arrow_yの下で
title.menu_img[0]
title.menu_img[1]
title.arrow_img
を宣言すると、
title.arrow_imgが表示されました。

それにメインループのソースも貼ります。

メインループのソースです---------------------------------------

#include "DxLib.h"
#include "../head/struct.h"
#include "../head/function.h"
#include "../head/define.h"

#define GLOBAL_INSTANCE
#include "../head/global.h"




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

int ben[16];

ch_t ch;
back_t bc;
music_t ms;


bc.x = GetClipMinX;
bc.y = GetClipMinY;

ch.x = 320;
ch.y = 320;
ch.walking_flag = 0;
ch.muki = 3;



SetMainWindowText("Ben10");



if( ChangeWindowMode(TRUE) != DX_CHANGESCREEN_OK || DxLib_Init() == -1 ) return -1;


SetDrawScreen( DX_SCREEN_BACK ) ;



LoadDivGraph("dat/img/ben.png",16,4,4,32,32,ben);

ms.music = LoadSoundMem("dat/bgm/lastboss_01.mp3");
bc.img = LoadGraph("dat/img/bk_ground.png");


PlaySoundMem(ms.music,DX_PLAYTYPE_LOOP);



while(!ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll( Key ) && !Key[KEY_INPUT_ESCAPE]){

title();

/*
if(ch.x%32==0 && ch.y%32==0){
ch.walking_flag=1;
if ( Key[ KEY_INPUT_UP ] == 1 )
ch.muki=0;
else if( Key[ KEY_INPUT_LEFT ] == 1 )
ch.muki=1;
else if( Key[ KEY_INPUT_DOWN ] == 1 )
ch.muki=2;
else if( Key[ KEY_INPUT_RIGHT] == 1 )
ch.muki=3;
else
ch.walking_flag=0;

if (ch.walking_flag == 1)
if(can_or_cannot(ch.x,ch.y,ch.muki)==1)//行き先が歩けないなら
ch.walking_flag=0; //歩かないフラグを立てる。

}
if(ch.walking_flag==1){
if (ch.muki==0) {
ch.y--;
bc.y++;
}
else if(ch.muki==1) {
ch.x--;
bc.x++;
}
else if(ch.muki==2) {
ch.y++;
bc.y--;
}
else if(ch.muki==3) {
ch.x++;
bc.x--;
}
}

ch.img = ben[(ch.x % 32 + ch.y % 32)/8 + ch.muki * 4];


DrawGraph( bc.x , bc.y ,bc.img ,FALSE);
DrawGraph( GetCenterX, GetCenterY, ch.img,TRUE);

*/
ScreenFlip();

}

DxLib_End();
return 0;
}

シエル

Re:選択画面

#7

投稿記事 by シエル » 15年前

title_tの構造体の宣言部分のコードも貼っていただけますか?(struct.hの中のやつ)

あと、DrawGraphのあたりにブレークポイントを設定後、デバックして、
title.arrow_img
title.manu_img[0]
title.manu_img[1]

この三つ中の値に何が入っているか教えてください。

yux

Re:選択画面

#8

投稿記事 by yux » 15年前

返信遅れました(;´Д`)

title.arrow_img が、 -858993460で、
title.menu_img[0]が、-858993460で、
title.menu_img[1]が、ありませんでした。

シエル

Re:選択画面

#9

投稿記事 by シエル » 15年前

でたらめな値が入っているということは、やっぱり画像がうまく読み込めてませんね。
↓のように「dat」の前に「./」を入れて、やってみて下さい。

LoadGraph("./dat/img/title/arrow.png");
LoadGraph("./dat/img/title/GAMESTART.png");
LoadGraph("./dat/img/title/Exit.png");

yux

Re:選択画面

#10

投稿記事 by yux » 15年前

その通りにやってみましたが、
前と変わりませんでした orz

シエル

Re:選択画面

#11

投稿記事 by シエル » 15年前

datというフォルダはプロジェクトファイルの直下にありますか?
それともexeファイルの直下ですか?
え~とにかくdatというフォルダの場所を分かるように教えてください。

あと、本当にファイルパスは間違ってないですよね?

MNS

Re:選択画面

#12

投稿記事 by MNS » 15年前

読み込みに失敗した場合のハンドルは-1になりますので、
それ以外であれば読み込みは成功しているはずです。
しかし、arrow_imgとmenu_img[0]が同値であるのはおかしいですね。
title_t構造体の内容を公開してください。何か分かるかも知れません。

yux

Re:選択画面

#13

投稿記事 by yux » 15年前

datファイルはBen10というファイルの中に、

dat, Debug, head, sourceや
Ben10.ncb, Ben10.vcproj, Ben10.sln,
Ben10.vcproj.FM-4735B71DD3F7.user.user,
Log.txtが入っています

ちゃんと直下に入っていていました。
ファイルパスも間違っていないと思います。

シエル

Re:選択画面

#14

投稿記事 by シエル » 15年前

失敗した場合はー1になるんですね。。。すいませんでした。勘違いです。

yux

Re:選択画面

#15

投稿記事 by yux » 15年前

title_tの内容を貼り忘れました(^^;)

title_tの内容です----------------


typedef struct{
int img ,x, y;
int menu_img[1], menu_x[1],menu_y[1];
int arrow_img ,arrow_x ,arrow_y;
}title_t;

MNS

Re:選択画面

#16

投稿記事 by MNS » 15年前

>int menu_img[1], menu_x[1],menu_y[1];
これでは、要素が1つの配列になってしまいます。
menu_imgを要素が2つの配列、Xさんがmenu_img[0], menu_img[1]として使いたいならば、
int menu_img[2]と宣言する必要があります。同x,yについても同様です。

以上をとりあえず訂正して実行してみて、結果を教えてください。

yux

Re:選択画面

#17

投稿記事 by yux » 15年前

宣言を [1]→[2] に変えたら、思い通りにいきました(^-^)b

配列を勉強したほうがいいですね Φ(。。;)

シエルさん、MNSさん、ありがとうございました!!

閉鎖

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