忍者ブログ
ゲームを作りながらFamous Writerを開発するブログ
[1]  [2]  [3
×

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

一応これで、シューティングの基本的な所は再現したつもりでございます。
C++実験室

まだ修正というか、命令の追加でやりたいことがございますので、もうしばらくこのシューティングをいじってゆきます。

一点目は、スコア表示がStr関数で左揃えなので、sprintfの%8dっぽい仕組みを作って、右揃えにしたいと思っております。
いや、作ってはみたのですが、Windowsでヒープを壊す代物になり(笑)、今回のビルドでは外してあります。

二点目は、まだESCキーでのPAUSEを作っておりません。
これは、READY/GAME OVERのウエイトや、タイトルのRETURNキー待ちと併せて、v3のWAIT命令みたいなものを作り、それで書き直そうと思っております。
確かにウエイト関係、C++ではこのようにハードコーディングしておりましたが、改めて移植すると面倒だなと。

三点目は、オフスクリーンのスクロール命令を持たせようと思っております。
このゲームですと、すでに描画した背景はスクロール命令を使い、一番上の行だけスプライト描画で書き換えれば、すっきりするかなと。
ただ、やってみないと、速度的にどうなのかというのがございますので、この件はどうなるかわかりません。

そんなところを、来週はやってゆく予定です。
PR
範囲境界を使った文字描画でございますが、REALbasicのMid関数に相当する物がないと厳しいので、しばしペンディングです。
Midを作ろうと思ったんですが、例によって文字列なので、一歩間違えるとシステムごと死んだりするため、遅々として進みません。
副産物と申しますか、文字列クラスは新しい物になり、より強固になりました。

文字関係が煮詰まったので、再び配列に手を出したところ、これがうまくいきました。
従って、チュートリアルのシューティングゲームの、敵機を作る事が出来、先ほどタイトル等も含め、全て終わりました。
これからC++をWindowsに移植して、明日には公開できるかと思います。

当ブログで何度か書いておりますが、Windows/Mac OS X/Mac OS 9と、それぞれ違うコンパイラで作っております。
最近の私のスタイルは、Mac OS Xでメインの開発をし、Windowsで全機種共通のクラス等を作っております。
メインをOS Xでやると、REALbasicでのコンパイラも同時に作る事が出来ます。
Windowsでクラスを作っているのは、Visual C++はデバッガが強力ですから。
OS 9版は、プロジェクトにOS X版と同じファイルを組み込んでありますので、機種依存の部分をのぞき、OS X版での変更がそのまま反映されます。

プログラムに関しては、あと大きな機種依存の部分というのは、キーボード・マウスの取得と、音やムービーぐらいですか。
とはいえ、後者はQuickTimeなので、Win/Macともに大差ないコードになるかと予想しております。
その他のハイレベルな機能・命令等は、全機種共通のコードで行けるのではないかなと。
C++で作る事が出来る目途が立ってきたかな、と実感しております。
とはいえ、文字列操作など、もっと勉強は必要ですかな(笑)。
現在公開中のものですが、MacはCarbon/Classicとも、重大なバグが発覚しました。
スプライト描画で、x座標に負の値が入ると、OS 9ではシステムを巻き込んで落ち、OS Xでは予期せず終了します。
なお、y座標はチュートリアルの通り、問題ございません。
Mac OSで、チュートリアルを改造して、4方向スクロールとか作ろうと思ってた方、誠に申し訳ございません。

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

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

おとといご紹介いたしました文字描画ですけれど、何がやりたかったのかと申しますと、インライン行の実現です。
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の境界処理を作っていただかなくてはならず、いくら何でもそれは面倒だろうと。

以上、現状でした。
最新コメント
[06/07 みずき]
[12/21 Rocco Noble]
[11/05 f]
[03/02 Ming.]
[03/02 Ming.]
忍者ブログ [PR]