Beta.05B rev7 からの続き
バグ修正履歴
バージョン | 修正対応 | 詳細 | 備考 |
---|---|---|---|
05C rev1 | 済み | 名前の重複登録 | af_cmp の方 |
05C rev1 | 仮対応 | +A-M:Hori-Flip の出現位置 | 移動量 12 px 迄なら正常 |
05C rev2 | 仮対応 | +A-M:Vert-Flip の出現位置 | 移動量 12 px 迄なら正常 |
05C rev2 | 済み | 名前が登録されない | oi_controlled の方 |
05C rev2 | 済み | Align >> Vert (T to B) | Anim Frame Start index 1 >> 0 |
05C rev2 | 済み | Align >> Zigzag の Margin 指定 | 実装を忘れてた |
05C rev2 | 仕様変更 | 予約変数(3) を ag で利用 | 予約変数(2)から(3)へ |
05C rev2 | 済み | Reversal Movement の Anim Dir | 自動化対応 |
05C rev2 | 済み | Set Alpha Coefficient | プロパティ値無効のバグ修正 |
05C rev2 | 済み | Align >> Circle | Anim 停止と AnimFrame 設定 |
05C rev2 | 済み | Align:Grid を Rectangle Matrix へ | 主に名前変更+その他調整等 |
05C rev2 | 済み | Align:Rhombus は Square Matrix | 正方行列が必須 |
05C rev2 | – | – | – |
05C rev2 | – | – | – |
インスタンス変数の予約一覧 (05C rev2)
予約変数位置 | 略語 (Abbreviations) | 詳細 | 備考 |
---|---|---|---|
(0) | id | ID | インスタンス ID として |
(1) | sl | Sleep | Sleep 用フレームタイム |
(2) | ti | TimeInterval | Sleep 用フレームタイム |
(3) | ag | Angle | 角度 (-180 ~ 0 ~ +179) |
– | – | – | – |
– | – | – | – |
新機能
バージョン | 名前 | 対応 | 詳細 | 備考 |
---|---|---|---|---|
05C rev1 | sleep | 完了 | sleep の挿入 | 全動作対応 |
05C rev1 | reversal movement | 完了 | 移動量の反転 | 全動作対応 |
05C rev1 | change target | 完了 | ターゲット変更 | Orbital に対応 |
05C rev2 | ※ angular rotation | 完了 | 角度指定移動 | ※タイムインターバル含む |
05C rev2 | Momentary Pause | 完了 | 角移動後一時停止 | Orbital 専用 |
05C rev2 | Time Interval | 完了 | タイムインターバル | Sleep 用 |
05C rev2 | Update Control List | 完了 | コントロールリスト更新 | Destroyの検出(手動) |
05C rev2 | Align:Semi-Circle | 完了 | 半円 + 方向指定 | 整列 |
05C rev2 | Align:Rhombus | 完了 | ひし形の Matirx | Grid 整列 (正方行列) |
05C rev2 | Align:Hexagonal | 未 | 六角形の Matrix | Trapezoid Matrix |
05C rev2 | Convert AG 2 aDirs | 未 | 角度を Anim-Dirs 変換 | Expression |
05C rev2 | Grow Radius | 未 | Radius を動的に変更 | Orbital + SineWave |
05C rev2 | – | – | – | – |
05C rev2 | – | – | – | – |
※ angular rotation = 角度指定移動 >> Orbital に対応。Angular Rotate はサブ機能として TimeInterval と Memontary Pause 設定を含む。Angular Rotate 中に Sleep も併用可能だが Sleep の TimeInterval は Orbital では無効化されます。
※ タイムインターバル = TimeInterval >> 指定した移動量やフレーム時間経過後に動作を Sleep する、Sleep 後自動的に動作再開する。 Orbital 以外は Sleep からタイムインターバルを設定する。Orbital は専用の TimeInterval 機能を持っているので Sleep から設定された TimeInterval 値は無効化される。Orbital の TimeInterval 値を無効化する Momentary Pause というオプションが有効化されると自動停止後に動作を自動再開しなくなる。MomentaryPause は Angular Rotation 機能から設定する。Momentary Pause は Sleep 機能を利用した「動作の一時停止機能」として Orbital にのみ実装、TimeInterval は Sleep 後に動作を「自動で再開する」ための機能として実装されています。Sleep も一時停止 (Stop | Pause) みたいなものですが、Sleep 後に必ず目覚める (動作を再開する) 前提の機能なので、Stop とは異なる機能として実装されています。
動作サンプル
バージョン | 名前 | 詳細 |
---|---|---|
05C rev2 | Motion Control Debug Template | 一部修正+Shape 追加 |
05C rev2 | Change Target+Sleep+ReversalMov | Orbital の活用例 |
05C rev2 | Update List+Sleep_TimeInterval | コントロールリストの更新 |
05C rev2 | Reject Sample (Choose_Ur C) | ゲームメニューの作例 |
05C rev2 | Angular Rotate (for Orbital) | 角移動とタイムインターバル活用 |
05C rev2 | Horizontal Align >> Zigzag | 整列サンプル (マージン利用) |
05C rev2 | Exceptional_Align (use Orbital) | 特殊な整列 (六角形) |
05C rev2 | – | – |
Orbital
rev7 でメニューだけ実装してあった By Name 系モーション Orbital を 05C rev1 へ2種類実装。+A-Motions とほぼ同じ機能だが +B-Motions はもう少し高度なことがデフォルトからできるようになっている。高度なことができる半面パラメータ入力が多くなってしまうのでここからパラメータ入力に正規表現を利用していく。
正規表現を利用することでパラメータの入力は6つの異なる数値を一つのパラメータとして送信できる。具体的には以下のような記述で
"100, 100, 002, 90, 0,-10"
Radius1, Radius2, AngularVelocity, StartupAngle, CentreXoffset, CentreYoffset が上記、正規表現を使うので少しだけ見やすく文字列を整形することができる。例えば各要素間にスペースを挿入したり、桁を揃えるために 0 fill 使ったりが可能。まだちょっと不具合もあるが実用上は問題ない。
複数パラメータを一つにまとめたことによって数値の一覧性が向上、パラメータの部分的修正が簡単になどが良い面。悪い面としては文字列として送信するので正規表現使って6つの値に分解するためのコストがかかる。そしてもう一つ、入力パラメータに不備があるとそれを検出・訂正する機能は無いのでフェイルセーフでは無いかもしれない点。メリットとデメリットが相克する内容なので評価は分かれるかも。
パラメータの集約は成功したので今後は複雑なパラメータも一つのインターフェースから送信できるようになった。+A-Motions はパラメータの入力が最小限になるよう工夫されたデフォルト動作、+B-Motions はパラメータに REGEX 使って集約パラメータとして送信することによって複数パラメータを一度に送信できる高度なデフォルト動作。A と B で Motions にはこのような区別がある。そして +B-Motions は名前で操作ができ Action Loop の影響を受けない。
+B-Motions : 楕円 ( Oval )
+B-Motions の Orbital は楕円軌道 ( Elliptic orbit )を描けるように調整されています。+A-Motions はデフォルトで真円のみ、+B-Motions は Radius 値を二つ送信して楕円を作れます。Radius は一方の値を 0 にすれば Flip のような動作も作れますが、動作を組み合わせることでもっと複雑な動作を作ることもできます。
上の動画 GIF はパラメータの異なる円動作を3つ組み合わせ、05C rev1 から実装された Reversal movement を利用してクリック毎に対象の移動量を反転させています。Orbital の円動作はターゲットに追従するため瞬時に予想できない複雑で滑らかな曲線軌道を描くこともできます。
ByName Motion Controller は複数オブジェクトを一括操作するのが得意なのでパーツを用意して組み合わせればこんな怪物を簡単に作ることができます。
円運動から角度を提出
Orbital 系の動作は ID 自動の割り振り以外に角度情報を各インスタンス変数に送信しています。
AngluarVelocity で回転方向を決定していますが、数値が正値の場合時計回り、負の場合半時計回り、アングル開始位置は時計の針 0 時( 12 時)を基準にしてあります。AVE が +1 の場合 60 FPS 動作だと一秒で 60 度回転して 6 秒で一回転。つまり AVE が分かれば角度なんて自在に求められるので、インスタンス変数に送信しているのはそういう角度情報ではありません。作者用なので一般向けではないかもしれませんが -180 〜 0 〜 +179 の範囲で制約された数値です。0 から始まって +179 で数値が -180 に切り替わり 0 になるまで増加していくパターン。角度がマイナスの時は左、プラスの時は右など方向を検出できるのと、絶対値 ( abs ) を使うとマイナス値とプラス値で同じ値を得られるようになっています。これも主に方向などを検出するための仕組みです。
05B まではまだ仕様が曖昧だった部分ですが、05C からは上記仕様が全ての Orbital に適用されてます。
Reversal Movement
※ rev1 には動作サンプルが含まれていません。
移動量を判定して移動方向を反転させる命令です。05C rev1 から実装されました。
ByName 系命令なので名前を空で送信すると登録された全オブジェクトが対象の命令となります。送信された名前に該当がない場合(たとえば大文字と小文字を間違えたとか)には何もせずエラーも返しません。送信された情報とグループ名が一致すれば一致したオブジェクトインスタンスのみが対象の命令となります。
移動量については各 Motions で縦移動・横移動・角速度と異なるのですがモーションの違いはエクステが検出するので、ユーザー的には命令を送信すればいい後はエクステが自動で判別しなんとかする。だから異なるモーションでも一括で動作反転可能になっています。
Insert Sleep
※ rev1 には動作サンプルが含まれていません。
Frame Time を使った Sleep の挿入命令です。動作に Sleep を入れてストップモーション動作、あるいはゲーム FPS が 60 の場合、Sleep を 59 とすれば一秒毎に動く。
第3パラメータは繰り返し処理回数の指定。-1 の場合永久ループ、0 の場合 Sleep を無効化する、1 以上の場合数値に応じた回数繰り返して 0 になったら Sleep を無効化。
Change Target
※ rev1 には動作サンプルが含まれていません。
動作ターゲットを切り替える命令、現在はターゲットを使った処理が Orbital だけなので Orbital around TargetXY 動作でのみ機能する命令です。ターゲット切り替えのタイミングやそれぞれの距離が遠すぎると不自然な動きになるので、これらを考慮しながら使うと便利な機能になる。
動作サンプルを追加
05B rev7 までの機能を使った動作サンプルが概ね完成。動作サンプルを作るために 05B rev7 から Debug Template というテンプレ mfa を添付してあります。デバッグ情報の取得はすこし手順が複雑なので毎回作らなくてもよいテンプレを用意してこれを利用すれば製作が楽になります。
05C からは Shader も実験していくので動作サンプルに passthrough というシェーダも添付します。このシェーダは一番基本となる「何もしない」シェーダ、RGB を無加工で出力する( パススルーする )だけのシェーダです。05C rev1 サンプルで利用されたシェーダは基本的なものだけ、一応サンプルファイルとともにシェーダも添付されています。シェーダで警告が出たら effects フォルダにシェーダをコピーしてください。
05C rev1 準備中
12 月頃。今年最後のリリースバージョンとなる予定。05B rev7 との動作互換性はありますがサンプルも更新追加したので古いファイルは消してください。今後も使うので警告が出た場合エフェクトにシェーダを追加していただければ幸いです。
05C rev1 公開
05C は 05B rev7 から正当進化したバージョンアップ + バグフィックス版。05B では安定しなかった動作互換性を 05C では互換性維持しながら新機能を追加していく方針。ただし 05C で実装された新機能については来年のアップデートで互換性を切る可能性があります。そのため新機能を使った動作サンプルも付属していません。
05C rev1 は動作サンプルが増えました。05B rev7 が完成した時点で一度コーディング作業から離れてここまでに実装された機能でしっかりと動作サンプル作ると決めていたので、アイディア出しながら素材作ったり動作作ったりの中で「次はこんな機能が欲しいな」を考えながらメモってました。その結果 05C rev1 にはまず Sleep と Reversal Movement と Change Target が実装されそれぞれ具体的な活用法については来年公開の rev2 で紹介できると思います。
REGEX の後に動作コントローラを作り始めた当初はそもそもコントローラを作ることに意味あるのか自分でも疑問だったのですが、いくら考えても答えが出ないのでとりあえず作ることにしました。05B rev7 が出来た時点でこれ結構使えるかもと思うようになったけど、開発のネタが尽きないから作業の終わりもまだ見えない。どの辺を着地点とするのか考えながら、まずは今年一年ありがとうございました。また来年もよろしくおねがいします。
Start Angular Rotation ( for Orbial )
※ 05C rev2 から実装
Orbital 専用、指定された角度で動くタイムインターバルを含んだセットアップ・モーション。
メタ動作に新項目を追加するか Orbital のサブ機能として実装するかでまず悩んだ。最終的にその両方がボツ案となってコントローラから操作する機能として決着、既存機能と競合しない形で実装できるか実際に動くまでかなり不安だった。仕様・実装が二転三転したので最終的なコードの量以上に試行錯誤の時間が多くかかった機能。実用性は結構あると自負。
Sleep 機能とは別にタイムインターバルを持つ機能なので自動で動き出し自動で停まりまた動き出すを繰り返す。
Sleep 用のタイムインターバルを追加
rev1 互換性を切って Sleep にタイムインターバルを追加。rev2 以降。
Orbital の Angular Rotate にはインターバル後に自動で動き出すオプションがあって、既存機能である Sleep と組み合わせることもできる。タイムインターバルはその他のループ動作にも適用したかったので仕様を考えていたが最終的に Sleep と合体させ実現した。何が出来るのかって話だが時間経過後に停まったり動き出したりが自動化できる。停まっている間にインスタンス変数に数値を渡しておくので製作者はその数値を利用してモーション動作や一時停止中に独自のアクションを追加できる。
Sleep の Time Interval は Orbital 動作には適用されない。Orbital は Angular Rotate にタイムインターバル機能を持っているのでこれと重複するから。だから Sleep 自体は Orbital でも機能するが Sleep 設定からタイムインターバル指定しても Orbital では無視される仕様になってる。
新サーバへの移行とデータベース更新など
年末にやろう思っていたサーバのデータ移行とデータベース更新を完了。ワードプレスも内部的には刷新されキャッシュも入れたので、見た目変わらないがページレスポンスはかなり改善。速い。
MMF2 Archaeological も一応直したがこちらは過去にテーマを直接カスタムしてしまった代償としてそのテーマを今更直せなくなっていたので、仕方がない新しいテーマで仮運用中。
WordPress は使い始めた当初、ここまで立派な CMS に育つと思っていなかった。Movable Type 後継としては有力な選択肢の一つと考えていたけれど他にも Joomla! があったし、Joomla! の方がトータル完成度は高いと思ってすらいたが一年ごとにシェアを確実に伸ばした WordPress は今や不動の地位を築いた感ある。Wordpress は単純なブログとしては確かに使いやすいし機能も運用も分かりやすかった。
しかし WordPress も多機能化が進むに連れ動作が重くなりエディターが特にひどくレスポンス悪、これで嫌になって Hugo とか静的サイトジェネレータを試すようになった。ユーザからのコメントとかレスポンス受け付けないタイプのブログサイトなら WordPress である必要はないからだ。
WordPress の新しい「Gutenberg」というエディタも慣れない。GMS1.4 のページはデータベースを切り分けて WordPress 設定など含め新環境試したり php 埋め込んだり MMF/CF25 サイトとは作り方が異なっているのだが、いろいろアップデートしたら一部壊れてしまい直そうにも Gutenberg というブロックエディタが邪魔で治す気が消失。Classic Editor の何が悪いのかさっぱり分からんし、ブロックエディタの利点も今の処分からない。
rev2 用の動作サンプル
rev.1 新機能を使った動作サンプルがほぼ揃った。デバッグも兼ね少し時間置いて詳細忘れた頃に動作サンプル作るとうまい具合にバグを見つけることができたりする。プログラムをする人間は本能的に不具合起こす動作を避ける習性あるから機能実装する人とデバッグする人は別人格であったほうが良い、理想だが。
動作仕様を全部書き出すのは量を貯めてからだと忍耐も困難な作業になるので動作サンプルをこまめに作り定期的に内容を見直し追記・修正するのは重要な開発作業の一部だと個人的に思っている。
+A|B-Motions の新機能開発は Orbital で一度停止し rev.2 ではここまでコントローラの新機能追加に専念した。今年直近の目標として rev.06 へバージョンアップしたいのでこの後は Align のバリエーションを増やす予定。アイディアが貯まるまで待っていたのだがそろそろこれらを実装したい。Align の実装が終わったら rev.06 へアップして、必要な機能がまだあれば(あるが) rev.07 を目指すことになる。とりあえず 2023 年の 1 月は整列機能をもっと増やす。
Align Semi-Circle
指定角度で開始し半円を描くように整列する機能を「Semi-Circle」として実装。整列させてから Animation Directions を自動で設定して Clickteam Movement の Bouncing Ball を使って発射したりできる。
Clickteam Movement の Bouncing Ball は衝突判定のある標準動作だが、衝突判定を使わずにシューティングの敵弾など動作を自動設定する機能として使ったりもする。ここで一つ問題になるのが角度指定。Clickteam Bouncing Ball は最大 32 方向に対応だが複数オブジェクトインスタンスに対して同じ値で角度を一括設定するのは楽、しかしインスタンスごとに角度を変え個別設定したい場合はループを回し、角度を Direction に変換する計算が必要になる。
上記画像を見ても分かるが Named Motion Controller は右回り、Clickteam 系は左回りなので互換性が無い。正直これはマズいことをしたと思ったが作り始めた当初アニメーション方向を指定する機能を付けるとか真面目に想定してなかったので我主張無罪確定。
しかたがないので今回、Named Motion Controller から出力する角度情報を Animation Direction へ変換する機能も Expression に実装したが Align の Semi-Circle では計算不要、整列と同時に角度指定とアニメーション方向変更までを自動で行う。Semi-Circle は「半円」を描く機能としてデザインされたが第二引数 REGEX Params を利用して円や楕円も描けるので、配置と同時に角度を決めボタン押し一つで発射完了までが自動化される。
シューティングの敵弾配置とかマウスクリック時の演出を自動化するための機能として実装した。これまでと少し毛並みの違う配置機能になったが、整列と同時に Animation Direction が自動設定されるのはこれが最初の機能となる。
rev.02 に追加される動作サンプルまとめ
Align : Grid に Rhombus 追加
正方行列 (Square Matrix) を使って整列機能でひし形 (Rhombus) を形作る。3×3 など行要素と列要素が同数になる行列を正方行列という。
ひし形は 4 つの辺全ての長さが等しい時に成立する図形だから、Rectangel Matrix では作れないケースもあるので Square Matrix が必要ですという仕様にした。要するに正方形を 45 度傾ければ菱形になるよね、だから最初に座標変換で求めたら浮動小数点数計算の丸め誤差が発生して 1 pixel 単位で位置が微妙にずれたりする。Motion の場合 1 pixel ずれても動きがあるから誤魔化せるのだけど整列だとそうもいかないのであくまでも整数でのみ成り立つ計算をしなければいけなくなった。
発展形として Trapezoid Matrix を使って Hexagonal Matrix を作れるのでこれを実装したい。
Pingback: Beta.05B 更新履歴|仕様変更など – CF2.5 ガイド
Pingback: REGEX ECMA Beta.05C rev1 Public – CF2.5 ガイド