ここでは趣向を変えて、 指を離した時に指の移動した方向に光の線を描きます。
|
|
- design関数に
screen.clearColor = .darkGrey
を書きます。背景は濃い灰色です。
- update関数を用意します。
for release in screen.releases
でリリースのループを作ります。離れた指をとらえます。
- 3のループ内で
for k in 0 ..< 4
を書き、 加算合成のブラー円PGAddBlurryCircle()
を作ります。ブラー円を4つ重ねます。
- 図形の初期化に用いる値を計算し、変数に代入します。
-
let dx = release.x - release.startPos.x
- タッチを始めた位置(release.startPos)、指を離した位置(release)のx方向の距離をdxに代入します。
-
let dy = release.y - release.startPos.y
- タッチを始めた位置(release.startPos)、指を離した位置(release)のy方向の距離をdyに代入します。
-
let angle = Double( atan2( dy, dx ) )
- dx, dyを使って図形の角度を計算します。atan2という関数で角度が得られます。
-
let base_size = Float( 40 + 10 * k )
- 4つのブラー円の大きさです。kを使って少しずつ大きくした円を重ねます。
-
- 図形の初期設定のコードを書きます。
-
.color( LLColor( 0.2, 0.4, 0.6, 1.0 ) )
- 色。薄青を設定します。
-
.position( release.startPos )
- 位置。タッチした初期位置を設定します。
-
.angle( radians:angle )
- 角度。計算したangleを設定します。進む方向に傾けます。
-
.deltaPosition( dx: dx * 0.08, dy: dy * 0.08 )
- 位置の変化量。計算したdx,dyを0.08倍して設定します。
-
.deltaLife( -0.02 )
- ライフの変化量。50フレームで図形が消えるようにします。
-
.scale( square: base_size )
- 大きさ。計算したbase_sizeを設定します。
-
.iterate{ }
を用意して、毎フレームで計算を行います。-
$0.deltaPosition.x *= 0.93
- x移動量に0.93を掛けて、フレームごとに移動量を減らしていきます。
-
$0.deltaPosition.y *= 0.93
- y移動量に0.93を掛けて、フレームごとに移動量を減らしていきます。
-
let speed = sqrt( $0.deltaPosition.x * $0.deltaPosition.x + $0.deltaPosition.y * $0.deltaPosition.y )
- deltaPositionからスピードを計算します。
-
$0.width( base_size * ( 1.0 + speed / 10.0 ) )
- スピードによって図形の幅を変えます。速度に合わせて図形が伸びます。
-
.alpha( $0.life )
- アルファをライフと同じ値にします。
-
- 「コードを実行」を押します。
目標
- 実行後、指を離した時に、光線が飛ぶ表現ができれば成功です。