Re: LoadDivGraphとアンダースコア ( No.1 ) |
- 名前:管理人 日時:2014/07/20 05:35
私の環境で関数リファレンスにある LoadDivGraph のサンプルプログラムで読み込む画像の
ファイル名を test2.bmp から te_st2.bmp に変更してみましたが、エラー無く読み込むことができました
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
int GHandle[ 10 ] ;
int i ;
ChangeWindowMode( TRUE ) ;
if( DxLib_Init() == -1 ) // DXライブラリ初期化処理
{
return -1; // エラーが起きたら直ちに終了
}
// BMP画像のメモリへの分割読み込み
LoadDivGraph( "test2.bmp" , 10 , 4 , 3 , 48 , 56 , GHandle ) ;
// ロードしたグラフィックのアニメーション
i = 0 ;
// キーが押されるまでループ(キー判定には『CheckHitKeyAll』を使用)
while( CheckHitKeyAll() == 0 )
{
// グラフィックの描画(『DrawGraph』使用)
DrawGraph( 0 , 0 , GHandle[ i ] , FALSE ) ;
// アニメーションパターンナンバーを変更
i ++ ;
if( i == 10 ) i = 0 ;
// 一定時間待つ(『WaitTimer』使用)
WaitTimer( 100 ) ;
// メッセージ処理
if( ProcessMessage() == -1 )
{
break ; // エラーが起きたらループから抜ける
}
}
DxLib_End() ; // DXライブラリ使用の終了処理
return 0 ; // ソフトの終了
}
Saucerさんの環境では test2.bmp のファイル名を te_st2.bmp にリネームして、
上記プログラムの LoadDivGraph で指定するファイル名を "test2.bmp" から
"te_st2.bmp" に変更するとエラーが発生するということでしょうか?
|
Re: LoadDivGraphとアンダースコア ( No.2 ) |
- 名前:Saucer 日時:2014/07/20 06:44
そういうことだと思ったのですが、ちょっとわからなくなりました。
管理人様の返信を見て、もうちょっと試してみたのですが、
@"clingl.png"→"cling_l.png"
A"jumpla.png"→"jumpl_a.png"
B"jumpla.png"→"jump_la.png"
と変更してみたところ、@とBは正常に読み込めましたが、
Aのときはエラーが発生しました。
どういうことでしょう…
|
Re: LoadDivGraphとアンダースコア ( No.3 ) |
- 名前:管理人 日時:2014/07/20 14:16
うーん、私の環境では@〜Bどの場合も読み込むことができました
お使いのDXライブラリのバージョンは幾つでしょうか?
もし最新ではないということでしたら最新バージョンでは直っているかもしれませんので、
よろしければこちらの暫定の最新バージョンをお試しになってみてください m(_ _)m
http://homepage2.nifty.com/natupaji/DxLib/DxLibVCTest.exe // VisualC++ 用
http://homepage2.nifty.com/natupaji/DxLib/DxLibBCCTest.exe // BorlandC++ 用
http://homepage2.nifty.com/natupaji/DxLib/DxLibGCC_DevCppTest.exe // Dev-C++ 用
http://homepage2.nifty.com/natupaji/DxLib/DxLibGCC_MinGWTest.exe // MinGW 用
http://homepage2.nifty.com/natupaji/DxLib/DxLibDotNet.zip // .NET用
http://homepage2.nifty.com/natupaji/DxLib/DxLibMakeTest.exe // ソース
(中身を既存のライブラリのファイルに上書きして、BCCをお使いの
場合は『再構築』を、VCをお使いの場合は『リビルド』を、
Dev-C++をお使いの方は「Rebuild All(Ctrl+F11)」をして下さい)
|
Re: LoadDivGraphとアンダースコア ( No.4 ) |
- 名前:Saucer 日時:2014/07/20 17:13
最新バージョン(3.12a)です…
私の環境に原因がある、ということでしょうか。
変なスレを立ててしまい、申し訳ございません…
|
Re: LoadDivGraphとアンダースコア ( No.5 ) |
- 名前:管理人 日時:2014/07/20 19:26
最新バージョンでしたか・・・
うーん、原因はまだ分かりませんが、とりあえず環境が原因かどうかを
確認したいと思いますので、私のPCでコンパイルした jumpl_a.png という
ファイル名の画像を LoadDivGraph で読み込むテストプログラムの実行ファイルを
こちらにアップしましたので、よろしければ Saucerさんの環境でも正常に動作するか
お試しになってみてください m(_ _)m
https://dxlib.xsrv.jp/temp/LoadDivGraphTest.zip
内容は関数リファレンスの LoadDivGraph の項目にあるサンプルプログラムで
読み込む画像のファイル名を jumpl_a.png に変更しただけのものです、
正常に動作すると画面左上に緑色の人型キャラがアニメーションします
|
Re: LoadDivGraphとアンダースコア ( No.6 ) |
- 名前:Saucer 日時:2014/07/22 10:22
プログラムまで組んでいただき、まことに有難うございます。
私の環境でも管理人様のプログラムは正常に動作しました。
どういうことでしょう…
|
Re: LoadDivGraphとアンダースコア ( No.7 ) |
- 名前:Will 日時:2014/07/22 11:34
画像ファイル名に_aとした場合、透過情報用画像ファイルの命名規則になるので、jumpl.pngが存在しているとかないでしょうか?
|
Re: LoadDivGraphとアンダースコア ( No.8 ) |
- 名前:管理人 日時:2014/07/23 00:42
Saucerさんの環境でエラーが発生するサンプルプログラムを組むことは可能でしょうか?
もしそれが作成できれば私の環境でも確認することができますので、原因を調べることが可能です
> Willさん
私も最初その辺りを疑ったのですが、仮に jumpl.png があったとしても jumpl_a.png の
読み込みが指定された場合はまず jumpl_a.png を読み込み、その後透過情報用画像ファイルとしては
jumpl_a_a.png というファイル名のファイルを探しに行くので、その線は薄いと思います
|
Re: LoadDivGraphとアンダースコア ( No.9 ) |
- 名前:Saucer 日時:2014/07/23 05:55
|
Re: LoadDivGraphとアンダースコア ( No.10 ) |
- 名前:管理人 日時:2014/07/23 08:03
すみません、プログラムのソースファイルを使ってデバッグ実行をしないと原因を調べることが出来ません
もし不都合が無ければアップしていただいた実行ファイルのソースファイルをこちらのメールアドレスに
送っていただけないでしょうか?
BQE00322(あっとまーく)nifty.com
( (あっとまーく)を@に置き換えてください
|
Re: LoadDivGraphとアンダースコア ( No.11 ) |
- 名前:Saucer 日時:2014/07/23 15:12
御手を煩わせて申し訳ございません。
ご指定のアドレスにファイルを送らせて頂きました。
|
Re: LoadDivGraphとアンダースコア ( No.12 ) |
- 名前:管理人 日時:2014/07/23 22:14
メールありがとうございます、ソースを拝見しました
原因が分かりました、DXライブラリでは LoadGraph や LoadDivGraph を実行した際に
指定された画像ファイルのファイル名の末尾に _a が追加されたファイル名のファイルがあった場合
追加でその画像を読み込み、それをアルファチャンネル用の画像として使用するという仕様があるのですが、
今回の件では jumpl.png というファイルを読み込む際に、
恐らく jumpl.png のアルファチャンネル用の画像というつもりではないと思われる
jumpl_a.png がアルファチャンネル用画像として読み込まれてしまっていました
アルファチャンネル用画像として読み込まれた場合、元の画像と解像度が異なると読み込みがエラーとなります
なので、今回の件では jumpl.png が読み込まれた際に jumpl_a.png がアルファチャンネル用画像として読み込まれ、
jumpl.png と jumpl_a.png の解像度が異なるために jumpl.png の読み込みが失敗、ということになっていました
この問題を解決するために
「指定された画像ファイルのファイル名の末尾に _a が追加されたファイル名のファイルをアルファチャンネル用画像として読み込む」
という仕様を使用するかどうかを設定するための関数を追加しました
// LoadGraph などの際にファイル名の末尾に _a が付いたアルファチャンネル用の
// 画像ファイルを追加で読み込む処理を行うかどうかを設定する
// ( TRUE:行う( デフォルト ) FALSE:行わない )
int SetUseAlphaImageLoadFlag( int Flag ) ;
こちらの関数を DxLib_Init の後にでも FALSE を渡して呼んでおけば、今回ご報告いただいたエラーは
発生しなくなると思います
上記関数を追加したバージョンをこちらにアップしましたので、よろしければお試しください m(_ _)m
http://homepage2.nifty.com/natupaji/DxLib/DxLibVCTest.exe // VisualC++ 用
http://homepage2.nifty.com/natupaji/DxLib/DxLibBCCTest.exe // BorlandC++ 用
http://homepage2.nifty.com/natupaji/DxLib/DxLibGCC_DevCppTest.exe // Dev-C++ 用
http://homepage2.nifty.com/natupaji/DxLib/DxLibGCC_MinGWTest.exe // MinGW 用
http://homepage2.nifty.com/natupaji/DxLib/DxLibDotNet.zip // .NET用
http://homepage2.nifty.com/natupaji/DxLib/DxLibMakeTest.exe // ソース
(中身を既存のライブラリのファイルに上書きして、BCCをお使いの
場合は『再構築』を、VCをお使いの場合は『リビルド』を、
Dev-C++をお使いの方は「Rebuild All(Ctrl+F11)」をして下さい)
|
Re: LoadDivGraphとアンダースコア ( No.13 ) |
- 名前:Saucer(解決) 日時:2014/07/24 07:00
管理人様の仰る通り、エラーが発生しなくなりました!
ご尽力を頂き心から感謝申し上げます。
又、「_a」の特別な扱いを知らなかったことをお詫びいたします。
これからもありがたくDXライブラリを使わせていただきます。
まことに有難う御座いました。
|