読者です 読者をやめる 読者になる 読者になる

世界が変わったのだから、自分も変わらなくてはならない。

エンジニア兼デザイナーのナカモリのブログです。

【Swift】2つのアイテムが重なった時にどちらかのアイテムを消すには?

アプリ制作 Swift

f:id:takahironakamori:20160308210900p:plain

仕事の息抜きにSwiftの勉強をしています。

今日は、例えば上の画像の男の子が横に移動して、オレンジに重なったらオレンジが消えるようにSwift(2.1)で実装するにはどうすればいいのか?を考えていました。

ゲームでキャラクターが移動して、落ちているアイテムをゲットする場合などに使えるかもしれません。

 いろいろな方法があると思いますが、今回は学生のときに数学で習った「2点間の距離」を求める公式を利用します。

f:id:takahironakamori:20160308211437p:plain

この数式をSwiftで実装するには

2点間の距離の公式をSwift1行で実装するのは少しわかりにくいので、次の3ステップにわけています。

  1. 2点間の距離(X座標)を計算します
  2. 2点間の距離(Y座標)を計算します
  3. 1.2.で計算した距離を2乗して足したものの平方根を計算します

2つのアイテムの距離を計算して、重なったら片方を消す

これを男の子が横に進むたびに確認すればいいです。

気になるところ

上記のX座標の距離、Y座標の距離の計算は、後に2乗するので、絶対値にする必要はないかもしれません。

また、この方法だと、下図のように男の子がオレンジの中心まで移動しなければオレンジは消えません。

f:id:takahironakamori:20160308212844p:plain

男の子とオレンジが触れた瞬間に消したい場合は、if文の条件を調整する必要があります。