delphiでSTGを作成しようとしている者なのですが、弾の発射が上手く出来ません・・・
弾一つ一つをTImage型で読み込み、それぞれを動かすことで出来るようになったのですが、動作が重くなってしまいます・・・
例)
宣言部
tama:array[1..100]of TImage;
FormCreate時
for i:=1 to 100 do
tekitama[i].Picture.LoadFromFile(Format('tama.bmp',[i]));
このような感じなのですが、どうにかしてメモリを最小限に抑える方法はないでしょうか?
ひとつの画像を使いまわしで使用する方法で可能になると思うのですが、その方法がわかりません・・・
ひとつよろしくお願いします。。
>弾一つ一つをTImage型で読み込み
少々無謀なような感じがします。(^_^;)
ImageはMain画面に一つで良いでしょう。
直接その場で自前で描画できるものは直接描画する(弾など)。
難しいものはBmp等に別途用意しておいて使い回しをする。
等が良いと思います。
そう言えばDelphiでのゲーム作成講座なるページがありましたが
閉鎖になっちゃったのかな。
でも、それ関連(考え方とか作製方法)などは他言語でも解説した
ページがあります。
要は直接Imageに対して円や線等を直接描画する方法や、別のBmp
画像を透過してはめ込んだりできれば良い訳でその辺を・・・・
全然参考になってませんねm(__)m
ゲームを作成されるなら、こちらが参考になるのでは。
行き当たりばったりDelったり(仮)
http://www.interq.or.jp/moonstone/person/index.html
Delphiで、10年くらい前からゲームを作っていた経験から書きます。
ゲームでシューティングということですので、
本来ならば、ライブラリとして、DirectXか、DelphiなのでQuadrapleD3あたりを選ぶのがよいと思います。
しかし、本格的でなくてもいい、遅くてもいい、
とりあえず作ってみたい、という用途ならば、TImageでも簡単なものは作ることができます。
TImageベースで作ってみて、物足りなくなったら、
DirectXやQuadrapleDに移るのがよいでしょう。
TImageベースで動かすポイントとしましては、
TImageを2枚用意し、1枚は見えなくしてバックバッファとして使い、
もう一枚は、表示して、画面表示用に使います。
(バックバッファは、TImageでなくTBitmapでもいいかもですが)
TImageや、TBitmapで読みこんでおいた自機や敵機のグラフィックを、使いまわして、表示します。
表示するときは、TBitmap.Canvas.Drawを使い、順次、見えないバックバッファに描画していきます。
全部、描画し終わったら、バックバッファから、表示用のTImageに一気に描
画します。
こうすると、ちらつきがでにくいです。
(厳密には、ティアリング等は発生しますが、それ以上は、DirectXをという話)
ゲームで必須の、背景を透過した抜き色(スプライト風の描画)は、
昔は、抜き色用のマスクを持って、TBitmap.Canvas.Drawを読んでいたのですが、
今だと、TBitmap.Transparentを有効にして、Canvas.Drawで行けるはずです。
表示やゲームの実行は、TTimerで行うと簡単です。
(OnIdleでtimeGetTimeで時間はかって、余った時間をSleepするのがベターですが)
……などと、
いろいろ書いてみたのですが、TSさんの、書かれた
行き当たりばったりDelったり(仮)
http://www.interq.or.jp/moonstone/person/index.html
にほとんど要点が書いてありますね orz
書いてから気づきました。
ちなみに、TBitmapや、TCanvasの詳しいことは、
中村さんのサイトが参考になります。
2 VCL のグラフィックス
http://www.asahi-net.or.jp/~HA3T-NKMR/vcl2.htm
しかし、中村さんのサイトを見るくらい、わかってきているなら、そのまま、DirectXへどうぞという感じです。
みなさんありがとうございました!!!
お陰で作成することが出来ました!!
本当に感謝感謝です!!
ツイート | ![]() |