忍者ブログ
ゲームを作りながらFamous Writerを開発するブログ
[1]  [2]  [3]  [4]  [5]  [6]  [7]  [8]  [9]  [10
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

現在公開中のものですが、MacはCarbon/Classicとも、重大なバグが発覚しました。
スプライト描画で、x座標に負の値が入ると、OS 9ではシステムを巻き込んで落ち、OS Xでは予期せず終了します。
なお、y座標はチュートリアルの通り、問題ございません。
Mac OSで、チュートリアルを改造して、4方向スクロールとか作ろうと思ってた方、誠に申し訳ございません。

原因は、自前の描画ルーチンにて、signedとunsignedを取り違えていた単純なものです。
Windows版では、当該箇所にBitBlt()を使っているため、このバグは発生いたしません。

すでに私のMac上では修正してあり、次回公開分から負値でも想定通り動作いたします。
次回公開は、他の部分にまだ作りかけの箇所があるため、今しばらくお待ち下さいますようお願い申し上げます。
PR
今週もソフトは公開なしです。すみません。

おとといご紹介いたしました文字描画ですけれど、何がやりたかったのかと申しますと、インライン行の実現です。
v3のメッセージレイヤーや&Layer.Textのように、ある範囲内に文字を描画する仕組みを持たせようと思い、エントリとして書きました。
この週末はそれをやっておったのですが、まだ道半ばなので、一段落するまでお時間いただければと思います。

で、Screen.Textは「直接文字描画」として、前回のまま残すことにいたしました。
インライン行の表示は、内部でX,Y座標の値を持ち、範囲境界を見ながら描画位置を計算し、その後Screen.Textと同等のものを呼び出す事で、実装いたします。
こうすると、メッセージレイヤーや&Layer.Textの表示は、それらの持つ範囲境界がそのまま使え、プログラム的にも皆さんがお使いになるときも、わかりやすい仕組みになるかと思います。

逆に、2系統の文字描画手段を持つ事になりますが、区別としては、Screen.Textはローレベルで速度的にも一番早い反面、自動で改行などはいたしません。
範囲境界を使うと、多少速度が犠牲になるものの、改行や縦書き等はプログラムが自動で行います。
目的に応じて使い分けしていただければと思います。

ぶっちゃけて申しますと、Screen.TextはREALbasicのGraphics.DrawStringで、範囲境界はv3の文字描画エンジン、という関係に近いものを想定しております。
前者まで、皆さんが記述できるようになる、というものになります。
今週も忙しく、月曜と本日しか時間が取れなかったのですが、引き続きREALbasicの真似っ子の一環で、FolderItemを作りました。
FolderItemがないと、ファイル関係の命令(例えばJmpやCall)や、画像ファイルの自在な読み込みができませんので。
と申しましても、Rbほど多機能なものではなく、ファイルの位置と属性を特定できる程度のものですけれども。

あと、Window.DrawTextを「Window.DrawText "文字列";」だけに変更しようと思っております。
位置は、別のメソッドで「Window.TextArea left,top,width,height;」と、四隅を入れてもらうことにいたします。
これはまだ作っておりませんで、この週末の作業になるかと思いますが。

というのも、v3ではメッセージレイヤーやレイヤーにて、文字を描画しております。
この位置設定の仕様にいたしますと、レイヤー等の持つ四隅の値がそのまま使えますから、いろいろ楽になるかと思います。
前回のx,y座標のみの設定だと、自力でwidth,heightの境界処理を作っていただかなくてはならず、いくら何でもそれは面倒だろうと。

以上、現状でした。
一段落いたしましたので、公開いたします。
C++実験室
なお、以前にご紹介いたしました配列変数は、諸般の事情により今回は外してあります。
文字型変数もまだ作っておりませんがゆえ、今回は「変数は数値型変数のみ使用可能」ということになります。

特徴としては、VSync割り込みが表に出てきております。
これは、慣れが必要ではございますが、v3で言うところの画面効果を皆さんにも作ることができるように、と考えて表に出しました。
また、最近よくご要望をいただくのですが、雪や桜が舞うようなものですな。これも、VSyncとスプライトを使えば、高速に出来るかと思います。
もちろん、今回のようなシューティングや、例えばRPGの2Dフィールドマップなどでは、オーソドックスな割り込みとしてお使いいただけます。

記述方法としては、v3の言語仕様に慣れた方には、ローレベル過ぎる仕様に戸惑うかもしれません。
私としては、今までREALbasicに任せていた部分を、現段階では作っているつもりでおりますので、このあと徐々にv3のようなハイレベルの命令をつけてゆくつもりです。
逆に申しますと、Rbがやっていたレベルまで皆さんが使えるようになるため、ゲーム作成の自由度が高くなります。

なお、マニュアルからではなく、チュートリアルから見ていただいたほうが早いかもしれません。
チュートリアルは、前回公開したシューティングゲームの再現を目指して作り始めたものでございます。
今回は、冒頭で申し上げました通り、配列変数がないため、敵機は出てまいりません。
残りの自機移動・弾の発射・スクロールにつきましては、これであのゲームの再現になります。

さすがにハードコーディングに比べると速度が落ちておりますが、一応、こういう事もできるようになりました、ということで。
そもそも、毎フレームごとに背景をスプライトから描画しているという、ロジックの組み方が良くないんです(笑)。
まともにゲームにするなら、背景をバッファで持って、差分書き換えとかして然るべきなのですが、そこまでやるとチュートリアルの範疇を逸脱するソースになってしまいますので、ご了承ください。
そのうち裏バッファを搭載したり、楽に作ることが出来る仕組みをつけようと思っております。
プログラムのほうは、コンパイラ・ランタイムとも、自機移動と背景のスクロールだけは、テキストファイルで書く事ができる段階まで、作る事ができました。
あと少しソースの整理をしてバグがなければ、第一弾として公開したいと思っております。
その後、敵機の処理ができるよう、作ってゆきます。

が、ちょっと時間が取れなくて、もう数日お待ち下さい。申し訳ない。

それから、半ば私信でございますが、検証する系のメールもお返事が遅れております。
昨日まで到着分は拝読しておりますので、ご報告を兼ねて、この場でお詫び申し上げます。
<< 前のページ 次のページ >>
最新コメント
[06/07 みずき]
[12/21 Rocco Noble]
[11/05 f]
[03/02 Ming.]
[03/02 Ming.]
最新TB
忍者ブログ [PR]