ASTER : Beta 06F rev.1 : Overviews 1


ASTER (旧 REGEX ECMA) は CF25 上で正規表現を扱う拡張機能として作成されました。正規表現以外の機能についても随時サポートするようになり、Objects Control も補助機能の一部として極簡単な仕様で開発がスタートしました。


※ Beta 06F rev.1 公開中、ドキュメントを随時アップデートしています。更新中。

現在、正規表現を利用する拡張機能としてはほぼ完成し、簡易的な補助機能だった Objects Control を大幅に仕様など拡大しながらベータ版として提供、本ブログ記事は Objects Control の機能概要を現状にて説明するドキュメントの代用として作成されました。この文章は Beta 06F rev.1 までに実装された機能を基に仕様を説明しています。ここで公開された仕様は変更される可能性があります。

ライセンス(利用許諾)について

Beta 05B rev7 からソフトウェアが 2条項 BSD License で宣言されています。商用利用可能、著作権表示とライセンス条項を記載する必要があります。BSD-2-Clause は基本的に MIT ライセンスとほぼ同じく縛りが非常に少ないライセンスです。英語で書いておかないと無効になるため添付ファイルは英語のみ。日本語訳はこちら

エクステンション配布 zip ファイル内に LICENSE.txt が添付されています。

本エクステンションを利用して配布する場合ライセンスも添付することが配布条件となります

Objects Control Beta とは

CF25 上のオブジェクトは機能ごとに種類があります。REGEX ECMA における「オブジェクトコントロール」とはアクティブオブジェクト ( Active Object )=スプライトをエクステンションで操作する拡張機能です。

REGEX ECMA + Objects Control : Beta 05B rev6 : CodeName Tsunoda Version

Active Object

DX9 対応 Shaders を利用しています

変数の自動代入機能

アニメーション方向の切り替えに対応

動作中の方向切り替えも自動で設定

Object Control : 4 つの基本機能

  • Align : オブジェクトをゲーム動作中に整列する ( Action Loop 互換)
  • + A – MOTiONS : Align と連携するモーションズ ( Action Loop 互換)
  • + B – MOTiONS : ByName 専用モーションズ ( Action Loop 非互換ループが含まれる)
  • ByName Controller : オブジェクトを名前で管理・操作する動作コントローラ ( Action Loop 非互換のループ処理がメイン)
名称 Action Loop 互換 機能
Align 有り 整列
+A-MOTiONS 有り 簡易な動作
+B-MOTiONS 無し|有り 高度な動作
ByName Controller 無し|有り 動作コントローラ

機能を利用する際に「モーショングループ名」の指定が必須 | 不要な機能

名称 名前の登録 登録方法
Align 不要
+A-MOiTiON 必須 自動登録
+B-MOiTiON 必須 自動登録 | 手動登録
ByName Controller 必須

「モーショングループ名」の登録(追加)が出来る | 出来ない機能

名称 名前の登録 登録方法
Align できない
+A-MOiTiON できる 自動登録
+B-MOiTiON できる 自動登録 | 手動登録
ByName Controller できない

「動作 (モーション)」を付与・編集することが出来る | 出来ない

名称 動作定義 動作定義パラメータ
Align できない
+A-MOiTiON 付与できる 最小限 && 簡単
+B-MOiTiON 付与できる 豊富 && 高度
ByName Controller 編集できる 追加パラメータの付与・値変更

「ByName Controller」 に出来ること ( 05C rev.4 )

機能 追記
登録オブジェクトをリスト化 簡易デバッグ機能を含む
“動作コントロールリストの編集 リストから削除やリスト更新など
Shader で半透明・Blend 色指定 DX9 Shader 専用
+A|+B MOiTiON 動作定義の追加変更 動作範囲の変更やセットアップ追加
+A|+B MOiTiON 動作を停止 Stop | Sleep | TimeInterval
+A|+B MOiTiON 停止から再開 Toggle (Stop | Move) Function
+A|+B MOiTiON 移動量を反転 Reversal Movement
+A|+B MOiTiON ターゲット変更 Change Target
+A|+B MOiTiON Orbital 開始角指定 Set Angular Rotate
+A|+B MOiTiON 半径および振幅幅変更 Grow Radius for Orb + SineWave

Object Control : 4つの基本機能

Align (整列) とは

