Re: Sword Bout をステージオブジェ無しで ( No.1 ) |
- 名前:管理人 日時:2015/04/05 15:52
ご指摘の通りオブジェクトが一つもない状態で攻撃を繰り出すとメモリの不正なアクセスが
発生するバグがありました
( より厳密には「オブジェクトが一つも無いか、又はオブジェクトがある場合でも順番的に最後に判定することになる
オブジェクトとの簡易的な当たり判定では「当たった」と判定されるも厳密な判定では「当たっていない」と判定された
場合にメモリの不正なアクセスが発生するバグ」となります )
Sword Bout のプログラムを変更して対応することも可能ですが、以下の流れでDXライブラリの
プログラムを変更して対応することにしました
仕様1:MV1CollCheck_Capsule などの関数が「全てのポリゴンに当たっていない場合でも MV1_COLL_RESULT_POLY_DIM 構造体の
メンバー変数 Dim に NULL 以外が入ることがある」
仕様2:MV1CollResultPolyDimTerminate は「MV1_COLL_RESULT_POLY_DIM 構造体のメンバー変数 Dim に NULL が代入されている
場合は何回呼び出しても問題が無い」
↓
Sword Bout のプログラムを見た所、仕様1 の挙動について「全てのポリゴンに当たっていない場合は、
MV1_COLL_RESULT_POLY_DIM 構造体のメンバー変数 Dim に必ず NULL が代入されるようにする」ことで、
Sword Bout のプログラムを変更しなくても本件の問題が解消されることが判明
↓
仕様1の「全てのポリゴンに当たってない場合でも、MV1_COLL_RESULT_POLY_DIM 構造体のメンバー変数 Dim には NULL が代入
されているときもあれば NULL が代入されていないときもある」というのは仕様的にも変なので、本件の問題解消にもなるので
「全てのポリゴンに当たっていない場合は MV1_COLL_RESULT_POLY_DIM 構造体のメンバー変数 Dim には必ず NULL が代入される」
ように仕様を変更することに決定
上記の変更を加えてエラーが発生しなくなったバージョンをこちらにアップしましたので、よろしければお使いください m(_ _)m
https://dxlib.xsrv.jp/temp/DxLibVCTest.exe // VisualC++ 用
(中身を既存のライブラリのファイルに上書きして、『リビルド』をして下さい)
|
Re: Sword Bout をステージオブジェ無しで ( No.2 ) |
- 名前:軽い3Dアクション作りたい男 日時:2015/04/05 21:18
返信、対応、ありがとうございます
「Chara.cpp」、17ヶ所
「Stage.cpp」、2ヶ所の
関数「MV1CollResultPolyDimTerminate」が実行された次の行に
一行ずつ後始末された、「HitDim」のメンバポインタ「Dim」
に「NULL」を代入する記述をしたら
問題なく動くようになりましたが、
これだけだと問題が起こることがあるのでしょうか?
こういった具合にそれぞれの場所に記述しました
MV1CollResultPolyDimTerminate(HitDim[HitNum]);
HitDim[HitNum].Dim = NULL;
MV1CollResultPolyDimTerminate(HitDim[k]);
HitDim[k].Dim = NULL;
MV1CollResultPolyDimTerminate(HitDim[i]);
HitDim[i].Dim = NULL;
初心者なので、これで大丈夫な気がしてしまうのです。
この件はアップしていただいた、ファイルを解凍、上書き、リビルドで、
確実に解決すると思いますが、よければ教えてください。
|
Re: Sword Bout をステージオブジェ無しで ( No.3 ) |
- 名前:管理人 日時:2015/04/05 21:54
> これだけだと問題が起こることがあるのでしょうか?
いえ、その方法でも問題ありません
今回DXライブラリのプログラムを変更して解決しようと思ったのは、私自身が
「当たったポリゴンが一つも無い場合でも Dim に NULL 以外が入るのは気持ち悪いなぁ」
と思ったのが大きいので、MV1CollResultPolyDimTerminate の後に Dim に NULL を代入する
という方法でも全く問題ありません
|
Re: Sword Bout をステージオブジェ無しで ( No.4 ) |
- 名前:軽い3Dアクション作りたい男(解決) 日時:2015/04/05 22:21
速い回答ありがとうございます。
また、分からない事があったら質問します。
ありがとうございました。
|