[PR]
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
ねんまつー
http://blog.cnobi.jp/v1/blog/user/facb69965cc0e2aa2ab0d154650d346a/1230430994
年末ですね。
自分も実家に戻ります。
画像素材も大体終わったので、スクリプト作業は実家でも出来そうです。
年始あたりで体験版公開したい。
システム的にはGuardとリプレイを実装。
リプレイは、進行速度が可変なゲームなのでかなり迷ったのですが、
早送り機能をつけることや、メニュー中の未操作時間をある程度スキップさせることで
一応解決を図りました。
//-----------------------------------------------------------------------
それと、コンパイルの問題なのかちょっと分かりませんが、プログラムで
ちょっとしたトラブルがあったので、同じ問題に悩んでいる方は参考にしてください。
自分はゲーム中でリストを管理する場合、テンプレートに雛形を作ってそれを継承しています。
以下のような感じで
template<class BS> class cList{
public:
BS *before,*next,*head,*tail;
short num; //要素数
bool reffered; //参照
cList();
virtual ~cList();
void PushIn(BS *p}; //リストに挿入
void Pop(BS *p); //リストから外す(消さない)
void PushOut(BS *p); //リストから消去
void AllClear(void); //リストを全て消去
void CleanUp(void); //参照のない要素を消去
void ZSort(void); //リストをソート
BS * ExChange(BS *p,BS *q);//要素の入れ替え
virtual bool Compared(BS *p,BS *q); //要素の比較
};
で、リプレイ記録用に、以下のようなリストを定義したところ、コンパイルは問題ありませんでしたが
デバック中に「ヒープが壊れている」といったエラーが出てきました。
class cReplayList : public cList<cReplayList>{
public:
cReplayFlm dat[128];
cReplayList(){}; ~cReplayList(){};
};
調べてみるとリストでPushOutなどを呼び出し、deleteしようとすると駄目らしいです。
でもリストは他のところでも色々使っているしヒープが壊れるようなことはやってねぇ!
と色々試してみた結果
class cReplayList : public cList<cReplayList>{
public:
cReplayFlm dat[127];
short id;
cReplayList(){}; ~cReplayList(){};
void set(void){ id=0; };
};
こんな感じに、メンバ変数を2つにしてダミー関数を入れてみたら何故かエラーが消えました。
推測ですが、テンプレートクラスを継承した場合、継承先のデータが単純な構造だと
これをクラスではなく構造体、もしくはただの配列として認識しているようです。
それで継承したクラスのデータサイズに誤差が生じ、ヒープが壊れているとエラーが出てしまうと。
実際はどうなのか分かりませんが。
自分がこれを調べたとき、該当するような解説が見当たらなかったので一応書いてみました。