Align (整列) はゲーム実行中にオブジェクト位置を自動で揃えるプリセット集です。位置を揃えて配置するだけでなく、オブジェクトの持つ変数に連番 (Spread Value) 割り振りも同時に行います。複数オブジェクトインスタンスを扱う際に連番を割り振る作業を自動化し、位置揃えに必要な計算を自動化しました。配置する際にアニメーションフレームのサイズを検出して位置揃えに反映したりアニメーション方向を自動で設定することもできます。

Clickteam_Fusion25_extension_REGEX_ECMA_ONC_Align_01_vertical

Align : Vertical Column

Clickteam_Fusion25_extension_REGEX_ECMA_ONC_Align_02_zigzag

Align : Zigzag

Clickteam_Fusion25_extension_REGEX_ECMA_ONC_Align_03_rhombus

Align : Rhombus

Clickteam_Fusion25_extension_REGEX_ECMA_ONC_Align_03_rhombus2

Align : Rhombus ( Hexagon Shape )

Clickteam_Fusion25_extension_REGEX_ECMA_ONC_Align_04_InvertedTriangle

Align : Inverted Triangle

Clickteam_Fusion25_extension_REGEX_ECMA_ONC_Align_05_hexagonal

Align : Hexagonal Matrix

Clickteam_Fusion25_extension_REGEX_ECMA_ONC_Align_06_circle

Align : Circle

Clickteam_Fusion25_extension_REGEX_ECMA_ONC_Align_07_circle_hexagonal

Align : Oval Hexagonal

Clickteam_Fusion25_extension_REGEX_ECMA_ONC_Align_08_LMS_hori.

Align : LMS LtR Horizontal

Clickteam_Fusion25_extension_REGEX_ECMA_ONC_Align_09_LMS_LtR_Counter

Align : LMS RtL Counter

Clickteam_Fusion25_extension_REGEX_ECMA_ONC_Align_10_Circle_Angular

Align : Circle and Angular Startup

Clickteam_Fusion25_extension_REGEX_ECMA_ONC_Align_11_2d_depth

Align : Oval and 2D-Depth

Clickteam_Fusion25_extension_REGEX_ECMA_ONC_Align_12_semi_circle

Align : Semi-Circle

オブジェクトイメージの形状や Hot Spot 位置を工夫して配置することで単純なテンプレートから多様なパターンを設定可能です。ゲームメニュー/ゲームスコアやカスタム・カウンターで活躍します。

スロットマシン風カウンター動作サンプル (動画 GIF)

Objects Control : Align のデモ ( Grid ) 動画 GIF

上記 Grid デモを CF25 の Event List で出力したものが以下。

Event List の画面

上記画像例の場合、初期位置入力後、X グリッドサイズとオブジェクトインスタンス間マージンを設定すれば後はエクステにお任せです。2行( 3 Actions )で上記イベントを作成できるようになりました。

Align の仕様について

1:整列する対象オブジェクトがインスタンスとして事前にフレームに作成されている必要があります。

2:整列の開始位置をパラメータで入力する通常配置と、LMS 命令など配置するオブジェクトの位置が予め決まっていて整列開始位置入力不要なものがあります。

3:配置時にアニメーションフレームを停止してアニメーションフレームを指定・変更する命令があります。

4:整列時に利用されるアニメーション方向はデフォルトの 0 、Animations は Stopped が利用されます。以下画像を参照。

Active Object の Image Editor から見たデフォルト設定を利用している

5:整列時 ID が自動で割り振られるため変数の予約として (0) Alterable Value A を利用します。以下画像参照。

インスタンス変数へ ID を自動で代入する機能で利用される予約変数

予約変数 : 一覧

デフォルト名 インデックス値 値 説明 変数名 (小文字二文字)
Alterable Value A 0 ID (spread value) id
Alterable Value B 1 Sleep 値 sl
Alterable Value C 2 Time Interval 値 ti
Alterable Value D 3 Angle 値 ag
Alterable Value E 4 Time Interval 値 gt

動作サンプルで変数に利用される略語は命名規則としてアルファベット小文字二文字となっています。強制ではないので自由に名前は付けられますがインデックスは変更できません。

Align のループ処理は CF25 の Action Loop 互換で以下 +A-MOTiONS と連携できます。

+ A – MOTiONS ( Compatible Action Loop )

整列機能を使った後に動作を付ける機能が「 + A – MOTiONS 」です。パラメータ入力を可能な限り少なくして簡単に動作を付けるための機能としてデザインされました。デフォルト動作に無いパラメータは後から追加・変更できます。ループ処理が CF25 の Action Loop 互換なので Align と同じ行にイベントを書くことができます。

