トリッキーな処理を組むには

はじめに

本ソフト「Rxエディタ」は、
「より柔軟な形で処理を実装できること」を目指して、
情報管理形式、および変換方式が設計されています。


1.「開始準備・描画位置・終了判定」に処理を組み込む

「描画位置・終了判定」には、HSPスクリプトを直接記述し、
「開始準備」には、HSPスクリプトを追記する構造になっています。
これらの処理がどのタイミングで実行されるかを知ることで、
本来の「描画位置計算処理」「終了判定処理」などの目的以外の処理を
自由に組んでいくことが可能になります。
実行のタイミングは以下のとおりです。

「開始準備」:場面(シーン)の開始時に、1回だけ実行されます。
「描画位置」:フレーム毎、描画中に、この描画位置を実装した、描画対象の数だけ実行されます。
「終了判定」:フレーム毎、描画完了後に、1回だけ実行されます。


2.「データ x コード」機構を利用する

「Rxエディタ」において、デフォルトで作成した情報は、
一部を除き、データファイルとして保存されています。
ここには必要な情報が保存されていて、スクリプト変換時に
代替コードが作成されます。
この方法だと、変換法則を超えるスクリプト記述はできません。
そこで利用するのがコードファイルです。
コードファイルとは、HSPスクリプトで書かれた記述で、
スクリプト変換時に、そのまま引用されるのが特徴です。

スクリプトが記述されているファイルを、
領域選択で選択すると、コードファイルとして利用できます。
「一部の個別領域のみコードファイルを利用する」
「この項目のみコードファイルを利用する」
などの部分利用も可能です。

データファイルをコード編集することで、
そのデータの代替コードがもとになった
コードファイルのひながたを作ることができます。
特に、個別領域のコードファイルに関しては、
最適な形(紐付け前の形式)として変換することができるので、
この方法で、ひながたを作成すると便利です。

主軸処理も「編集設定>外部主軸処理」にファイル名を指定することで、
自由に改変した主軸処理コードファイルを使用することができます。


3.自動生成される変数の利用・干渉をおこなう

自動生成される変数、ラベル、などを使って処理を組むことで、
よりトリッキーな処理を実装することが可能です。
これらの変数、ラベルは「Rw1Rw2Rw3x」で始まります。

以下に、主要な変数、ラベルを挙げました。

Rw1Rw2Rw3xWidth
Rw1Rw2Rw3xHeight
Rw1Rw2Rw3xWidthM1
Rw1Rw2Rw3xHeightM1
Rw1Rw2Rw3xSceneIx
Rw1Rw2Rw3xSceneNextIx
Rw1Rw2Rw3xToday
Rw1Rw2Rw3xTimeNow
Rw1Rw2Rw3xDay2MS
Rw1Rw2Rw3xDrawX
Rw1Rw2Rw3xDrawY
Rw1Rw2Rw3xBgnScenes
Rw1Rw2Rw3xEndScenes
Rw1Rw2Rw3xAtionsLen
Rw1Rw2Rw3xAtionDataA
Rw1Rw2Rw3xAtionDataX
Rw1Rw2Rw3xAtionDataY
Rw1Rw2Rw3xAtionDataW
Rw1Rw2Rw3xAtionDataH
Rw1Rw2Rw3xAtionTimes
Rw1Rw2Rw3xAtionMoves
Rw1Rw2Rw3xNextAtions
Rw1Rw2Rw3xNextTargXs
Rw1Rw2Rw3xNextTargYs
Rw1Rw2Rw3xAtionDataLens
Rw1Rw2Rw3xTargsLen
Rw1Rw2Rw3xTargs
Rw1Rw2Rw3xDeltaTime
Rw1Rw2Rw3xTargIx

*Rw1Rw2Rw3xScene
*Rw1Rw2Rw3xFrame
*Rw1Rw2Rw3xDraw
*Rw1Rw2Rw3xStop
*Rw1Rw2Rw3xCorrect
*Rw1Rw2Rw3xTime
*Rw1Rw2Rw3xBgnSc0〜
*Rw1Rw2Rw3xEndSc0〜
*Rw1Rw2Rw3xMove0〜


