【ウディタ講座】SRPGをつくろう! スクロール処理を自作する

スクロール処理まで自作することになりました。

しかし、システム変数の「Xスクロール値」、「Yスクロール値」はイベントから書き換えることができるので、画面のスクロール具合をいじるだけなら難しくはありません。

スクロールの条件を細かく詰めていけば手間取ることはないでしょう。

スクロールの仕様決め

スクロールの発生条件

画面のキワの1マス範囲にマウスカーソルがあるとき、スクロールが起きて画面が1マスぶんズレるものと考えます。キワというのが、黄色い四角が書かれた範囲ですね。

この範囲をマウス座標の条件分岐で判断するなら、1マス=1タイルサイズなので、このようになります。

■変数操作: CSelf10[右ハジ1マス範囲] = Sys116:[読]画面サイズX – Sys118:[読]タイルサイズ
■変数操作: CSelf11[下ハジ1マス範囲] = Sys117:[読]画面サイズY – Sys118:[読]タイルサイズ
■条件分岐(変数): 【1】 Sys71:マウスX位置 が Sys118:[読]タイルサイズ 以下 【2】 Sys71:マウスX位置 が CSelf10[右ハジ1マス範囲] 以上
-◇分岐: 【1】 [ Sys71:マウスX位置 が Sys118:[読]タイルサイズ 以下 ]の場合↓
|■変数操作: Sys104:Xスクロール値 -= Sys118:[読]タイルサイズ + 0
|■
-◇分岐: 【2】 [ Sys71:マウスX位置 が CSelf10[右ハジ1マス範囲] 以上 ]の場合↓
|■変数操作: Sys104:Xスクロール値 += Sys118:[読]タイルサイズ + 0
|■
-◇上記以外
|■条件分岐(変数): 【1】 Sys72:マウスY位置 が Sys118:[読]タイルサイズ 以下 【2】 Sys72:マウスY位置 が CSelf11[下ハジ1マス範囲] 以上
|-◇分岐: 【1】 [ Sys72:マウスY位置 が Sys118:[読]タイルサイズ 以下 ]の場合↓
| |■変数操作: Sys105:Yスクロール値 -= Sys118:[読]タイルサイズ + 0
| |■
|-◇分岐: 【2】 [ Sys72:マウスY位置 が CSelf11[下ハジ1マス範囲] 以上 ]の場合↓
| |■変数操作: Sys105:Yスクロール値 += Sys118:[読]タイルサイズ + 0
| |■
|-◇上記以外
| |▼ 上4つのどこにも入らなかったら、スクロールは起こらない
| |■
|◇分岐終了◇
|■
◇分岐終了◇

1タイルサイズぶんの厚みを見るわけですね。

スクロールの細かな条件

さらにスクロールの仕様としては、次の条件も必要そうです。

  • ウディタのデフォルト機能のスクロールは使用しない
  • カーソルが上図の範囲にある限り、スクロール処理をループさせる
  • 上図範囲にカーソルがあってもスクロール範囲の限界に来ていたらループをやめる
  • ゲーム画面外(ウィンドウに乗っていない)時はスクロールをやめる

 

このような条件のスクロールコモンを作って、「★操作受付」コモンの座標取得の前後あたりで呼び出せばよさそうです。

SRPG用スクロール処理をつくってみる

まずは素直に書いてみた

スクロールコモンver1です。

まずまずそれっぽく動きます。

しかし、気になる点がいくらかあります。

問題点のピックアップ

動かしてみた結果、こんなところがよくありません。

  1. ポインター画像と実際のマウスカーソル位置がややズレている(上図参照)
  2. 画面の4隅にカーソルが行くと上手く動かない(下図参照)

1番の問題については、スクロールコモンのなかで、ポインターの表示をつど行うだけで解決できそうですね。それならいっそ、スクロールコモンからの返り値で、「★操作受付」コモンも動くようにすると流れもきれいですね。

 

2番の問題は、カドにあるときはヨコとタテ両方のスクロールが発生しなければいけないのにどちらか一方しか起こっていないことが問題のようです。「まずはカーソルがカドにあるかどうか」から調べる方がよさそうです。

 

さらに改良

カド判定をし、そのあとにキワ判定をするようにしています(ループ中のラベルジャンプがちょっと力業ですが……)。

スクロール値の操作の後に、マウス座標からマス座標を拾って常にポインター位置を更新。

処理の最後で改めてポインター座標を拾って、返り値に設定します。

呼び出し元の「★操作受付」が、その返り値をもとに計算を引き継ぐ流れです。

 

それらしく動いてくれるようになりました。

ユニット操作時の移動先や攻撃対象の選択でも同じ要領でこのスクロール処理をかませていきましょう。

 

【ウディタ講座】SRPGをつくろう! まとめ