+ A – MOTiONS の特徴

ユーザがオブジェクト動作を定義するためにはパラメータ入力を事前に行いますが、パラメータ数が多いと入力作業も大変だし途中パラメータの一部を変更する場合 CF25 の一般的インターフェース仕様だと全部を最初からやり直しになります。この苦痛を回避するため少ないパラメータ数でまず動き出し、動作概要が分かったら次に個別パラメータや動作を追加入力するという仕様になっています。

+ A – MOTiONS の仕様と Action loop

「 + A – MOTiONS 」はループ処理が Action Loop 互換なので Align と +A-MOTiONS は同じ行にイベントを置けますが、ByName 系ループ処理と Action loop はループに互換性が無いため、ByName コントロール機能を実行する際にはイベント行を分割する必要があります。

+ A – MOTiONS の仕様 16 文字制限

「 + A – MOTiONS 」は手続き簡略化のため省略されたパラメータがあります。

「モーショングループ名の登録」は省略されているため、フレームに配置されたオブジェクト名を利用して自動的に ByName コントローラへ登録されます。ByName コントローラへ登録する名前は16文字制限、これは CF25 の仕様ではなく ByName コントローラ側の制限と仕様です。ご注意ください。

モーショングループ名には日本語・英語など CF25 のフレームエディタで利用できる文字が登録に利用できます。フレームエディタで利用したオブジェクト名以外をモーショングループ名として登録したい場合、「 + A – MOTiONS 」から設定はできません。「 + B – MOTiONS 」からは設定できます。

ByName Controller

Beta 05 以降開発が続く実験的なオブジェクト動作コントロール機能が 「ByName Motion Group Controller」 です。名前が長いので「ByName Controller」とか「Named Controller」に略されたりします。「ByName 系」と呼ぶ独自設計のループ処理をエクステンション内部で実行しています。

モーショングループ名を登録してオブジェクトを操作するというコンセプトのフレームベース(タイムベースではない)のオブジェクト・コントローラです。異なるオブジェクトでも同じモーショングループ名に登録できます。登録できるモーショングループ数やオブジェクト数に仕様上の制限はありません。

※ 実用的には 100 ~ 200 程度を安定して動かす用途を想定しています

動作やグループに名前を付けて管理する

オブジェクトを名前で管理する (動画 GIF)

ByName Controller 開発経緯

Objects Control はもともと正規表現とまったく関係ない機能としてテスト実装された作者的ガジェットです。正規表現は数学的表記法が元になっていて、コンピュータでは文字列集合を操作する機能として利用されてます。正規表現を実装し動作テストしながら思ったのは、異なるオブジェクトを集合化する機能は CF25 にも Qualifier がある、けれど Qualifier はゲーム実行中に追加したり削除したり編集機能を持たない。オブジェクトやオブジェクトの動作を集合として表現するための名前を付ければ、正規表現のように文字列(=オブジェクト)の編集機能を実装できるのではないか、と考えた。

問題はそれで何が解決できるのか。それはまだ分からないけど、オブジェクト群や動作に名前を付けて操作する機能が ByName Controller です。「群」に対して命令するためのコントローラなので「個を区別する名前」を付ければ「個」を区別することもできますが、効率的な使い方ではありません。

CF25 の Create By Name という拡張機能の動作コントローラ版※とも言えます。

※ 公式機能にある Clickteam Movement Controller のこと、ゲーム実行中に Movement パラメータ変更する際に利用されるエクステ

Clickteam Movement Controller との違い、その1「フレームベース」

ClickTeam Movement Controller : 公式はタイムベース動作とフレーム動作ベースの両方に対応している

Clickteam Movement Controller というのはクリックチーム公式のエクステンションですが Movement の定義はアクティブオブジェクトのプロパティから行います。アクティブオブジェクトに付けた「動作」に対してゲーム実行中にパラメータ送信したいときに「Clickteam Movement Controller」という「拡張機能」を使います。

現在作成中の「ByName Motion Group Controller」は「Clickteam Movement Controller」を模したり競合したりする拡張機能ではなく、「Clickteam Movement Controller」には無い機能的概念を取り入れた拡張として作られています。「ClickTeam Movement Controller」と「ByName Motion Group Controller」は「タイムベース動作をサポートしているか否か」「集合を扱い群れとして整列・自動操作する」この二つが決定的に異なります。

