診断をお願いします
投稿者 : りょうた(EAOcf-163p216.ppp15.odn.ne.jp)
- 2003/03/27(Thu) 00:44
No.2992
|
|
|
|
|
2992.lzh
添付のプログラムについてですが、 ミサイルの爆発によってミサイルが壊れたときに 大きな音がして、Tonyu Systemが勝手に終了してしまったり、 大量のエラー(システムの方のエラーだと思われます)が出たりします。
ミサイルが共にもう一方を破壊し続けるからかもしれないと思い、 2つ目のミサイルは1フレーム待ってから壊れるようにしたのですが治りません。
どうすればこのようになるのを避けられるでしょうか。
|
Re: 診断をお願いします
投稿者 : hoge-(ppp02.kake.info.waseda.ac.jp)
- 2003/03/27(Thu) 13:33
No.3000
|
|
|
|
すみません。こちらで試していますがまだ不具合が発生しません。
ただ気になった点を申し上げますと
フレーム毎に行う処理を onUpdateで行っているのではなく onDraw で行っている点です。 onDraw はfpsを数えるのに使われることからも(No. 2953)、かなり不定期に呼び出しがかかるものですので、dieなどを行うと動作が不安定になる可能性はあります。画面のみてくれにかかわる処理以外は書かないことをおすすめします。 onUpdateをためしてください。
|
Re: 診断をお願いします
投稿者 : りょうた(EAOcf-163p216.ppp15.odn.ne.jp)
- 2003/03/27(Thu) 22:04
No.3003
|
|
|
|
3003.lzh
onUpdateに全て変えてみましたが、一向に改善されないです。
こちらではミサイルにミサイルをぶつけると必ずエラーが発生します。
エラーは 無効なポインタ操作 モジュール 'Tonyu.exe' のアドレス〜でアドレス〜に対する読み込み違反がおきました。 :参照カウントが負になりました。 スタック オーバーフロー 実行時エラー:モジュール 'Tonyu.exe' のアドレス〜でアドレス〜に対する読み込み違反がおきました。 実行時エラー:メモリが足りません。
などなどいろいろ出ます。
そして、ビープ音のような音が「プー・プー・プー・・・」となったり、爆発の音が止まらなくなったりします。 またNo.1770で質問したウインドウが出たりもします。
|
Re: 診断をお願いします
投稿者 : hoge-(203-165-20-190.home.ne.jp)
- 2003/03/27(Thu) 23:52
No.3004
|
|
|
|
スタック オーバーフロー
これが出ているということは、どこかでメソッド呼び出しが無限に起きている可能性があります。ミサイルの処理まわりを確認してみてください。
|
Re: 診断をお願いします
投稿者 : hoge-(203-165-20-190.home.ne.jp)
- 2003/03/27(Thu) 23:57
No.3006
|
|
|
|
mcnsのこのへんがとても怪しいです。ここから自分自身に対して、die を相互に呼んでいる可能性があります。 念のため t!=this という条件をくわえておいたほうがよさそうです
function onDie(){ if(this is missile || this is missileE){ for(t in $Chars){ if(dist(x-t.x,y-t.y)<60 && t!=this /*追加*/ ){ if(t is jet || t is jetE) t.hp-=rnd(60); if(t is tank || t is tankE) t.hp-=rnd(70); if(t is city) t.hp-=rnd(80); if(t is missileE) t.die(); if(t is missile && t != this) t.myDie(); $mplayer.play($se_bomb1); } } appear(new fire(x,y)).r=2; }
|
Re: 診断をお願いします
投稿者 : りょうた(EAOcf-163p216.ppp15.odn.ne.jp)
- 2003/03/28(Fri) 00:20
No.3008
|
|
|
|
いろいろ試していたらCMMLファイルが一部破損しました。
<cpattern name="$pat_jet" src=""/> とここだけですが画像のアドレスが""になってしまいました。 他のキャラクタパターンのところは大丈夫です。
「というキャラクタパターンのファイルはありません」と言うエラーメッセージが出ます。
一応報告だけしておきます。
|
Re: 診断をお願いします
投稿者 : りょうた(EAOcf-163p216.ppp15.odn.ne.jp)
- 2003/03/28(Fri) 00:24
No.3009
|
|
|
|
いかにもクソプログラムっぽくなりましたが一応解決とさせていただきます。
mcnsのonDieをフラグにて一度しか実行しないようにしました。
function onDie(){ if(!_cd){ _cd=1; if(this is missile || this is missileE){ for(t in $Chars){ if(dist(x-t.x,y-t.y)<60 && t != this){ if(t is jet || t is jetE) t.hp-=rnd(60); if(t is tank || t is tankE) t.hp-=rnd(70); if(t is city) t.hp-=rnd(80); if(t is missileE) t.die(); if(t is missile && t != this) t.myDie(); $mplayer.play($se_bomb1); } } appear(new fire(x,y)).r=2; } else{ appear(new fire(x,y)).r=1; } } }
|
|