Rw1Rw2Rw3xWidth
<数>
起動時のアプリケーション画面の横幅。
読み込み向け。

Rw1Rw2Rw3xHeight
<数>
起動時のアプリケーション画面の縦高。
読み込み向け。

Rw1Rw2Rw3xWidthM1
<数>
起動時のアプリケーション画面の(横幅−1)。
読み込み向け。

Rw1Rw2Rw3xHeightM1
<数>
起動時のアプリケーション画面の(縦高−1)。
読み込み向け。

Rw1Rw2Rw3xSceneIx
<数>
現在実行中の場面(シーン)番号。
読み込み向け。

Rw1Rw2Rw3xSceneNextIx
<数>
次に実行するの場面(シーン)番号。
終了判定が成功した時点でのこの変数の値により、
次に実行されるシーンがきまる。
この値に干渉することで、場面(シーン)分岐処理を作成できる。
また、この値が0のときに終了判定が成功すると、
アプリケーション終了処理に移行する。

Rw1Rw2Rw3xToday
<数>
フレーム内時刻共有用「今日の日付」。
*Rw1Rw2Rw3xTimeを実行すると、現在日時に更新される。
Rw1Rw2Rw3xTimeNowとリンクした時刻が取得できる。
読み込み向け。

Rw1Rw2Rw3xTimeNow
<数>
フレーム内時刻共有用「今の時刻」。
「0時0分0.0000秒からのミリ秒」が保持されている。
*Rw1Rw2Rw3xTimeを実行すると、現在日時に更新される。
Rw1Rw2Rw3xTodayとリンクした時刻が取得できる。
読み込み向け。

Rw1Rw2Rw3xDay2MS
<数>
1日のミリ秒(=24*60*60*1000)が保持されている。
日付をまたぐ描画処理のための定数用変数。
読み込み向け。

Rw1Rw2Rw3xDrawX
<数>
描画位置の基準点x座標。
デフォルトだと、シーン毎に設定される。
この値に干渉することで、画面全体のスクロール処理
などをおこなうことができる。

Rw1Rw2Rw3xDrawY
<数>
描画位置の基準点y座標。
デフォルトだと、シーン毎に設定される。
この値に干渉することで、画面全体のスクロール処理
などをおこなうことができる。

Rw1Rw2Rw3xBgnScenes
<ラベル>配列(1次)
開始準備の飛びさきラベルの配列。
Rw1Rw2Rw3xBgnScenes([場面(シーン)番号])
飛び先に同じラベルを設定することもできる。
読み込み向け。

Rw1Rw2Rw3xEndScenes
<ラベル>配列(1次)
終了判定の飛びさきラベルの配列。
Rw1Rw2Rw3xEndScenes([場面(シーン)番号])
飛び先に同じラベルを設定することもできる。
読み込み向け。

Rw1Rw2Rw3xAtionsLen
<数>
登録された動画素材の数。
描画対象数とは関係のない、動画素材の種類の数。
読み込み向け。

Rw1Rw2Rw3xAtionDataA
<数>配列(2次)
動画素材トリミング情報、バッファ。
トリミング元になるバッファ番号を保持している。
Rw1Rw2Rw3xAtionDataA([動画素材番号],[トリミング番号])
読み込み向け。

Rw1Rw2Rw3xAtionDataX
<数>配列(2次)
動画素材トリミング情報、左。
トリミングする左上座標(左)を保持している。
Rw1Rw2Rw3xAtionDataX([動画素材番号],[トリミング番号])
読み込み向け。

Rw1Rw2Rw3xAtionDataY
<数>配列(2次)
動画素材トリミング情報、上。
トリミングする左上座標(上)を保持している。
Rw1Rw2Rw3xAtionDataY([動画素材番号],[トリミング番号])
読み込み向け。

