RPGツクールと数学のブログ

RPGツクールと数学についてのブログです。

ピクチャーの任意角度固定

過去ブログの転載です。

ピクチャーを任意角度で固定したままにする方法です。これにはイベント命令をバイナリ等で直接いじる必要があるので、↓ここでは相互変換モジュールを利用します。

相互変換モジュール - RPGツクールと数学のブログ

ピクチャーの回転をして途中で止めれば傾いた画像を実現できそうですが、通常回転を中途半端に止めることはできないので、回転速度を0にしてしまう方法を用います。回転速度を1~9以外にするために相互変換モジュールを用います。

f:id:fermiumbay13:20190802010034p:plain

途中まで回転したら回転速度を0にします。↑これは時計回りに120°回転させたまま固定したものです。

ピクチャーの回転の角速度はこちらで示しましたように
ω=45S/32 [°/F]
であると推測されています。Sは回転速度、Fはフレームです。

回転は一瞬で済ませて固定したいので、ここでは1フレームで目的の角度にすることを考えます。
つまり、固定したい角度θは
θ=45S/32[°]
で与えられるとします。これを回転速度Sについて解くと
S=32θ/45
となり、これを用いるとθから回転速度を得ることができます。
時計回りに120°回転したければθ=120°を代入して、
S=32×120/45≒85
ですから、回転速度を85にして1フレーム停止、
その後回転速度を0にすれば任意角度のまま固定させることが可能です。

◆ピクチャーの表示:1, (表示画像)(回転速度:85)
◆ウェイト:0.0秒
◆ピクチャーの移動:1, 0.0秒(W)(回転速度:0)

これでOKです。これを自動化するスクリプトは以下の通りです。

#include "rpgfunc.as"

#module
#deffunc rotate_temp int id, str filename, double deg, int x, int y, int zoom, int trans
    speed = int((64.0 * deg + 45.0) / 90.0)
    pic id, filename, 0, x, y, 0, zoom, 0, 100, , 100, 100, 100, 100, 1, speed
    pause 0
    picmove id, 0, x, y, zoom, trans, , 0, 1, 100, 100, 100, 100, 1, 0
return
#global
#define rotate(%1=1, %2="", %3=0, %4=160, %5=120, %6=100, %7=0) rotate_temp %1, %2, %3, %4, %5, %6, %7

これを先頭に書けばrotate命令が使用できるようになります。

rotate (ピクチャー番号), (ピクチャー名), (角度), (中心x), (中心y), (拡大率), (透明度)

f:id:fermiumbay13:20190802010049p:plain

↑ちょっとずつ角度を増やしつつ縮小、透過度を下げていったものです。残像っぽくなってかっこよさそうですが、重たくて使い物になりません。