「moveであそぼう!〜デスクトップを動きまわるゴーストを考える〜」 - buynowforsale様

  • 自己紹介
    • 作品「エイミーとチー兄ィ」「スペースインベーダー
    • デスクトップをインベーダーが動き回るゴースト(写真)
  • デスクトップを動き回るゴーストって?
    • The Hand (moveタグ)
    • ゆっくりさんぽ (moveタグ)
    • (・∀・) (wmove.dll)
    • とことこシリーズ (winpos.dll)
    • ゆかさくら(?)
  • スペースインベーダー」ではmoveタグを利用しているが、moveって?
    • デスクトップ座標系は左上が(0,0)で、下・右へ行くと数字が増える。
    • \![move,200,fix]→デスクトップの指定座標へ動かす。(200,元のY座標)
    • \![set,alignmentとdesktop,free]→デスクトップのどの辺に固定するかを指定。
    • 移動完了までの時間を指定することも可能
    • 指示する座標の基準点も指定できる(\![move,200,-400,0,screen,left.bottom])
      • →左下の角から、右に200、下に-400(上に400)移動した点に移動する。ゴーストの\0側を基準にするなども可能。
    • サーフェスのどこを位置の基準点にするかも指定可能。(\![move,50,50,0,1,center.center])
      • 上記の例では、\0のleft.topを\1のcenter.centerにもって来る
      • \![move,50,50,0,1,center.center,center.center] のとうな書き方も可能。
    • 指示する座標の基準点も指定できる。
      • 自分自身(me)、「Sakura名/ID」で他のゴーストも指定できる。
      • キャラクターを利用した基準点指定について、surface.txtのpoint.basepos 指定を用いることができる。(デフォルトではleft.topが基準)
  • 例:ゴーストの演技として
  • moveとmoveasyncの違い
    • 扱うパラメータに差はない
    • さくらスクリプト実行時に、キャラクターの移動をスクリプトの実行に同期させるかさせないかの違い
    • 要するに、移動しながら喋り続けるかどうかの違い(asyncだと動きながらも喋る)
  • moveとSHIORiイベントを組み合わせてみる
    • スペースインベーダーの例
      • OnDisplayChangeでデスクトップの大きさを取得
      • OnSecondChangeで一秒ごとにmoveasyncで場所を移動
      • 里々での繰り返し命令を使い、\0〜\8を動かしている
  • 動きに変化をつけたい
    • 直線移動だけでなく曲線的な移動もできるとより可愛くなる
    • ふわふわと漂うように動いてみたり、円や渦巻きをぐるぐると動かす
      • 三角関数を使用する(x=t、y=sin t)
      • 円運動させる(x=cos t、y=sin t)
      • サイクロイド(x=(5-2)cos t+2 sin(1.5t)、y=(5-2)sin t+2 cos(1.5t)、
  • まとめ
    • move、moveasyncは単体で使うだけでなく、他のイベントや関数と組み合わせることでより多彩な動きをデスクトップ上で表現することができる
    • 数学や物理の知識を利用すればより豊かな動きを表現できるよ!
  • 質疑応答
    • 文系にもわかる数学の本はないですか
      • ちくま書房から最近出た「数学入門」とかオススメ。
    • 現在のシェルの位置を取得するのは?
      • ゴースト側で実装してください。
    • move中のゴーストを掴みたい
      • moveキャンセルタグをつくります。スタジオ行き。
    • moveasync中にmoveasyncすると?
      • バグります。やんな。
    • キャラクターは動かし、バルーンは動かさないようにしたいが?
      • moveasyncでは現状できない。仕様書提出してください。