トップページ > 記事閲覧
リソースのロードのグローバルとローカル管理
名前:vic 日時: 2015/03/31 01:41

下記は#includeよりしたのコードです。 Anime g_tabAni; GSprite g_tab; WINMAIN() { DxInit(1280,720); //g_tabAni=Anime::SplitAnimePositionX0Y0("graphics/tabasa22.png", 11, 2, 5); g_tabAni.InitSplitX0Y0("graphics/tabasa22.png", 11, 2, 5); g_tab = GSprite(400, 100, 3, 0, &g_tabAni); GAMELOOP{ g_tab.Update(); g_tab.Draw(); g_tab.velocity.AddDegree(1); } DxEnd(); } 上記コードでは、グローバル変数を宣言した後に、 うまく描画できています。 しかし、InitInitSplitX0Y0メソッドを使わずに、戻り値Animeが返ってくるスタティックメソッドやコンストラクタを使うと、画面に描画されなくなります。 ブレークポイントで値を確認しても情報漏れはなくまったく不明です。グラフィックハンドルも入っています。 しかし、g_tabAni と g_tabAniのグローバル変数にせず、 ローカル変数(ローカルインスタンス)にしてみればまったく問題なく動作します。 グラフィックハンドルは値が存在していてもほかに何かが設定されていないとかなにか原因があるでしょうか? まったくわからずに困っています。 ローカル変数(ローカルのインスタンス)なら現状ではまったく問題ないです。
メンテ

Page: 1 |

Re: リソースのロードのグローバルとローカル管理 ( No.1 )
名前:vic 日時:2015/03/31 01:45

VisualStudio2013CommunityEdition 使用です。 ライブラリバージョンは Ver 3.12e です。
メンテ
Re: リソースのロードのグローバルとローカル管理 ( No.2 )
名前:管理人 日時:2015/04/01 00:45

うーん、すみません、Animeクラスと GSpriteクラスの全体を拝見しないと何とも言えません 適当な回答をしてしまうと混乱の元となってしまうので推測できる原因も申し上げられません 不都合が無ければ Animeクラスと GSpriteクラスの宣言とメンバー関数のプログラムを こちらに貼り付けていただけないでしょうか?
メンテ
Re: リソースのロードのグローバルとローカル管理 ( No.3 )
名前:vic 日時:2015/04/01 15:23

最新かと思っていたDXライブラリが、入れ替えを忘れていたようです。最新バージョンに変えて動作確認しておきます。またその後、動作報告いたします。
メンテ
たぶん解決 ( No.4 )
名前:vic 日時:2015/04/01 22:57

まだ試していませんが、 すっかり忘れていました。 デストラクタでグラフィックの開放をしていることを。 データの数値は残っているので、そのことをすっかり忘れていて、ハンドルの数値は残っていてもグラフィックは消え去っている、というのに気づかずにという状態でした。 ほかの言語でのライブラリで、開放するとヌルになるのも同時にやっていて、そちらでヌルエラーが出やすいので頭の中で混同していたようです。 VisualStudio2013がフリーズしたり、ソースが消えたり(真っ白、全部0で埋められる)大変だったので、冷静な判断力が欠けていたようです。 VisualStudio2013がフリーズして強制終了すると最悪、ビルド中CPPソースが0データで埋められます。 なので、VS2013の調子が怪しかったら、念のためビルド前にCPPファイルをバックアップすることをおすすめします。
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存