「ClickTeam Movement Controller」はタイムベース動作とフレームベース動作の二つをサポートしています。デフォルトではタイムベースで動くためパラメータの入力もタイムベースを基にした数値がデフォルト値になっています。たとえば Angular Velocity (角速度)が 180 とか説明無しだとなんのことかと思いますが、これはタイムベースで考えると一秒間に 180 度の角速度のことだと分かります。この動作をフレームベースに置き換えると 60 FPS が一秒の場合、角速度は 1 FPS で 3 度。

「ClickTeam Movement Controller」は基本的に「時間」という概念で「速度」を求めるように作られています。フレームベースでもタイムベースでも動くようにパラメータに互換性を持たせる工夫がある。

「ByName Motion Group Controller」はフレームベースで動かすことに特化しています。タイムベースへの対応を完全に放棄した作りになっている。なぜならば「その方が作るの楽だから」。「ByName Motion Group Controller」で扱う速度という単位は「移動量 = pixel」のこと、回転するオブジェクトの角速度は「角度 = 度数法(弧度法ではない)」でパラメータ入力できます。

時間単位の移動量は各ユーザで計算してねという方向性

Clickteam Movement Controller との違い、その2「集合・整列と循環ループ」

「ByName Motion Group Controller」はオブジェクトインスタンスが複数あるという前提で整列機能および動作(モーション)は循環ループを作るよう設計されています。

ClickTeam Movement Controller : インスタンス整列や動作を作るために計算が必要

「ClickTeam Movement Controller」はフレームエディタからアクティブオブジェクトのプロパティにアクセスしてパラメータを入力します。オブジェクトインスタンスが複数ある場合には一括入力だからパラメータが全部同じ値になります。ゲーム実行中にパラメータを各インスタンス固有の値に変更するためにはループ処理を駆使して自力の計算が必要。ゲーム実行中のオブジェクト自動整列機能などもありません。

「ByName Motion Group Controller」は自動整列のテンプレートによる計算不要な「整列」がゲーム実行中に可能。そしてオブジェクトインスタンスが複数あるという前提で「循環ループ」的な動作をゲーム実行中に追加するテンプレートがあります。もちろん計算不要です。そして「循環ループ」実行中の群れに対して「名前」を付けコントロールする、これが「ByName Motion Group Controller」の特徴であり「ClickTeam Movement Controller」との違いです。

モーションの循環ループは「スタート地点から離れても時間経過と共にまたスタート地点に必ず戻ってくる動作を繰り返すもの」と定義しています。つまり Flip とか Wrap 、Orbital (Circulation) がモーションの循環ループ実装例です。どこかに飛んでいってしまって戻ってこないような動作は循環してないので循環ループではありません。

ゲームではモーションの循環ループは単純なアルゴリズムの敵動作などに利用される機会が多いです。

Flip 動作でロボットを反転させる (動画 GIF)

たとえば Flip は CF25 のイベントでごく簡単に作れるのですが if condition など最低限の条件判定は必要なのでこれを毎回自作する必要があります。しかし「 if condition 使わなくても自動でやってくれよエクステで」を実現するために作られたのが「ByName Motion Group Controller」の原点となりました。

デバッグ情報の取得

動作中オブジェクトが正常に動作しているかなどを独自にチェックするためのデバッグ機能がエクステンションに含まれます。CF25 の標準機能が提供しているデバッガとは別で、出力手順もやや複雑なので「デバッグテンプレート」が動作サンプルと一緒に配布されています。デバッグが必要な場合に活用してください。

動作中オブジェクトのデバッグ情報取得は以下の手順で行います。

デバッグ情報の取得手順

登録されたグループ全体の情報を取得する機能と、指定された名前のグループ情報だけに絞って情報を取得する二つがあります。定義されたグループや動作が多くなると画面内で動き回るオブジェクトを区別するのが難しくなるので、「指定された名前のグループ情報を取得」機能にはそれ以外を半透明化する機能が実装されています。観察対象とそれ以外を視覚的区別が容易になっています。

デバッグ用の省略語について >> 後日書く

デバッグ情報の見方、解説 (画面は開発中のものです)

省略語が多い。AVE とか AG とかは自分で考えた省略語ではなく Allie を参考にした。生命科学分野の略語なのでプログラム的な略語とは違う。

Alpha-Blending Coefficient (半透明化)

