このページでは、タッチした軌跡がキラキラと光るエフェクトを表現してみます。
|
|
- design関数に
screen.clearColor = .darkGrey
を書きます。背景は濃い灰色です。
- update関数を用意します。
for touch in screen.touches
でタッチのループを作ります。触れている指すべてをとらえます。
- 初期化のための値を計算し、変数に代入します。
-
let max_dist = 80.0
- タッチ位置からの最大距離。80.0を代入します。
-
let radians = (0.0...2.0).randomize * Double.pi
- 進行方向の角度。0~2πラジアン(=0~360度)のランダムの値を代入します。
-
let d2 = max_dist * (0.0...1.0).randomize
- タッチ位置からの距離。最大値に0.0~1.0を掛けた値を代入します。
-
let dx = d2 * cos( radians )
- x方向移動量。d2にradiansのコサイン値をかけて代入します。
-
let dy = d2 * sin( radians )
- y方向移動量。d2にradiansのサイン値をかけて代入します。
-
PGAddMask( "mask-sparkle" )
で輝きのマスクを描きます。
- 初期設定のコードを書きます。
-
.color( LLColor( 1.0, 0.6, 0.4, 1.0 ) )
- 色。明るめの橙を設定します。
-
.position( cx: touch.x + Float( dx ), cy: touch.y + Float( dy ) )
- 位置。タッチ位置にdx,dyを足した値を設定します。タッチ位置からmax_dist半径内のいずこかに位置するようになります。
-
.alpha( 0.0 )
- アルファ値。0.0を設定し初期は透明にします。
-
.scale( square:24.0 )
- 大きさ。24.0で固定にします。
-
.deltaScale( dw:0.5, dh:0.5 )
- 大きさの変化量。縦横とともに0.5ずつ大きくしていきます。
-
.deltaAngle( degrees:(0.5...1.0).randomize )
- 角度の変化量。0.5~1.0のランダム値を設定します。
-
.deltaLife( -0.03 )
- ライフの変化量。-0.03で30フレーム強で消えるようにします。
-
-
.iterate{ }
を用意して、毎フレームで計算を行います。$0.alpha = sin( $0.life * Float.pi )
- lifeの値を用いてサイン値を計算し、アルファ値を変化させます。
上記の計算により、始まりはalpha = 0.0、life = 0.5の時にalpha = 1.0、life = 0.0になるとalpha = 0.0になり、始まりと終わりで透明になります。
- 「コードを実行」を押します。
目標
- 実行後、タッチの軌跡にキラキラ輝くエフェクトが出れば成功です。