Rw1Rw2Rw3xAtionDataW
<数>配列(2次)
動画素材トリミング情報、横幅。
トリミングする横幅を保持している。
Rw1Rw2Rw3xAtionDataW([動画素材番号],[トリミング番号])
読み込み向け。

Rw1Rw2Rw3xAtionDataH
<数>配列(2次)
動画素材トリミング情報、縦高。
トリミングする縦高を保持している。
Rw1Rw2Rw3xAtionDataH([動画素材番号],[トリミング番号])
読み込み向け。

Rw1Rw2Rw3xAtionTimes
<数>配列(1次)
動画素材、終了時間。
この時間が来ると次の動画素材に標準移行する。
Rw1Rw2Rw3xAtionTimes([動画素材番号])
読み込み向け。

Rw1Rw2Rw3xAtionMoves
<ラベル>配列(1次)
動画素材、描画位置。
実行する描画位置計算を保持している。
Rw1Rw2Rw3xAtionMoves([動画素材番号])
読み込み向け。

Rw1Rw2Rw3xNextAtions
<数>配列(1次)
動画素材、次動画。
標準終了先のデフォルト値。
Rw1Rw2Rw3xNextAtions([動画素材番号])
読み込み向け。

Rw1Rw2Rw3xNextTargXs
<数>配列(1次)
動画素材、標準横補正。
標準終了後の描画芯移動xデフォルト値。
Rw1Rw2Rw3xNextTargXs([動画素材番号])
読み込み向け。

Rw1Rw2Rw3xNextTargYs
<数>配列(1次)
動画素材、標準縦補正。
標準終了後の描画芯移動yデフォルト値。
Rw1Rw2Rw3xNextTargYs([動画素材番号])
読み込み向け。

Rw1Rw2Rw3xAtionDataLens
<数>配列(1次)
動画素材、トリミング情報数。
Rw1Rw2Rw3xAtionDataLens([動画素材番号])
読み込み向け。

Rw1Rw2Rw3xTargsLen
<数>
描画対象数。
デフォルトでは、シーン毎に更新される。
読み込み向け。

Rw1Rw2Rw3xTargs
<数>配列(2次)
描画対象情報。
デフォルトではシーン毎に設定される。
この配列順に、描画処理が実行されてく(重なると、後から描画した分が上になる)。
この項目に干渉することで、さまざまな処理が可能になる。
そもそも、描画位置計算はこの値を干渉することにより実装される。
Rw1Rw2Rw3xTargs([情報番号],[描画対象番号])
Rw1Rw2Rw3xTargs(0,[描画対象番号]):描画対象が「stop」状態であるかのフラグ。(※比較「sleep」状態)
Rw1Rw2Rw3xTargs(1,[描画対象番号]):描画対象の実行中の動画素材番号
Rw1Rw2Rw3xTargs(2,[描画対象番号]):描画対象の描画芯x
Rw1Rw2Rw3xTargs(3,[描画対象番号]):描画対象の描画芯y
Rw1Rw2Rw3xTargs(4,[描画対象番号]):描画対象の差分移動x
Rw1Rw2Rw3xTargs(5,[描画対象番号]):描画対象の差分移動y
Rw1Rw2Rw3xTargs(6,[描画対象番号]):描画対象のトリミング番号
Rw1Rw2Rw3xTargs(7,[描画対象番号]):描画対象の開始時刻「日付」
Rw1Rw2Rw3xTargs(8,[描画対象番号]):描画対象の開始時刻「時間(ミリ秒)」
Rw1Rw2Rw3xTargs(9,[描画対象番号]):描画対象の標準移行動画素材番号

描画位置計算処理の間は、Rw1Rw2Rw3xTargIxに
描画対象番号が保持されているので、
Rw1Rw2Rw3xTargs([情報番号],Rw1Rw2Rw3xTargIx)
という記述で、「現在描画中の描画対象」を指定できる。

