投稿者「shumatz」のアーカイブ

Speakedraw(4) – 追跡せよ(私の足跡?)


関数move内で進行方向が変わったときにオブジェクトの軌跡を辿る線を描きます。と言っても始点に想定される壁の位置から終点と想定される反対側の壁の位置を結ぶ線です。壁に当たる以外にもオブジェクト同士が接触した時にも描くのでちょっと面白く描かれる時もあります。(オブジェクト接触時は想定外の振る舞いもありますがこれも偶然の産物ということで。)

まずは関数setFromToです。
進行方向と逆に向かって壁に接触するところを始点として設定して
進行方向に向かって壁に接触するところを終点とします。

続いて実際に始点と終点を算出する関数getCanvasEdgeです。
現時点のXY座標と角度から壁に接触する座標を取得します。

動作するプログラムはこちらです。
ちょっと図解もしておきます。
続きを読む

Speakedraw(3) – 反射角度


前回からの続きです。

関数「move」からも呼ばれていますが、前回説明したisTouchでも出てくる関数「setAngle」を解説します。
こちらは見ての通りオブジェクトが進む角度を設定します。壁にぶつかったり、他のオブジェクトと接触した時に進行方向が変わるときに使います。ただしこちらは垂直面で接触した際に設定される反射角です。
元の角度が正数の場合は180度を減算、負数の場合は-180度減算します。
例)
30度の場合
30 – 180 = -150度
-150度の場合
-150 – (-180) = 30度 ※-と-で実際は加算になります。

また水平面で接触した場合は元の角度に-1をかけることで反射角が設定できます。
30度の場合は-30度、120度の場合は-120度になります。
動作するプログラムはこちらです。
続きを読む

Speakedraw (02) – 移動距離と他オブジェクトとの衝突


前回のCircleクラスの関数moveから呼び出される関数を説明していきます。

一番最初に出てくるdrawLineは本来であれば角度が変更したときに呼び出されるものなのでそちらの方でまとめて解説する予定です。
まずは初回起動時以外で最初に呼ばれる「setStep」について説明をしていきます。
ここではパラメータで指定された移動距離からxy座標それぞれの移動距離を計算します。

  1. 縦はsinθ * パラメータで設定された移動距離数
  2. 横はcosθ * パラメータで設定された移動距離数

となります。

続きを読む