クリエイター手抜きプロジェクト[507]IoT編 IchigoJamのPCG機能(2)/古籏一浩

投稿:  著者:  読了時間:6分(本文:約2,600文字)



今回は、IchigoJamで画面をスクロールさせてみます。また、PCG機能を利用してスムーズにスクロールさせる方法も説明します。

まず、簡単に画面をスクロールさせてみましょう。IchigoJamでは、画面を上下左右にスクロールさせることができるSCROLL命令があります。

以下のようにすると、画面が上から下にスクロールします。実行する前に、あらかじめ画面に何か文字を表示しておくと分かりやすいでしょう。





SCROLL 2

あらかじめ画面に何か文字を表示しておく方法がわからない、という人もいるかもしれません。ということで、ランダムに画面に文字を表示するプログラムを載せておきます。

10 FOR I=1 TO 100
20 LOCATE RND(32),RND(20)
30 PRINT CHR$(RND(200)+32);
40 NEXT

SCROLL命令は指定する番号(または方向を示す定数)で、スクロールする方向を決めることができます。

・上にスクロール
SCROLL 0 または SCROLL UP

・下にスクロール
SCROLL 2 または SCROLL DOWN

・左にスクロール
SCROLL 3 または SCROLL LEFT

・右にスクロール
SCROLL 1 または SCROLL RIGHT

SCROLL命令を使えば、簡単に画面をスクロールできますが、せっかくなのでスクロール処理を作ってみましょう。

スクロール処理というのは、メモリからメモリへの内容の移動です。つまり、PEEK命令でメモリを読み出し、POKE命令で書き込むだけで、スクロール処理を行うことができます。

まず、右から左にスクロールさせてみます。IchigoJamでの画面のアドレスは#900からです。#901のメモリの内容を#900にコピーします。

これを全画面分繰り返します。これだけで画面が右から左にスクロールします。BASICなのでスクロールにはちょっと時間がかかります。

10 FOR I=0 TO 32*24-1
20 A=PEEK(#900+I+1)
30 POKE #900+I,A
40 NEXT

このプログラムはちょっと手抜きをしているため、左端にある文字が一つ上の行の右端に移動してしまいます。そこで、もう少し工夫をして左端にある文字は同じ行の右側に移動するようにします。つまり、同じ行でぐるぐると表示されている文字がスクロールすることになります。(リングスクロール)

10 FOR Y=0 TO 23
20 B=PEEK(#900+Y*32)
30 FOR X=0 TO 30
40 A=PEEK(#900+X+1+Y*32)
50 POKE #900+X+Y*32,A
60 NEXT
70 POKE #900+Y*32+31,B
80 NEXT
90 GOTO 10

左から右にスクロールする場合は右(下)からメモリ内容を移動させます。左(上)から処理すると同じ文字で埋め尽くされてしまいます。

10 FOR Y=0 TO 23
20 B=PEEK(#900+Y*32+31)
30 FOR X=0 TO 31
40 A=PEEK(#900+(31-X)-1+Y*32)
50 POKE #900+(31-X)+Y*32,A
60 NEXT
70 POKE #900+Y*32,B
80 NEXT
90 GOTO 10

上から下、下から上にスクロールする場合も、同様にメモリ内容の移動でできます。勉強としてやってみるとよいでしょう。

スクロールはメモリ内容の移動なので、これを利用するとPCG定義した文字をスクロールさせることができます。

PCGは#700から定義されています。1文字分のスクロールでよいので、8バイト移動させるだけでできあがりです。実行すると1ドット単位でスムーズにスクロールしているように見えます。

10 CLP
20 FOR I=#900 TO #900+32*5-1
30 POKE I,#E0
40 NEXT
50 A=PEEK(#700)
60 FOR I=#700 TO #707
70 POKE I,PEEK(I+1)
80 NEXT
90 POKE #707,A
100 GOTO 50

PCGの場合、上下にスクロールさせるのは簡単ですが、横にスクロールさせるのは、やや難儀です。というのも、ビットシフトという処理を行わないといけないためです。

次回は、このビットシフトを使って1ドットスクロールさせてみます。


【古籏一浩】openspc@alpha.ocn.ne.jp
http://www.openspc2.org/

箱の中に丸めた紙が入っていたので、開いてみたら子供の字で以下のような計算がしてありました。で、先生が採点したようで0点と……。

最後の問題(11+1)だけ答えが書いてありませんでした。どんな値になるのか。見せると考え込む人と、わりとすぐに答えを出す人がいました。

1+1=1
2+3=2
5+5=3
10+1=4
11+1=

・InDesign JavaScript Reference
http://www.openspc2.org/reibun/InDesignCS6/ref/

・みんなのIchigoLatte入門 JavaScriptで楽しむゲーム作りと電子工作
https://www.amazon.co.jp/dp/4865940936
[正誤表]
http://www.openspc2.org/book/error/ichigoLatte/

・After Effects自動化サンプルプログラム 上巻、下巻
https://www.amazon.co.jp/dp/4844397591
https://www.amazon.co.jp/dp/4844397605

・IchigoLatteでIoT体験
https://www.amazon.co.jp/dp/B06X3X1CHP
http://digiconcart.com/dccartstore/cart/info/2561/218591

・みんなのIchigoJam入門 BASICで楽しむゲーム作りと電子工作
http://www.amazon.co.jp/dp/4865940332/

・Photoshop自動化基本編
http://www.amazon.co.jp/dp/B00W952JQW/

・Illustrator自動化基本編
http://www.amazon.co.jp/dp/B00R5MZ1PA/

・4K/ハイビジョン映像素材集
http://www.openspc2.org/HDTV/

・クリエイター手抜きプロジェクト
http://www.openspc2.org/projectX/