Rw1Rw2Rw3xDeltaTime
<数>
現在描画中の描画対象の動画経過時間。
描画位置計算処理実行前に計算されるので、描画位置計算処理で使用できる。
移動などのキー変数として使用できる。
現在の動画素材に移行してからのミリ秒を返す。
読み込み向け。

Rw1Rw2Rw3xTargIx
<数>
現在描画中の描画対象番号。
描画位置計算処理で使用できる。
描画対象情報とあわせて、
Rw1Rw2Rw3xTargs([情報番号],Rw1Rw2Rw3xTargIx)
という記述に使うことができる。
また描画対象を描画していく上でのカウンターでもあり、
この値に干渉することで、
主軸処理の描画ループに干渉することも可能。
(※ループを抜けない可能性が発生するので、干渉は慎重におこなってください)。
読み込み向け。


*Rw1Rw2Rw3xScene
ラベル実体[ goto ]
デフォルト主軸処理の場面(シーン)ループ用ラベル
終了判定成功で、次の場面に移行するときはここにもどってくる。

*Rw1Rw2Rw3xFrame
ラベル実体[ goto ]
デフォルト主軸処理のフレームループ用ラベル
終了判定通常終了で、場面(シーン)を継続する場合にここにもどってくる。

*Rw1Rw2Rw3xDraw
ラベル実体[ goto ]
デフォルト主軸処理の描画ループ用ラベル
まだ描画する描画対象が残っているときはここにもどってくる。

*Rw1Rw2Rw3xStop
ラベル実体[ goto ]
デフォルト主軸処理の一時停止処理実装用ラベル。
一時停止実行に利用される。

*Rw1Rw2Rw3xCorrect
ラベル実体[ goto ]
デフォルト主軸処理の一時停止処理実装用ラベル。
一時停止解除時の補正処理に利用される。

*Rw1Rw2Rw3xTime
ラベル実体[ gosub ]
デフォルト主軸処理の現在時刻取得処理用ラベル。
Rw1Rw2Rw3xTimeNow、Rw1Rw2Rw3xTodayの値を現在時刻で更新する。
三段取得方式で、Rw1Rw2Rw3xTimeNowとRw1Rw2Rw3xTodayが、
正確にリンクすることを目指して設計された。
主軸処理の一部なので、修正する場合、
外部ファイル化しておこなう。

*Rw1Rw2Rw3xBgnSc0〜
ラベル実体[ gosub ]
場面(シーン)開始準備処理、実体。
連番は場面(シーン)には依存せず、エディタの領域順でつけられる。
同じ開始準備処理を複数の場面で使用できる。

*Rw1Rw2Rw3xEndSc0〜
ラベル実体[ gosub ]
場面(シーン)終了判定処理、実体。
連番は場面(シーン)には依存せず、エディタの領域順でつけられる。
同じ終了判定処理を複数の場面で使用できる。
戻り値として0を返して、通常終了する。
この処理の戻り値として1が返ると、終了判定成功となり、
次場面(シーン)に移行する。

*Rw1Rw2Rw3xMove0〜
ラベル実体[ gosub ]
場面(シーン)描画位置計算処理、実体。
連番は動画素材には依存せず、エディタの領域順でつけられる。
同じ描画位置計算処理を複数の動画素材で使用できる。
戻り値として0を返して、通常終了する。
この処理の戻り値として1が返ると、緊急描画回避となる。
常に1が返る処理を実装すると、
いわゆる「sleep」状態の描画対象を作ることができる。
描画対象の0番情報が0である「stop」状態との違いは以下のとおり。

○実行される。×実行されない。
差分時間計算処理トリミング番号計算処理描画位置計算処理画面への描画処理
通常の状態
「sleep」状態×
「stop」状態××××

「sleep」状態の描画対象は、位置計算その他が通常の状態と同じように実行される。
なので、「見えない標的」などとして実装することができる。

また、「実行しなくてよくなった描画対象」、「まだ実行していなくていい描画対象」などは、
「stop」状態にしておくことで、フレーム毎の処理の量を削減できる。