MSX2グラフィックプログラミング講座 第3〜5回目

グラフィックツールを堅く考えることはない、グラフィックの道具になればいいと思う。
インターフェイスを覚えるより必要なモノだけを作る。プロらしい手法…

MSXBASICでアナログ時計を作ってみる

前回はSINとCOSを使っていろいろな事ができる事がわかりました。
今回はMSXで時計を作ります。
前回のおさらいは12時の位置から目盛りを打つプログラムを
作ることで文字盤のモジュールができます。
MSX:SIN-COS
=SINとCOSで算出された円の補間点から目盛りをつくる=
これはPCの計算方法でPCは極座標になっていませんから
使い方が若干変わります。 Nを押して実行させます。
PCは左上を原点としてY軸が下へ増えます。
学校では反時計回りでPCでは時計回りです。
難しいようですが、式を覚えれば難なくできます。
ちょっとめんどくさいですが、
Aは2πラジアンを12等分に割り目盛りを作ります。
A=12分の1×2π
Xは赤いライン:COSで円から傾きをラジアン(A)*半径(R)
3時の位置で1になり、6時の方向で0、9時の方向で-1になる
X1=COS(A)*R
Yは青いライン:SINで円から傾きをラジアン*半径
3時の位置で0になり、6時の方向で1、9時の方向で0になる
Y1=SIN(A)*R
でこの場合はX=0、Y=0が原点になるので任意の座標にずらします。
X1=COS(A)*R+X
Y1=SIN(A)*R+Y
これでX1,Y1は描画範囲内になります。
ここで12時からにすると-90度でマイナスが入ると
エラーになりますから時計回りに4分の3周の+270度まで
ずらします。終わりが1周と4分の3周になります。
ムーブメントは無地ですが、画像を入れることも可能です。
円弧の補間点の12点を使って文字を入れたりしてみます。
さらに時針、分針を入れてみます。
時針は4時30分ならば4と5の間に針が進みます。
芸がないのでアナログのように自然に針が動くようにします。
このようにするには12×60で刻むことになります。
分針は60分ですから60で刻むことになります。
秒針については処理上の問題から今回はやめますが、
時計を小さくして裏画面にムーブメント作って
そこからコピーして3つの針を描けば2,3秒で終わりますが、
時間を取得してから描くまで時間が経ってしまうので
正確に修正する必要があります。そんなこんなで

MSX:時計

このような時計ができます。文字表示は2文字が含まれるので
バランスが悪いので数ドット微調整しています。
MSXはドットが足りないので全画面の時計が理想ですね。
MSXでどうなるか、雰囲気を見てみたかったのです。
この画像では数字を入れて時計のように魅せていますが、
目盛りだけにすれば、なかなかいい雰囲気ですね。
WindowsVistaのように時計を入れることも楽勝ですね。

<< ana-clk.bas をダウンロード >>

プログラムを見るとSINとCOSの再計算を何度かやっています。
このようにSINとCOSを使えば円弧の補間点ができます。
使いこなすには非常に難しいのですが、公式に従えば
三角形、六角形、八角形の描画もできます。
次回はMSXで秒針が動くアナログ時計を作ります。

MSXBASICでアナログ時計を作ってみる

 前回は文字が大きすぎるために文字盤にうまく配置できませんでした。
そこで、ガジェットでは数字を消して秒針を作ります。

MSX:ミニ時計

秒刻みの時計を作ると2つのプログラムを同時に使うことができません。
MSXのVDP速度は遅いのです。そこで、
時刻が変わってから1つ1つ描き直しはしない事と
秒針の座標系計算はあらかじめキャッシュして
配列変数を60個に各々の秒数の座標を参照する事にして
処理の簡略化で時間の短縮を狙います。

秒針を消しながら刻む

秒ごとに画像を切り替えると画面がチラつき
処理も1秒を越えてしまいます。
そこで、秒針は描く寸前で黒の秒針で前の秒針を消すようにして
1分経つと再描画に処理をかえます。
これで、BASICで秒針を刻むことができました。
今回の変更は最初にキャッシュの処理を行うので
初期設定に時間がかかります。

<< ana-ga14.bas を ダウンロード >>

次回はとにかく凄い、
私の次世代MSXBASICを使った、
配列の文字列にColor 10 = orange
というふうに設定可能にします。
これを読めばあなたも上級プログラマー!
とPRはこのへんにしておきます。

<< 次の講座 6 回目へ >>