月別アーカイブ: 2020年2月

speakedraw(5) – キャンバスの初期化など


進行方向が変わるタイミングで3つのオブジェクトの表示順が変わりまた100回のうちに表示内容が消去されるようになります。ランダムの機能を使用しているのでいつそうなるのかは神のみぞ知るって感じです。。。また方向転換するたびに奏でる音も変わります。どんな音が出るかもまた神のみぞ知るって感じです。。。
関数resetCountで表示状態の初期化とどのオブジェクトが前に来るとかと言う表示順を設定して、関数playSoundでどんな音を出力するのかを設定しています。

という感じでこのプログラムの解説を終わりにしようと思います。
最後に説明しきれなかった部分等も含めた全体を記載しておきます。
次回はこれを応用したものを作ってみようかと思ってます、はい。
動作するプログラムはこちらです。
続きを読む

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度になります。
動作するプログラムはこちらです。
続きを読む