ページ 1 / 1
選択画面
Posted: 2010年6月28日(月) 20:12
by yux
今あるゲームを製作中で、タイトル(選択画面)を作っているところです。
しかし、画像を表示しようとすると、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:選択画面
Posted: 2010年6月28日(月) 20:50
by シエル
ではゲームスタートの画像だけコメントアウトして描画しない状態にすると、
何が描画されますか?
Re:選択画面
Posted: 2010年6月28日(月) 22:09
by yux
シエルさんありがとうございます。m(__)m
ゲームスタートのところだけコメントアウトすると、
何も描画されませんでした。
Re:選択画面
Posted: 2010年6月29日(火) 07:32
by Ma
(title_t 内の img がポインタだとしたら)manu.img は、配列のようですが、title の初期化時に配列も初期化(領域の確保を)してますか?
画像は指定されたパスに存在しますか?
ブレイクポイントをいれて、値に異常がないかチェックしましたか?
あと、どうでもいいですが、メニューは英語で menu です。
Re:選択画面
Posted: 2010年6月29日(火) 07:55
by シエル
この関数を実行するたびに、画像を読み込んでしまっているので、
画像はゲーム開始時に読み込んでハンドルを保存しておき、
描画する方が効率がいいですよ。
でも、それが原因ではなさそうですので、
一度画像を違う画像に変更してみてどうなるか教えてください。
あとメインループのコードも貼ってもらえると、原因が分かるかもしれません。
Re:選択画面
Posted: 2010年6月29日(火) 18:35
by yux
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:選択画面
Posted: 2010年6月29日(火) 18:50
by シエル
title_tの構造体の宣言部分のコードも貼っていただけますか?(struct.hの中のやつ)
あと、DrawGraphのあたりにブレークポイントを設定後、デバックして、
title.arrow_img
title.manu_img[0]
title.manu_img[1]
この三つ中の値に何が入っているか教えてください。
Re:選択画面
Posted: 2010年6月30日(水) 21:31
by yux
返信遅れました(;´Д`)
title.arrow_img が、 -858993460で、
title.menu_img[0]が、-858993460で、
title.menu_img[1]が、ありませんでした。
Re:選択画面
Posted: 2010年6月30日(水) 21:58
by シエル
でたらめな値が入っているということは、やっぱり画像がうまく読み込めてませんね。
↓のように「dat」の前に「./」を入れて、やってみて下さい。
LoadGraph("./dat/img/title/arrow.png");
LoadGraph("./dat/img/title/GAMESTART.png");
LoadGraph("./dat/img/title/Exit.png");
Re:選択画面
Posted: 2010年6月30日(水) 22:10
by yux
その通りにやってみましたが、
前と変わりませんでした orz
Re:選択画面
Posted: 2010年6月30日(水) 22:14
by シエル
datというフォルダはプロジェクトファイルの直下にありますか?
それともexeファイルの直下ですか?
え~とにかくdatというフォルダの場所を分かるように教えてください。
あと、本当にファイルパスは間違ってないですよね?
Re:選択画面
Posted: 2010年6月30日(水) 22:20
by MNS
読み込みに失敗した場合のハンドルは-1になりますので、
それ以外であれば読み込みは成功しているはずです。
しかし、arrow_imgとmenu_img[0]が同値であるのはおかしいですね。
title_t構造体の内容を公開してください。何か分かるかも知れません。
Re:選択画面
Posted: 2010年6月30日(水) 22:24
by yux
datファイルはBen10というファイルの中に、
dat, Debug, head, sourceや
Ben10.ncb, Ben10.vcproj, Ben10.sln,
Ben10.vcproj.FM-4735B71DD3F7.user.user,
Log.txtが入っています
ちゃんと直下に入っていていました。
ファイルパスも間違っていないと思います。
Re:選択画面
Posted: 2010年6月30日(水) 22:25
by シエル
失敗した場合はー1になるんですね。。。すいませんでした。勘違いです。
Re:選択画面
Posted: 2010年6月30日(水) 22:40
by yux
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;
Re:選択画面
Posted: 2010年6月30日(水) 22:45
by MNS
>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についても同様です。
以上をとりあえず訂正して実行してみて、結果を教えてください。
Re:選択画面
Posted: 2010年6月30日(水) 22:58
by yux
宣言を [1]→[2] に変えたら、思い通りにいきました(^-^)b
配列を勉強したほうがいいですね Φ(。。;)
シエルさん、MNSさん、ありがとうございました!!