【プチコン4講座】テキストスクリーンをスクロールしてみよう

プチコン4

プチコン4 マップエディタ

こんにちは。なおキーヌです。

ブログ毎日更新は268日目になります。

前回はテキストスクリーンについて学びました。

もう一度おさらいしておくと以下のようになります。

  • テキストスクリーンはGPRの0-4のどれかを使う
  • テキストスクリーン自体は自由に描画出来るページ0~3の4枚を持つ
  • 重なり順は若い数字が上
  • レイヤーは困ったときに動かせばOK

以上です。

今回はテキストスクリーン2枚を使ってスクロールを学んでしてみましょう。

  1. テキストスクリーンでスクロール体験
  2. テキストスクリーンの仕様を知ろう
  3. 多重スクロール実現のキモは速度をスクリーン別に決めるコト

テキストスクリーンでスクロール体験

マップチップを1つずつ並べていくのは面倒臭いので、画面全体に塗りつぶしてみましょう。

TPUTでFORを回してもいいのですが、TFILLという便利な命令があります。

その名の通りテキストスクリーン用のFILL(塗りつぶし)なので、
1つのチップを指定すると画面全体に塗りつぶされます。

TFILLはどこからどこまでを塗りつぶすという風に指定するので、
左上の座標と右下の座標を入力します。

テキストスクリーンは基本16×16で1つのチップになるので、
デフォルトの画面解像度400×240なので16で割ると横25チップ縦15チップですね。

それでは草原のマップチップを敷きつめてみましょう・

TFILL 2,0,0,24,14,&HE8C1

ほぼ緑べたぬりですね(笑)

テキストレイヤー2にしているのは後ろに水とか手前に草原とか山とかを置きたいためです。

それではこの敷きつめたテキストスクリーンをスクロールさせてみましょう。

ダイレクトモードではスクロールさせるのは至難の業なので、エディットモードでループを組みます。

' 画面クリア
ACLS

' テキストスクリーン座標用
VAR G_TX = 0, G_TY = 0

' テキストスクリーン2に緑チップを敷きつめる
TFILL 2,0,0,24,14,&HE8C1

LOOP
  ' 左にスクロールするために変数を加算
  INC G_TX

  ' テキストスクリーンをスクロール
  SCROLL 2, G_TX, G_TY

  ' 垂直同期
  VSYNC
ENDLOOP

スクロールは加算すると左に動きます。

この点を気を付けてください。

スプライトとかだとXとYを加算すれば右下にいきますが、
スクロール処理の場合は反転するのでXとYを加算すると左上にいきます。

今回はXだけ加算しているので左にスクロールすると思います。

それにしても1なのにスクロールが一瞬で終わってしまいますね。

1チップ毎にスクロールなので60FPSだとすぐ終わります。

一応0.1までは遅くできるのですが、それでも早いです。

以下のように

VSYNC 10

VSYNCの値を10とかにしてみると動きがよくわかると思います。

テキストスクリーンをドット単位で動かしてみよう

このままだとスクロールが早すぎて見れたもんじゃありません。

しかもSCROLL命令を使うと画面外に行くと消えてしまうようです。

なので背景の移動はスプライトと同じようにSPOFSならぬTOFSを使って移動させます。

早速動かしてみましょう

' 画面クリア
ACLS

' テキストスクリーン座標用
VAR G_TX = 0, G_TY = 0

' テキストスクリーン2に緑チップを敷きつめる
TFILL 2,0,0,24,14,&HE8C1

LOOP
  ' 左にスクロールするために変数を加算
  INC G_TX

  ' テキストスクリーンをスクロール
  TOFS 2, G_TX, G_TY

  ' 垂直同期
  VSYNC
ENDLOOP

ゆっくりと滑らかに動くようになりましたね。

SCROLLではマップチップ1つ分、つまり16ドット毎動いてたのでむちゃくちゃ早く見えました。

TOSFを使うことでスプライトと同じように1ドット単位で動かすことができるので
基本はこっちを使った方が良いでしょう。

SPOFSと使い方も基本は同じです。

IDを渡してX座標とY座標を渡すと動いてくれます。

もう一つカンマを付けて値を指定すると、Z軸の操作も出来ます。

多重スクロール実現のキモは速度をスクリーン別に決めるコト

TOFSを使うことで任意の速度でスクリーンを動かすことが出来るようになりました。

多重スクロールでは奥に行くほどスクロールが遅く、手前ほどスクロールが早いという仕組みで作ります。

スクリーンも自前で変数を持つことが出来るので速度の保持も変更も楽ですね。

問題は背景をどう作るか。

ちまちまスマイルツールを確認しながら背景を作っていく作業は思った以上に苦行です。

マップエディタがあれば楽なのですが、公開作品のツールで絞ってみたところ
今のところそれらしいマップエディタは見当たりません。

いや、ありました!

ダメ元でツイッターで「プチコン4 マップエディタ」姫草ゆうりさんがあげてくれてました。

本人のツイートを掲載していいかわかんなかったのでRTした自分のを載せておきました。

問題あれば削除いたします。

使用させていただいた感想と致しましては、直感的で使いやすい!

今私が欲してた機能がすべて詰まっていたのでいい感じにマップを作れました

作れたのですが……

私自身がマップ置くのが苦手なので多重スクロール用のマップを作るのに苦戦しています!

なぜこの講座開いたし……

とりあえず多重スクロールをやっているゲームをじっくり見て研究してみます。

なので多重スクロールの本題の記事は少しだけ遅れてしまうことをお許しください。

次回はお茶を濁すようですが、プレイヤー操作をして画面スクロールにチャレンジしたいと思います。

ネタバレしておくと、プレイヤーが画面中央にいる状態で右ボタンを押すと
マップだけが左に動いてスクロールしてるように見えてスクロールの端まで行ったらプレイヤーを右に動かす。

といった感じです。

それでは。