グラフィックとサウンド
sdlBasic の文法は AMOS / DarkBASIC の哲学に従います。番号により呼び出されるサウンドとイメージ保存用のデータバンクがあります。ディスクにあるマルチメディアファイルをスロットへロードするには専用コマンド群を使います。 sdlBasic はイメージ、サウンドとミュージックに関する多種多様なファイル形式を扱えます。最大 32768 枚までのイメージと最大 1024 本までのサウンドファイルに関するロードとメモリへの保存が可能です。当然、ソースを記述することでパラメータの値を変更可能ですが、通常の使用範囲では、現在値で十分事足ります。
専用コマンドはコンピュータのサウンドカードを用いてサウンドスロットに保存されたサウンドを再生します。サウンドは異なるサウンドチャンネルから再生可能であるため、複数のサウンドを同時再生することもできます。サウンドの再生において、 sdlBasic で管理されている最大チャンネル数を動的変更可能です。
sdlBasic はイメージスロットに保存されたイメージをコンピュータのモニタへ表示する方法として、スプライトと Bob と呼ばれる二種類のインストラクション方式があります。最大 1024 枚のスプライトと最大 1024 枚の bob を同時に表示可能です。Bob とスプライトは背景にある既存のグラフィックを一切破壊せずにオブジェクトを移動できるため、ビデオゲームで求められるオブジェクトの移動に最適です。スプライトと bob は「スクリーンスワップ」を実行するたびに 「更新 (コンピュータのモニタへ再描画)」されます。適切なコマンドを使うことでスプライト同士、または Bob 同士 での当たり判定を検出可能です。
スプライトはスクリーンから完全に独立しています。必要に応じて、専用コマンドを用いることにより希望する座標範囲内にクリッピング可能です。
Bob はスプライトと非常によく似ていますが、スプライトとは異なり、その座標はスクリーンと相対的です。つまり、 Bob はスクリーンのサーフェス範囲外では存在できないため、 Bob の座標系はスクリーンの相対座標となります。従って、スクリーンをスクロール処理するとスクリーンの Bob もそのスクロールに追従します。指定された Bob に関してスクリーンで操作する方法を決めることができます。 Bob はスクリーンの広域スクロール処理を行うプログラムに最適です。
ディスプレイはコンピュータのモニタにおけるイメージの表示先であり、ウィンドウ、またはフルスクリーン表示を使えます。デフォルトで sdlBasic はデスクトップのカラー深度に従いウィンドウ (640 x 480 ピクセル) を開きます。setDisplay() コマンドでディスプレイのパラメータを変更可能です。グラフィックスはディスプレイへ直接出力しない代わりに、仮想スクリーンで処理されます。 sdlBasic では最大 8 枚 (0 ～ 7) までの仮想スクリーンを扱えます。仮想スクリーンはグラフィック操作全般の処理を行うデジタルキャンバスの一種です。スクリーン 0 はデフォルトのディスプレイ寸法で開かれます。この場合はディスプレイ全般のサーフェスにデフォルトの設定が適用されます。当然、このパラメータの変更、および複数のスクリーンを開いたり閉じることは可能です。ビデオゲームにおける一般的な慣習として、スクリーンの大部分はゲーム領域を、残りはスコアや残機などを表示します。
用例:
screenOpen(0,640,400,0,0,640,400,0)
screenOpen(1,640,80,0,400,640,80,0)
この場合、スクリーン 0 は 640x400 ピクセルのサイズでありディスプレイの上部に置かれます。また、同時にスクリーン 1 は 640x80 のサイズであり、スクリーン 0 では、ディスプレイの下部に置かれます。
このように記述することで可視範囲よりも大きいスクリーンを開くことがでます。
用例:
screenOpen(0,6400,400,0,0,640,400,0)
上述の用例はディスプレイに 640x400 ピクセルのビューポートを開きますが、そのスクリーンは十倍の広さとなるため可視範囲外へ及びます。
以下のコマンドを記述することでスクロールが可能になります。
用例:
offset(640,0)
従ってスクリーンは X 座標の 640 ピクセルへ移動します。そのため、以下のルーチンの動作は、
for i= 0 to 6400-640
offset(i,0)
screenSwap
next
これはシンプルで効率的なスクロール処理ルーチンです。
別のスクリーンへ切り換えるには、スクリーン番号 n を screen(n) コマンドへ指定します。
すべてのグラフィックコマンドは現在のスクリーンを操作します。すなわち、未指定時は最後に開かれたスクリーンが対象となります。
処理速度の都合により、スクリーン関連機能を外したい場合は、 directScreen() コマンドが使えます。当然、この方法を選ぶと望ましくない副作用が起きることが考えられますが、とりわけ旧式の低速なパソコンでプログラムの動作速度はかなり向上します。