動作だけでなく Shader 機能を使った描画で基本的操作を行うことができます。

Alpha-Blending Coefficient (動画 GIF)

オブジェクトを名前から選択し半透明化する機能です。動作コントローラの共通仕様として、グループ名を指定しなかった場合、動作コントローラに登録された全オブジェクト対象の命令・操作となります。

半透明の動作デモ (動画 GIF)

半透明化はシェーダを利用しているため動作要件が DX9 および DX9 対応シェーダ必須となっています。DX8・スタンダード描画は非対応です。DX11 に関してテストが行われていません

Shader は DX9 対応だったら何でも

Alpha-Blending Coefficient Param へのアクセス

名前指定された管理オブジェクトを対象に、入力されたパラメータに応じてオブジェクトを半透明化する。パラメータは 0 〜 255 で 0 の場合は透明化しない = 表示|可視化。255 の場合、完全透明化される、結果オブジェクトは非可視化。

利用できるテンプレートモーション

モーションはメタ動作という大きなグループの中にサブ機能として Flip|Wrap などが含まれています。メタ動作は 05C rev2 までに6種類が登録されています。

メタ動作 Motion-ID サブ機能 1 サブ機能 2
NULL 0
Horizontal 1 wrap Flip
Virtical 2 wrap Flip
Horizontal Sine Wave 3 wrap Flip
Virtical Sine Wave 4 wrap Flip
Orbital 5 ownXY Target
Move Toward 6

NULL Motion

「NULL」は動作タイプを持たない空っぽの型なので動きません。動作定義が無いので勝手に動かないが、あとから動作定義を与えれば動き出します。オブジェクトを増やしても NULL は負荷が少ない、例えば移動量をゼロに指定するだけだとモーションとしての定義は機能を残しているので NULL よりも負荷は高くなる。

名前だけコントローラに登録して負荷が少ない状態で維持したい時に「NULL」を指定します

Horizontal : Wrap

Horizontal Wrap

Horizontal : Flip

Horizontal Flip

Vertical : Wrap / Flip

Vertical Wrap / Flip

Horizontal | Vertical Sinewave : Flip / Wrap

Horizontal | Vertical Sinewave : Flip / Wrap

ByName Control : Virtual Wall (範囲指定)

+ A-Motions に実装された Flip や Wrap はデフォルトで実行中アプリケーションのウィンドウサイズを計測し動作が切り替わるようになっています。

動作範囲を後から変更する機能が Virtual Wall という機能、動作に対する範囲指定効果があります。仮想的な壁を作ってその壁を使って反復動作するイメージです。

Flip に対する Virtual Wall の設定

+ A-Motions は自由度こそありませんが簡単に動作を付けることが出来、後からパラメータを追加・変更することで動作定義を変えることもできます

Virtual Wall の動作デモ (動画 GIF)

Virtual Wall : Auto Setup Menu Screenshot

ByName Control : Virtual Wall : AUTO SETUP

オブジェクトインスタンスが複数ある場合、それらを ByName Controller にオブジェクト登録する際必ず Action Loop が発生します。

アクションループ中に Virtual Wall 設定も済ませたい場合 Virtual Wall : AUTO SETUP を利用してください

駄目な例、Action Loop と同じ行で Virtual Wall 設定を実行している

正しい ①:Action Loop に互換性が無い場合、行を分けてください。

「Virtual Wall : AUTO SETUP」は Action Loop と互換性があるので ByName のモーション設定と同じ行にイベントを書けます。Orbital を除く4種類のメタ動作に含まれる2種類のサブ動作 = 合計8種類の Motions に対して同一インターフェースで値送信できます。

正しい② : Auto Setup を使う

ユーザは利用されているモーションタイプを気にせず値を送信でき、送信された値の内容はエクステが解析して Top , Left , Right , Bottom に自動振り分けするため、例えば右左の値を間違えて送信したとかユーザの誤操作・誤送信をフォローする機能も内包されています。

Orbital モーション

05B rev7 で円動作「 Orbital 」が実装されました。Orbital は circulation movement つまり「円運動」ですがわざわざ「 Orbital 」と名付けたのは力学系ではなく宇宙空間を周回する「衛星」をイメージして機能実装していたからです。

周回の中心となるターゲットを入力し半径・角速度を入力するというプロトコルで、ベクトル計算を使っていないけれど中心座標の入力不要なのが特徴。ターゲットが動いた場合でも追従するので動作と別の動作を合体させることができます。

