楽天市場
[無料でホームページを作成] [通報・削除依頼]

12月9日のゲーム開発部

2022年12月9日 21時48分21秒 (Fri)

こんにちは。ゲーム開発部見習いのいわしです。今日は当たり判定を行うクラスを作成したのですが、ひえええええ難しい。

ということでまろんさんに助けてもらいながらよちよち歩きでコードを書きました。
 まろん「12/10 7時ごろにまろんコメントをつけました。」

キャラクターや弾などに持たせるCircleHというクラスを作って、そこに当たり判定の円の半径と、boolで判定する関数を持たせました。ということで判定する汚い関数をご覧ください。

バージョン1:

bool Judge(CircleH c)
{
  return r + c.r > Math.Sqrt(Math.Pow(w.Position.X - c.w.Position.X, 2)+Math.Pow(w.Position.Y - c.w.Position.Y, 2)) ;
}


これはreturnの文が長すぎますね。同じことを二度書いているのもいただけません。
 まろん「ちなみにreturn文だけのメソッドはラムダ式のようにbool Judge(CircleH c)=>r+c.r>...);というようにかけます。」




バージョン2:
Func<float, float, float> f = (a, b) =>
{
  return (float)Math.Pow(a - b, 2);
};
return r + c.r > Math.Sqrt(f(w.Position.X ,c.w.Position.X)+f(w.Position.Y ,c.w.Position.Y)) ;

ここではラムダ式を使って自分と対象物のXとYの差を2乗するところをラムダ式でまとめました。
 まろん「前回学習したラムダ式を積極的に使おうという姿勢は素晴らしいですが、そこまで可読性が上がらないことに気付けるようになって欲しいものです。」




バージョン3:
Func<float, float, float> f = (a, b) =>
{
  return (float)Math.Pow(a - b, 2);
};
var s = f(w.Position.X, c.w.Position.X);
var t = f(w.Position.Y, c.w.Position.Y);
var R = r + c.r;
return R * R > s + t;

ここではreturnの場所にズラズラ書くのをやめて、いったんvarで変数を作って入れたものを計算しています。
 まろん「これだけで随分見やすいコードになりました。現代においてメモリは十分確保されているので、可読性の優先度を上げた、積極的な文字宣言を推奨していきたいところです。」



バージョン4:

Vector2 pos => w.Position;//新たに追加したメンバ変数です
bool Judge(CircleH c)
{
  var s = pos - c.pos;
  var R = r + c.r;
  return R * R > s.X * s.X + s.Y * s.Y;
}

ラムダ式を使っても使う回数が少ないし、中身がそんなに長くないのであまり意味がないということで消しました。
代わりにposというVector2型のプロパティを用いて参照して、そのXとYをそれぞれ2乗しました。
 まろん「Vector2の引き算も活用してだいぶみやすいコードになったのではないでしょうか。特に述べていませんが、sqrtの処理は掛け算に比べれば遅く、不等号評価の時には外せることが多いので積極的に検討していただきたい。」


という感じで、かなりきれいになりました。もう心折れそう。帰って逃避行したい。寝たい。
これ自分で出来るようになれる気がしないんですが、どうなんでしょうね。
↑まろん「千里の道も一歩から、ですよ?私自身も他人のソースコードを改善する経験は少ないので、一緒に頑張ってコーディング力を上げていきましょう!」

ということでお疲れさまでした。

この記事にコメントする



メールアドレスは公開されません。サイト運営者からの連絡に使用されることがあります。

入力すると投稿者名がリンクとして公開されます。


表示されているひらがなを入力してください
認証コード

活動日誌

日月火水木金土
123
45678910
11121314151617
18192021222324
25262728293031

イベント情報

日月火水木金土
123
45678910
11121314151617
18192021222324
25262728293031

カテゴリー

アーカイブ

2026年
2024年
2023年
2022年
2021年
2020年
2019年
2018年
2017年
2016年
2015年
2014年
2013年
2012年
2011年
QRコード
携帯用QRコード
アクセス数
ページビュー数