ページ 11

二点質問があります。

Posted: 2009年6月26日(金) 00:17
by 小栗
初めまして、小栗と申します。

現在、趣味範囲でですがDXライブラリとサンプルを利用して
ブロック崩しを作っています。

そんな中で、どうしても解決できない現象が二つ発生したため、
質問させていただきます。



一つ目は、プログラムを実行し、しばらくブロックを消していったあと、
ウィンドウを閉じると、「ハンドルされていないWin32の例外が発生しました」と言う
メッセージが表示されてしまいます。

今までも別のプログラムを組んでデバッグを実行した時に同じメッセージが出たことがあり、
その時は、大体がメモリへの不正アクセスだったと思うのですが、
現在のプログラムで、不正アクセスを行っていそうな箇所は見つけられませんでした。

調べてもやり方がまずいのか、解決方法を発見できませんでした。

もしかしたら私の認識が間違っているかもしれないので、どういったメッセージなのか教えていただければ
幸いです。
あと、ソースを添付いたしますので、どこに問題があるかご指摘いただければ幸いです。


二つ目は、ブロックを消すボールが『バーに当たると、時々バーに吸いついたようにバーの上、あるいは下を移動して、再度画面上を移動する』という動きを見せます。
意味が伝わりにくいかもしれないので、添付したソースを実行していただいた方がわかりやすいと思うのですが……

こちらもソース上、自分では上記の現象を発生させる原因を特定できませんでした。

どこが、原因なのかをご指摘をいただけるとありがたいです。



最後に現在のOS、開発環境を記載しておきます。

OS:XP SP3
開発環境:VS2005


以上です。


よろしくお願いいたします。

Re:二点質問があります。

Posted: 2009年6月26日(金) 01:25
by Justy

>ウィンドウを閉じると、「ハンドルされていないWin32の例外が発生しました」と言う
>メッセージが表示されてしまいます

 配列への書き込み時、配列の外に対して書き込みをしているのが
原因ではないかと思われます。
 DeleteChipNum関数で計算した xや y値は Map変数に入れる前に範囲を
チェックした方してみてください。



>『バーに当たると、時々バーに吸いついたようにバーの上、
>あるいは下を移動して、再度画面上を移動する』という動きを見せます

 これは推測ですが、図のようにボールがバーの真横から接触した場合、
ボールは上向きに反転しますが、位置的にはバーの中にありますので
次のフレームで再度接触判定を受け、下向きに反転、それでもまだバーの中なので
次のフレームで……、となっているということだったりしないでしょうか。

Re:二点質問があります。

Posted: 2009年6月26日(金) 23:12
by 小栗
Justy様

素早いご指摘とイメージをつけくださり、ありがとうございました。

ご指摘いただいた部分はまだ、確認はしておりませんが、配列への書き込みは
可能性を見逃していました。
ありがとうございます。

バーにボールが当たった時の現象も、確かに真横から当たった時に発生していたような気がします。
こちらも正確に動作を確認してから、対策を考えたいと思います。

ありがとうございました。