Access to the menu : + A – Motions : Orbital

Rotate Monster

3つの円動作を組み合わせた例

REGEX ECMA + Object Control Beta.05C rev1

Clickteam の Movement から Regular Polygon をセンターのオブジェクトに適用した例 (動画GIF)

動作を作るためのイベントラインはどうなるかというと、以下

2 Actions を実際には 1 Event Line に収めることができます

計算不要そして 2 アクションで実現可能。

+ B – MOTiONS

+B-MOTiONS は +A-MOTiONS よりも高度な設定でオブジェクトを動かすためのモーションテンプレートです。

+A-MOTiONS は入力パラメータをなるべく減らして簡単に動作を付けることができるように工夫されています。しかしパラメータが少ない分デフォルト動作をカスタムしたい時には別の手間がかかる場合があります。

+B-MOTiNS は細かいパラメータ入力が可能だが動作パラメータの意味が分からないと意図した動作を作れない可能性があります。+A-MOTiONS よりもパラメータに詳しい知識が必要になる分「高度」ですが、動作をカスタムできる自由度は +A-MOTiONS よりも優れています。

+B-MOTiNS の Orbital は +A-MOTiONS からは指定できない細かいパラメータに対応します

Orbital : 初期配置と動作仕様

メタ動作「Orbital」は円運動の中心座標を自己の XY とするかターゲットの XY とするか、サブ機能2種類が実装されています。どちらも共通した仕様として「 Clockwise 」があります。円運動する具体的なイメージとして作者は「時計」を意識しながら作っていたので Orbital の実動作も「時計」を模しています。初期配置は時計の 0 時、進行方向は AVE にプラス値を与えると時計回り(右回り)など。

※ Angular Velocity = 角速度の略語 = AVE

AVE ±で回転方向を決定

動作デモ (動画 GIF)

一番左は動作を停止してあるのではなく AVE (角速度)の値を 0 にしてあるため停止しているように見えます。+A-MOTiONS は円運動の開始位置をデフォルト値から変更できませんが +B-MOTiONS は初期パラメータ入力で動作開始角度の設定が可能。

Orbital : パラメータ : 開始角度の設定

開始角度を設定 ( +B-MOTiONS )

+B-MOTiONS の Orbital はパラメータ設定から開始角度位置の指定が可能です。開始角度には 0 〜 360 度範囲の値を入力してください。マイナス値への対応もあります。

インスタンス変数への自動代入機能で利用される Reserved Variables を利用するとオブジェクトインスタンス現在の角位置情報を得られます。

インスタンス変数への自動代入機能で利用される予約について

予約変数 : 一覧

デフォルト名 インデックス値 値 説明 変数名 (小文字二文字)
Alterable Value A 0 ID (spread value) id
Alterable Value B 1 Sleep 値 sl
Alterable Value C 2 Time Interval 値 ti
Alterable Value D 3 Angle 値 ag
Alterable Value E 4 Time Interval 値 gt

開始角度とインスタンス変数から得られる角度情報の詳細

角度情報は -180 〜 0 〜 +179 の範囲で収まるように予め加工されたデータになります

Orbital : パラメータ : 中心からのマージン位置

中心からのマージン位置を設定 ( +B-MOTiONS )

ByName Control : Change Target (for Orbital)

Target を変更 ( Orbital )

動作ターゲットを切り替える命令、現在はターゲットを使った処理が Orbital だけなので Orbital around TargetXY 動作でのみ機能する命令です。ターゲット切り替えのタイミングやそれぞれの距離が遠すぎると不自然な動きになるので、これらを考慮しながら使うと便利な機能になる。

動作サンプルではゲームメニューの作例などに活用されています。

ByName Control : Start Angular Rotation (for Orbital)

※ 05C rev2 から実装

指定された角度で動く、タイムインターバル設定を含んだ Oribital 専用のセットアップ・モーションです。(※ Action Loop 非互換)

Start が略され Angular Rotate などと呼称されますが、動作が停止していても自動的に解除し動作を開始するため正式名「Start Angular Rotation」です

常に角度が一定を保つ規則的な動作、指定された角度に到達するとインターバルとして指定されたフレームタイム間一時停止する、停止と再開を組み合わせた動作が Start Angular Rotation です。角度を検出するロジックが重要なので Orbital 専用として作られました。Sleep 命令と組み合わせ利用することも可能ですが、Sleep の Time Interval 設定は Orbital で無効化されます

