龍神録レーザー部でのエラーについて

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
あ~る

龍神録レーザー部でのエラーについて

#1

投稿記事 by あ~る » 16年前

お久しぶりです
龍神録の館のレーザーを実装するところでなんとかコンパイルは通ったんですけど、レーザーが太くなる時に
atan2:DOMAIN error
というメッセージが出てきてプログラムが止まってしまいます
OKボタンを押すと問題無く進むんですけど、このままだとゲームとして論外なんで、どなたか解決策を教えて下さい
環境はBCCでソースは館の物をほとんどいじっていません

(5/4 9:20 管理人により題名が変更されました)

MNS

Re:エラーについて

#2

投稿記事 by MNS » 16年前

思うに、0の除算が行われているせいではないでしょうか?
atan2の引数が0である場合はないか確認してください。

あ~る

Re:エラーについて

#3

投稿記事 by あ~る » 16年前

レーザーと当たり判定を求める式の中の、get_sita関数の中の変数thetaに使われてるatanが0の時に「エラー」と表示されるようにしたら、「エラー」が2個表示されました(その後一回弾幕がループ(もう一度レーザーが描画)するごとに2個ずつ表示されました)
これはどうすればいいのでしょうか?

box

Re:エラーについて

#4

投稿記事 by box » 16年前

> 変数thetaに使われてるatanが0以下の時に「エラー」と表示されるようにしたら

ソースコードを見せてください。
atanが0以下のとき、の意味がわかりません。

あ~る

Re:エラーについて

#5

投稿記事 by あ~る » 16年前

あ、すいません、編集したんですけど間に合いませんでした
atanが0以下の時ではなく0の時の事でした

あ~る

Re:エラーについて

#6

投稿記事 by あ~る » 16年前

というか調べるのは引数ですね
物凄い勘違いしてた気がします
すいませんでした、もう一度調べ直してきます

あ~る

Re:エラーについて

#7

投稿記事 by あ~る » 16年前

atan2に渡されている引数sとtが0の時、それぞれ別の表示をするようにしたら1回弾幕がループする毎にそれぞれ2回ずつ表示されました
ソースは龍神録のをコピペしたので間違いは無いと思うのですが、どこか足りてない部分があるかもしれません

MNS

Re:エラーについて

#8

投稿記事 by MNS » 16年前

コピー・ペーストしたというなら、
どこかをコピー・ペーストし忘れているのかもしれませんし、
ソースコードの中で、自分の独自の処理を行っていると、
たとえコピー・ペーストしたコードがあっていたとしても、
食い違う点が出てきてしまうかもしれません。

しっかりと理屈を理解しておかないと、こういう不測の状況で困りますので、
コードを提示できなというのなら、理屈を1から理解して、書き直すしかないと思います。
こういう場合は、コードを提示しないと、解決は難しいと思いますので。
(私が回答できるかは別として、ですが)

私はレーザーをゲームとして実装したことがないので、
的確な回答はできないですが、34章を読んだ限りでは、
内積・外積を求める関数で何かを間違えていることしか考えられません

Justy

Re:エラーについて

#9

投稿記事 by Justy » 16年前


>ソースは龍神録のをコピペした

 館の方はすべて VisualC++を前提としており、その場合は atan2のそれぞれの引数に 0を
入れてもそのまま実行を続けますが、BCCの場合はエラーになります。

 なので、両方の引数が 0だった場合は atan2を実行しないようにしてください。

 どうしても 0でもかまわず実行したいのでれば、

int _matherr(struct _exception *__e) { return 1; }

をソースのどこかに入れてください。

 これで数学系のエラーは(それが良いことなのかどうかは別にして)出なくなります。

ttp://d.hatena.ne.jp/wata_d/20061017/1161052576

あ~る

Re:エラーについて

#10

投稿記事 by あ~る » 16年前

皆さんありがとうございました!
atanの前に
if(s!=0&&t!=0)
を入れたら無事動くようになりました
BCCでは駄目だったんですね…知りませんでした…
どうもありがとうございました!

Dixq (管理人)

Re:エラーについて

#11

投稿記事 by Dixq (管理人) » 16年前

× ソースは龍神録のをコピペしたので間違いは無いと思うのですが
○ ソースは龍神録のをコピペしたので間違いがあると思うのですが

でお願いします(汗
VC++を前提にしているので,他が考慮出来ていませんでした。ごめんなさい。
修正したいのですが,龍神録のこのコードは前の章の内容を直すと後のコードも全て直さないといけないのがやっかいなんですよね・・;

あ~る

Re:龍神録レーザー部でのエラーについて

#12

投稿記事 by あ~る » 16年前

わかりました、以後気をつけます(笑)
元はといえばVC用だって分かっておきながらBCでやってる僕がいけないので…(-.-;)

そしてもう一個質問が出来てしまいました…
レーザーはちゃんと描画出来るようになったのですが(微妙に当たり判定にミスがありましたが…)ボスのHPを0にしてもレーザーが描画されたままになってしまいました…
これもどこかでVCと違いが出ているのでしょうか?
どなたか理由が分かる方がいらっしゃいましたら教えて下さい

Dixq (管理人)

Re:龍神録レーザー部でのエラーについて

#13

投稿記事 by Dixq (管理人) » 16年前

むむむ・・きっとボスのHPが0になった時にレーザーに関わる構造体がリセットされていないんだと思います。
ボスのHPが0になった時

memset(レーザーの先頭アドレス, 0, レーザーの領域分);

が書いてなければ初期化漏れだと思います・・。

あ~る

Re:龍神録レーザー部でのエラーについて

#14

投稿記事 by あ~る » 16年前

ありがとうございます!
どこに入れれば良いのかわかんなかったんですけど、とりあえずenter_boss関数の中に書いたら上手くいったんですけど、あってましたかね?(プロジェクトの中を探しても発見出来なかったので…)
つまらないミスでお手を煩わせてすいませんでした…
ありがとうございました!!

閉鎖

“C言語何でも質問掲示板” へ戻る