画像を表示するコードは書けるようになったのですが、
ビルドして、Debugフォルダにexeを作ってダブルクリックで実行すると、
何も表示されません。
しかしそのexeファイルと同じ場所に表示したい画像を入れると、普通に表示されます。
###どのようにすれば、exeファイルと同じ場所に画像、曲がなくてもVisualStudioにて実行したときのように動作するのでしょうか?
言葉で表現するのが難しいですが、
VisualStudioにてビルドして作成された、exeファイルをダブルクリックして起動すると
真っ暗な画面で、音楽も画像も表示されません。
ただ、そのexeファイルがあるフォルダに画像と音楽を入れると正常に動作します。
現在のコードは、本文に入らないので、こちらに記しておきます。
ゲームを作る際、勝手にゲーム内の素材を使われたら困るので、誰か教えてください
なにをおしえるんでしょうか。
あなたの書いたコードがそういう動作になっているだけ、です
現在、質問を編集しました。
ご回答よろしくお願いします!
どういう動作をさせたいのか詳しく書きましょう。
VisualStudioにて実行したときのように動作、といわれても、他人にはさっぱりわかりません
また、コードを提示しましょう。答えようがないです
わかりました。
しばしお待ちを...
・リソースとして実行ファイル内に取り込む
・パスワードをかけた圧縮ファイルor独自フォーマットのファイルとして一緒に置き、起動時にメモリ上で展開する
どちらもやろうと思えばファイル抽出できますが…
リソースとして実行ファイル内に取り込むにはどうすればいいですか?
提示のソースコードの内容に比べて質問者さんが問題の原因に思い至らないことに少し違和感を覚えていますが、もとのコードはご自分で作られたのではないでしょうか。単に、エラー自体はCreateFileでのファイルオープン失敗が原因のはずです。Visual Studioでのデバッグ実行時のカレントディレクトリはプロジェクトファイルのある場所だったはずです。「カレントディレクトリ」と言う言葉は分かりますか。
なお、ソースコードを別のサイトに貼るのは(禁止されている訳ではないですが)あまり推奨される行為ではないと思います。そのサイトが閉じてしまった場合、質問の内容が分断され、意味不明になってしまいます。あまり強く言うつもりはないですが。。。
すみません...
ソースファイルについては以後気を付けます。
そして、カレントディレクトリというのはc++ファイルがおかれている場所で会っていますでしょうか?
リソース埋め込みはこんな感じで
https://jyn.jp/exe-embedded-resource/
近いですが、この場合はちょっと違います。実行ファイルを実行したときのカレントディレクトリ、です。例えばコマンドプロンプトで
C:\> C:\program\test1.exe
のように実行したとき、実行ファイル自体はC:\program下にありますが、カレントディレクトリはC:\(C:ドライブのルートディレクトリ)になります。コードでいえばCreateFileで CreateFile(L"Sound01.wav", となっているので、「実行時のカレントディレクトリ\Sound01.wav」を開こうとしているかたちです。
ビルドして、実行ファイルができ、実行するときにはC++ファイルの在りかはもう関係ありません。
実行ファイルはできたのですが、
ダブルクリックで実行しようとしても、
DirectXが初期化されて終わるだけです...
実行ファイルと同じ場所に、
プログラム内で読み込んだり表示したりした画像を入れれば
表示されるのですが...
話が最初に戻りますが、
> 実行ファイルと同じ場所に、プログラム内で読み込んだり表示したりした画像を入れれば
ダブルクリックして実行したときのカレントディレクトリは、その実行ファイルと同じ場所になるためです。そういうプログラムのコードになっています。
より正確に言うと、今のコードは、常にカレントディレクトリにSound01.wavファイルが無いと動きません。そうしないためには、絶対PATH指定にしないといけません。もしそのあたりの事情がまだ良く理解できないのであれば、実行ファイルと同じ場所に配置することを仕様とするとか、C:\DATA ディレクトリ(フォルダー)に配置する、とかを制限事項とするように作るしかありません。
>実行ファイルと同じ場所に、プログラム内で読み込んだり表示したりした画像を入れれば表示されるのですが...
dodox86さんが2020/05/26 18:17~18:19で書かれているのは実行ファイル内に画像を取り込む方法ではありませんよ?
リソース埋め込みのほうの話でしたら、ファイル読み込み部分をLoadResource()やLoadBitmap()でロードするように書き換えないとだめですよ?
そうなんですね!!
ちょっと待っててください...
ああ、[2020/05/26 17:36]の質問者さんのコメント
> リソースとして実行ファイル内に取り込むにはどうすればいいですか?
の後に当初の質問自体に対する私のコメントが入ってしまったので、混乱させてしまいましたね。これは失礼しました。しばらく黙っておきます。
LoadBitMapで、ファイルを読み込めたのはいいですが、
D3DXCreateTextureFromFileExで読み込むことができません。
当然(?)といえば当然ですが、
LPCWSTRはHBITMAPと互換性がありませんだそうです。
CreateTextureならAPIリファレンスを見れば
D3DXCreateTextureFromFileInMemory()や D3DXCreateTextureFromFileInMemoryEx()、D3DXCreateTextureFromResource()、D3DXCreateTextureFromResourceEx()なんてのがありますが…
dodox86さん
情報提供していただけること自体はありがたいことなので、そこまで気になさらなくてもよいのでは…
SHOMIさん、フォローありがとうございます。いえ、卑下しているというほどのことではなく、今現在質問者さんはリソースに格納して取り出すようにすることに注力されたいようでしたので、色んなアイディアを複数人から言われることの混乱を避けるため、当初の質問へのコメントを続けることは控えようと思った訳です。
無事、D3DXCreateTextureFromResoueceEx();
で画像を読み込んだのですが、スプライトに画像を表示できませんでした。
表示の仕方は、
g_pSprite->Draw(
g_pTexture01,
&rcMw,
¢erMw,
&positionMw,
0xFFFFFFFF
);
こんな感じです。
D3DXCreateTextureFromFileEx()の時のコードもそうですが、D3DXCreateTextureFromResourceEx()のエラーチェックをしていますか?
間違いなく読み込めているのでしょうか?
D3D_OKが返っていますか?