Angular Rotate の Time Interval で停止中は各オブジェクトのインタンス変数にタイムリミットまでのカウントを送信しているので変数値を利用したイベント自作が容易。繰り返し動作は回数指定か無限ループ指定がパラメータから設定可能です。Sleep や Reversal Movement との組み合わせでゲーム実行中でも細かく動作を定義しカスタム可能。

ByName Control : Sleep

実行中動作に Sleep を挿入。(※ Action Loop 非互換)

ゲーム FPS が 60 の場合、Sleep 値を 60 とすれば一秒毎にちょっとずつ動くようなストップモーション動作なども作れます。

Sleep は概念的には一時停止 ( Stop|Pause ) と同じですが、05C rev2 以降「自動停止→自動再開→自動停止」などルーチンを繰り返す (動作を再開する) 前提で Time Interval 設定を含む形の機能実装が施されました。

Null Motion や Orbital に対しては Sleep の Time Interval は機能しませんが、それ以外は全動作対象です
名称 説明
パラメータ.1 モーショングループ名 空文字列の場合、全動作対象命令
REGEXパラメータ.2-1 Sleep 値 実行中動作を一時停止する時間
REGEXパラメータ.2-2 Time Interval 値 Sleep 実行までの時間を入力
REGEXパラメータ.2-3 repetition 値 繰り返し処理回数の指定

REGEX パラメータ記述例 : "60, 30,-1"

REGEXパラメータ.2-2 : Time Interval 値は Frame Time と同義、指定 Time Interval (時間) 経過後 Sleep に入り、Sleep 動作が終了後、動作再開してまた Sleep に入る。動作再開を何回繰り返すかを第四パラメータ「repetition」から指定可能。

REGEXパラメータ.2-3 : 繰り返し処理回数の指定。-1 の場合無限ループ、0 の場合 Sleep を無効化 (即時キャンセル)、1 以上の場合数値に応じた回数繰り返して 0 になったら Sleep 動作を無効化。

パラメータ.2-1 と .2-2 の値はオブジェクトインスタンスの予約変数へ出力されます。この値を評価することで Sleep 中か Time Interval 中かを区別できます

Time Interval という概念と区別

※ 05C rev2 から実装

Time Interval は「自動停止→自動再開→自動停止」などルーチンを繰り返す機能で利用される「フレーム時間」のこと。Time Interval は 「Sleep」 と 「Orbital の Start Angular Rotate」 機能から設定するパラメータはほぼ同じで、パラメータ値も互換性を持つよう考慮されています。

しかし Sleep の Time Interval と Orbital の Time Interval が機能的に重複するため Orbital では Sleep の Time Interval 設定は無視される仕様になっています。Orbital は移動量という概念が角速度 (Angular Velocity) に置き換わっているため、「角度」というパラメータが他動作と互換性取れなかったので Orbital 専用の命令が設けられました。

ByName Control : Reject Time Delay

※ 05C rev2 から実装

「Reject Time Delay」 も上記 Time Interval と同じく「指定されたフレーム時間が経過後」に自動実行される機能です、しかし Reject は「オブジェクト動作」では無いこと、そしてコントロールリストから削除した後に自動で再登録するルーチンも無いので「Time Interval」ではなく「Time Delay」として名前は区別されています。

そして名前の通り「遅延実行」される Reject 機能が 「Reject Time Delay」 です。動作定義を無視して実行されるため Null Object に対しても有効な命令。一度発行するとキャンセルが効かない機能でもあります。

ByName Control : Reject

ByName コントローラに登録されたグループ名を指定してコントローラから削除する機能が 「Reject」 です。名前が指定されなかった場合には全登録グループが対象の一括操作となります。

ByName コントローラから登録が削除されるだけなのでインスタンスは破棄 (Destroy) されません。Reject された時点で登録されていたモーション情報も消えるため Reject されたオブジェクトは動作を停止します。

ByName Control : Delete

ByName コントローラに登録されたグループ名を指定してコントローラから削除し、同時にインスタンスを破棄 (Destroy) します。

ByName Control : Reversal Movement

移動量の反転、NULL を除く全動作対象。

Orbital に対しては角速度の反転、Horizontal | Vertical に対しては移動速度の反転命令として機能します。移動量の反転と同時に進行方向も反転するため、Horizontal | Vertical ではアニメーション方向の自動変更に対応しています。

