ページ 1 / 1
無題
Posted: 2009年11月06日(金) 01:13
by 初心者
C言語をはじめて間もない者です。
行き詰ったので助けていただきたく投稿します。
ゲームプログラミングの館の方で”画像を表示する”のステップより…。
自分で作った画像(PNG)をウィンドウに表示させようとしたら映されませんでした。
その後、うまくできなかった人用に書かれてあったもう一つのプログラムで挑戦したところ
今度はうまく映してくれました。
(練習用にあった画像は最初のプログラムでも映すことができました。)
プログラムを書いていく身、今のうちにひとつ目のプログラムで映せなかった原因を解いておきたい次第です。
お手数ですが力を貸していただけないでしょうか。
よろしくお願いします。
Re:無題
Posted: 2009年11月06日(金) 03:17
by 寺
自分がプログラムを答えていい身分の人間かはわからんが、DxLibで
自分も過去に経験した例から可能性を上げてみると、
LoadGraphScreenではなくDrawGraphのようにメモリに読み込む必要がある関数ではないか?
この場合LoadGraph等画像をメモリに読み込む必要がある。
拡張子を間違ってないか?
.bmp .png etc
visual studioでF7などでビルドその後実行ファイル(.exe)を起動したとき場合、画像への相対パスが誤っていないか?
この場合に限らず相対パスが正しいかどうか?
裏画面への描写になっていないか?
表画面への描写またはScreenFilpの使用。
自分が経験したのはこんなとこだろうか…
正直自分も初心者なんで的を得た答えになっているかはわからんが…
質問の内容を見る限りそんなに長いソースでもなさそうなんで、実際にソースコードをあげてみてはどうか…
Re:無題
Posted: 2009年11月06日(金) 03:25
by kazuoni
初めての投稿でしょうか?
「初心者」「匿名」「通りすがり」などはいろいろな方が使用されています。(かぶっている)
今後も質問するかもしれないならば、違う名前にしたほうが、
以後、質問しやすくなるかと思います。
今回の質問の件ですが、様々な理由が考えられます。
・記述ミス(ファイル名、描写の仕方等)
・画像の保存先を間違えていた。
・画像の描写はしているが、その画像の上に、さらに画像を書いてしまっていて見えない
など。
二つのコードorプロジェクトごとUPすれば、
よりよい回答が得られるかと思いますよ^^
Re:無題
Posted: 2009年11月06日(金) 03:25
by kazuoni
ごめんなさい。。内容がもろかぶりでしたorz
Re:無題
Posted: 2009年11月06日(金) 08:07
by スタートメニュー
名前は(初心者)改め(スタートメニュー)
寺さん
ご返事ありがとうございます。
引っかかったことは(LoadGraph等画像をメモリに読み込む必要)というところでした。
メモリに読み込ませるには単にビルドするという事ではないのでしょうか?
load.ccpは以下の通りです。
#include "../include/GV.h"
extern int img_ch[1][12];
void load(){
LoadDivGraph( "../dat/img/char/1.png" , 12 , 4 , 3 , 73 , 73 , img_ch[1] ) ;
}
main.ccpが以下の通りです。
#define GLOBAL_INSTANCE
#include "../include/GV.h"
//現在のキー入力処理を行う
extern int GetHitKeyStateAll_2();
//受け取ったキー番号の現在の入力状態を返す
extern int CheckStateKey(unsigned char Handle);
//データのロード
extern void load();
//描画メイン
extern void graph_main();
int img_ch[1][12]; //キャラクタ画像9枚分 X2(変身用)
ch_t ch; //キャラクタデータ宣言
//ループで必ず行う3大処理
int ProcessLoop(){
if(ProcessMessage()!=0)return -1;//プロセス処理がエラーなら-1を返す
if(ClearDrawScreen()!=0)return -1;//画面クリア処理がエラーなら-1を返す
GetHitKeyStateAll_2();//現在のキー入力処理を行う
return 0;
}
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow){
ChangeWindowMode(TRUE);//ウィンドウモード
if(DxLib_Init() == -1 || SetDrawScreen( DX_SCREEN_BACK )!=0) return -1;//初期化と裏画面化
load();//データロード
while(ProcessLoop()==0){//メインループ
graph_main();//描画メイン
if(CheckStateKey(KEY_INPUT_ESCAPE)==1)break;//エスケープが入力されたらブレイク
ScreenFlip();//裏画面反映
}
DxLib_End();//DXライブラリ終了処理
return 0;
}
後はgraph.ccpが以下の通りです。
#include "../include/GV.h"
extern ch_t ch;
extern int img_ch[1][12];
void graph_ch(){
DrawRotaGraphF(ch.x,ch.y,1.0f,0.0f,img_ch[1][ch.img],TRUE);
}
void graph_main(){
graph_ch();
}
こんな感じになっています。
尚、これは龍神録プログラミングの4章までを立てて、charフォルダ内に1.pngを作って実行させようとしているところです。
kazuoni
ご返事ありがとうございました。
上部プログラムを0.pngに戻すと龍神録プレイヤーが映ります。
1.pngを作り上部プログラムを1.pngに書き直すと表示されません。
困っております…。
名前は初心者改め(スタートメニュー)にします。
Re:無題
Posted: 2009年11月06日(金) 12:50
by Mikan
んー2点ほど・・・
1.
>上部プログラムを0.pngに戻すと龍神録プレイヤーが映ります。
ファイルの場所を0.pngと同じところに保存していますか?
2.
作成されたpngファイルは、ダブルクリックすると見ることができますでしょうか?
見ることができなければ、pngファイルじゃない可能性があります。
Re:無題
Posted: 2009年11月06日(金) 19:41
by 寺
プログラムの問題じゃなくて、画像ファイルのほうの問題かな?
サイズがあってないとか…
自分もよくSAI等でデジ絵を描いてて出来上がった後、リサイズ忘れてpixivにはっちゃったりとかした経験があるんで…
あとは1.pngの1が全角になっているとか…
Re:無題
Posted: 2009年11月06日(金) 22:06
by ひよこ
int img_ch[1][12];で
LoadDivGraph( "../dat/img/char/1.png" , 12 , 4 , 3 , 73 , 73 , img_ch[1] ) ;
これはだめです。img_ch[0]にしましょう。これだと、配列の外にアクセスしていると思います。
Re:無題
Posted: 2009年11月07日(土) 01:32
by スタートメニュー
Mikanさん
ご返事ありがとうございます。
1について
はい。0.pngと同じところ(charフォルダに)いれてます。
2について
ダブルクリックするとWindows画像とFAXビューアウィンドウに表示されます。
寺さん
ご返事ありがとうございます。
大きさは0.pngと同じ292×219となっております。
またプログラム上全角にはなってませんでした。
ひよこさん
ご返事ありがとうございます。
LoadDivGraph( "../dat/img/char/1.png" , 12 , 4 , 3 , 73 , 73 , img_ch[1] ) ;
のところだけ変えても表示されませんでした。
もしかして全てのimg_ch[1]のところでしょうか?
ご意見よろしくお願いいたします。
Re:無題
Posted: 2009年11月07日(土) 16:26
by Akira
void graph_ch(){
DrawRotaGraphF(ch.x,ch.y,1.0f,0.0f,img_ch[1][ch.img],TRUE);
}
のimg_ch[1][ch.img]をimg_ch[0][ch.img]に変更したらいいかと思います。
Re:無題
Posted: 2009年11月07日(土) 17:23
by スタートメニュー
Akiraさん
ご返事ありがとうございます。
変更してみましたが映りませんでした。
ここまで映らないと画像に疑惑感が出てきました。
そういえば、寺さんの「pixivにはる」とはどういうことでしょうか。教えてください。
龍神録のcharフォルダにもともと入っているball.pngなどに書き換えると、
そちらはちゃんと映し出されるのでやはり自分の描いた画像に何らかがあると思うのです。
(自分はSAIを使用)
皆さんのご意見お待ちしております。
Re:無題
Posted: 2009年11月07日(土) 17:30
by スタートメニュー
pixivは調べました。
一つ疑問に思うんですが、
SAIで292×219(龍神録の0.pngの大きさと同じ)で新規作成したらリサイズって必要ないですよね?
Re:無題
Posted: 2009年11月07日(土) 18:10
by Akira
適当にペイントソフトで292*219の画像を作成して、charフォルダに同じように1.pngという名前を作成してテストしてみました。
1.pngには単に画面を埋め尽くす四角形を描いただけですが、テスト結果からみル限り、ウィンドウの左上に1.pngの左上周辺が描かれていました。
尚、同じように龍神録プログラミング4章の内容を利用して、修正したのはload.cppのLoadDivGraph関数の画像リンク先を0.pngから1.pngに変更した程度です。その他は一切変更していません。
参考になるかは分かりませんが、適当な画像を作成して改めてテストしてみてはいかがでしょうか。
Re:無題
Posted: 2009年11月08日(日) 01:20
by スタートメニュー
Akiraさん
ご返事+試行までしていただきありがとうございます。
指示通りにペイントで作って実行しましたが映りませんでした。
0.pngは映るのに1.pngに変えたとたんウィンドウは真っ黒のみです。
一応フォルダ構成を載せます。
gameフォルダ
トdatフォルダ
トDebugフォルダ
トincludeフォルダ
トgame.ncb
トgame.sln
トgame.suo
datフォルダ
トcsvフォルダ
トfontフォルダ
トimgフォルダ
トmusicフォルダ
トseフォルダ
Debugフォルダ
トLog.txt
トgame.exe
トgame.ilk
トgame.pdb
include
トDX関連と思われる19項目
ご意見お待ちしております。
Re:無題
Posted: 2009年11月08日(日) 18:46
by Akira
No:が異なるかもしれませんが、Akiraです。
手間ですが、SAIで0.pngを読み込み、何もしないで別の名前(今回の場合でしたら1.pngでしょうか)で保存。その画像を読み込ませると映るかどうか、テストしてみてください。映るようでしたら画像データには問題はないと思います。
問題がないことを確認したら、1.pngに描かれているキャラクタに高さ・幅ともに被せるように、自作の画像を切り取って貼り付けするなりしてみてください。位置を変更してはいけません。画像データの読み込みに成功していても、何もない場所を映している可能性がありますから。位置を変更しなければ0.pngの一番左上のキャラクタの、右下に当たる部分が映る筈です。
とりあえず、以上の手順を試して見てはいかがでしょうか。
Re:無題
Posted: 2009年11月08日(日) 19:56
by スタートメニュー
Akiraさん
ご返事ありがとうございます。
自分はとんだ勘違いをしておりました。
私はVisual C++ 2008を使っております。
まだ始めたばかりの自分は"ビルド"した後の開くウィンドウをてっきり実行画面と思っておりました。
申し訳ありません。
ビルドした後は実行ファイルから確認するべきでした。
game.exeファイルから実行したらしっかり映っていました。
kazuoniさん
Mikanさん
寺さん
ひよこさん
Akiraさん
上記皆様、自分のケアレスミスによってご迷惑をおかけして
本当にごめんなさい。
そしてご意見ありがとうございました。