ページ 11

引数の渡し方

Posted: 2011年8月29日(月) 15:39
by 賄賂
ドがつく初心者ですが質問させてください

関数の分け方についてのことなのですがリュウジンロクプログラミングの館では
難しすぎて分からなかったので教えてください

描画に関しては描画関数をつくっているのですが 引数に関しての知識がどうも弱くて分からないのです
主人公を動かすにはキーボード関数から描画関数に引数として描画座標を渡そうとしていますが
それだと今後、敵キャラなどっを増やした時に描画関数に渡す引数などが多くなって
コードが見にくくなりそうな気がします

なので描画関数から主人公関数を呼び出して戻り値として描画座標を渡したほうがいいのかと思っています
このような場合、普通はどのような処理になっているのでしょうか?

Re: 引数の渡し方

Posted: 2011年8月29日(月) 16:05
by softya(ソフト屋)
ゲームプログラミングの館に、そのものズバリがありますよ。
http://dixq.net/g/

「ゲームプログラミング設計」 をお読みください。
わかんないことがあれば聞いてくださいね。

Re: 引数の渡し方

Posted: 2011年8月29日(月) 20:41
by box
「引数の渡し方」というタイトルが付いている質問の冒頭が
賄賂 さんが書きました:関数の分け方についてのことなのですが
ですか…。
何だか腑に落ちないです。

Re: 引数の渡し方

Posted: 2011年8月29日(月) 22:20
by 賄賂
〉〉boxさん 申し訳ないです タイトル書いてる時点では気づきませんでした

〉〉ソフト屋さん
ありがとうございます ポインタとして渡して主人公関数で書き換えれば描画関数の方にも
影響されるということですね ポインタの存在を忘れていました・・・

・もう三つほど質問があるのですが
自分は描画に関しては描画関数にすべてやらせようとしています
当たり判定関数を呼ぶときに変数を一度に渡せるからです
もし描画関数ではなく主人公関数や敵関数などにそれぞれの描画をまかしたら
当たり判定はどうすればいいのでしょう?

・斜め移動の時、キーボードを同時押ししますがこの処理は考えなくてもいいでしょうか?
if(上キーが押されたら&&右キーが押されたら)などとわざわざ8方向の処理を考える必要はありますか?
前にここの掲示板で斜め方向の移動の処理も書けと言われたのですが

・DXライブラリの実行画面の縦と横の大きさ(座標)ってどんなもんでしたっけ?


多いですがお願いします すみません

Re: 引数の渡し方

Posted: 2011年8月29日(月) 23:55
by Dixq (管理人)
> 自分は描画に関しては描画関数にすべてやらせようとしています当たり判定関数を呼ぶときに変数を一度に渡せるからです

仰っている意味が良く分からないですが、どういう単位でモジュールを分割されてますか?

> もし描画関数ではなく主人公関数や敵関数などにそれぞれの描画をまかしたら当たり判定はどうすればいいのでしょう?

「関数」で分割するのではなく、「主人公」「敵」といったオブジェクト単位で分割すると良いと思います。
softyaさんが書かれたリンク先にある設計です。

> ・斜め移動の時、キーボードを同時押ししますがこの処理は考えなくてもいいでしょうか?

4方向だけ計算すれば斜めにも移動しますが、斜めに移動している時は、移動量を√2で割ってやらないと、1:1の速さにならないので注意が必要です。

>・DXライブラリの実行画面の縦と横の大きさ(座標)ってどんなもんでしたっけ?

座標?解像度のことでしょうか?
設定次第で変わりますが、デフォルトは640x480です。

Re: 引数の渡し方

Posted: 2011年8月29日(月) 23:58
by softya(ソフト屋)
賄賂 さんが書きました:・もう三つほど質問があるのですが
自分は描画に関しては描画関数にすべてやらせようとしています
当たり判定関数を呼ぶときに変数を一度に渡せるからです
もし描画関数ではなく主人公関数や敵関数などにそれぞれの描画をまかしたら
当たり判定はどうすればいいのでしょう?
当たり判定専用の関数を用意すべきです。
理由は、
(1)描画関数で当たり判定をすると当たり判定順番とと描画順番が違うと複雑になる。
(2)途中で消滅した場合は1フレームとは言え描画と食い違うことになる。
(3)関数の名前と機能が食い違うと自分で間違えてバグを作る可能性が高くなる。
(4)シンプルになる(これ重要)

そうしないと描画順番や、当たり判定で死んだ場合、矛盾を生じる可能性が高いです。
まず、
賄賂 さんが書きました:・斜め移動の時、キーボードを同時押ししますがこの処理は考えなくてもいいでしょうか?
if(上キーが押されたら&&右キーが押されたら)などとわざわざ8方向の処理を考える必要はありますか?
前にここの掲示板で斜め方向の移動の処理も書けと言われたのですが
上下左右移動→当たり判定の流れなら必要ないです。
上移動→当たり判定→下移動→当たり判定→右移動→当たり判定→左移動→当たり判定なんて成っていたら必要です。
賄賂 さんが書きました: ・DXライブラリの実行画面の縦と横の大きさ(座標)ってどんなもんでしたっけ?
DEFAULT_SCREEN_SIZE_XとDEFAULT_SCREEN_SIZE_Yですね。