ByName Control : Stop Movement

Stop Movment
オブジェクトの動作を停止する

ByName Control : Toggle Stop|Move Flag

Toggle Flag Stop | Move
動作を停止・再開、切り替え

ByName Control : Update Control List

※ 05C rev2 から実装

Update Control List >> オブジェクトインスタンスが ByName Controller 以外の命令で破壊された時、コントローラから登録情報を削除してコントロールリストを手動更新するための機能。

ByName Control : Grow Radius

※ 05C rev.4 から実装

Grow Radius (動画 GIF)

Grow Radius は 「Sine Wave」 と 「Orbital」 動作に対応したカスタムパラメータおよびゲーム実行中に「振幅幅」もしくは「半径」を変更するための ByName Control 機能です。

コントローラに登録された「グループ名」を対象とした「動作」を詳細に設定します。

名称 説明
パラメータ.1 モーショングループ名 空文字列の場合、全動作対象命令
名称 説明
半径.1 パラメータ.1 最大半径.1 半径.1(振幅幅)の最大値 (pixel)
半径.1 パラメータ.2 最小半径.1 半径.1(振幅幅)の最小値 (pixel)
半径.1 パラメータ.3 Delta.1 最大・最小値に到達まで加算される±値
半径.1 パラメータ.4 TimeInterval.1 目標値到達後指定フレーム時間処理一時停止
半径.1 パラメータ.5 repetition.1 繰り返し処理回数の指定.1
半径.2 パラメータ.1 最大半径.2 半径.2(振幅幅)の最大値 (pixel)
半径.2 パラメータ.2 最小半径.2 半径.2(振幅幅)の最小値 (pixel)
半径.2 パラメータ.3 Delta.2 最大・最小値に到達まで加算される±値
半径.3 パラメータ.4 TimeInterval.2 目標値到達後指定フレーム時間処理一時停止
半径.2 パラメータ.5 repetition.2 繰り返し処理回数の指定.2

予約変数 : 一覧

デフォルト名 インデックス値 値 説明 変数名 (小文字二文字)
Alterable Value A 0 ID (spread value) id
Alterable Value B 1 Sleep 値 sl
Alterable Value C 2 Time Interval 値 ti
Alterable Value D 3 Angle 値 ag
Alterable Value E 4 Time Interval 値 gt

REGEX パラメータ記述例 : "150, 0, +1, 300, -1, 150, 0, +1, 300, -1"
最大半径 150px、最小半径 0 px、変化量 +1、タイムインターバル 300 Frame、無限ループ指定(-1)、<以下半径.2 に対する指定>

最大半径.1 : 最大半径を目標値で指定。デルタがプラス値の場合に最大半径になるまで半径は大きくなります。目標値を達成するとタイムインターバルを経てデルタは値反転。

最小半径.1 : 最小半径を目標値で指定。デルタがマイナス値の場合に最小半径になるまで半径は小さくなります。目標値を達成するとタイムインターバルを経てデルタは値反転。

デルタ.1 : 半径の変化量。デルタ.1 と.2 が両方ゼロの場合、カスタムパラメータの送信は無効化されます。つまり片方が必ずプラスかマイナス値、ゼロ以外の数値を入力してください。

タイムインターバル.1 : デルタ値がプラスからマイナスに変化したタイミングを区切りとした Grow 処理の一時停止。フレームタイムを指定。インターバル終了後デルタが値反転。

Repetition.1 : 繰り返し処理。デルタ値が値反転するタイミングを区切りとしたループ処理の繰り返し指定。パラメータ -1 で永久ループ。0 は繰り返さない。

Orbital は楕円軌道を作るために半径を二つ指定できるようになっています。Sine Wave は振幅が一種類なので実際に利用するパラメータは半径.1 に相当する部分しかパラメータは利用されません。しかし REGEX パラメータは書式を厳密にチェックする仕様なので、互換性維持のために Sine Wave には不要な半径.2 パラメータの記述も必要になっています。以下サンプルでは半径.2 パラメータ部分は「0」で埋めてあります。

REGEX パラメータ記述例 Sine Wave 用 : "150, 0, +1, 40, -1, 0,0,0,0,0"
最大半径 150px、最小半径 0 px、変化量 +1、タイムインターバル 40 Frame、無限ループ指定(-1)、0,0,0,0,0


Leave a comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

One thought on “ASTER : Beta 06F rev.1 : Overviews