まったくのプログラミング素人の筆者がC++/HSPを使用してSTG(シューティングゲーム)を作っていく過程を書くブログでしたが最近は脱線気味。プログラミング以外にも、ゲーム関連の記事、日々の戯言など。
×
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
先日公開したSolid State SURVIVORですが、私の開発マシン(P4M1.7G/16MB)では
弾がいっぱい出た時などにFPSが50~55くらいまで落ちていました。
なんとかならんもんかなぁ?と思ってどうすれば速くなるかな?と考えてみたところ
repeat回数を減らすのが良いのでは?と思い、方法を色々と考えてみました。
まず、私は一つ大きな勘違いをしていました。
配列変数の名前をタイプ値ごとに変えなければならないと思っていたのです。
例えば、空中敵のタイプ値は2で配列変数はex.enemy。
地上敵のタイプ値は32で配列変数はex.tijyouといった具合に分けていました。
これでも動く事は動くのですが、当り判定などは別々に行わなければならず
効率的ではありません。
es_find命令はタイプ値を足して検索出来るのですから、地上敵と空中敵のタイプ値を
足して検索すれば、一回の検索ですむので効率的と言えます。
このように、まとめれる検索は配列変数を統一してまとめて検索するようにしたのが第一点。
で、その検索も0から始めるのではなく、検索ごとにスプライト番号を指定し
設定したスプライト番号を超えたらbreakするようにしました。
↓こんな感じ
////////////////////////////////////////////////////////////
jikitama=609
repeat
es_find jikitama,4,jikitama
if jikitama=-1 : break
色々な処理
jikitama++
if jikitama>670 : break
loop
////////////////////////////////////////////////////////////
こうする事によって無駄なrepeatが減った(はず)
でも/ if jikitama=-1 : break /でrepeatを抜けている気もするのですが^^;
それと、今まではスプライトの使用数をその都度足して適当に設定していた為
1540個のスプライトを使用する設定になっていましたが
これも無駄な検索の要因になっているはずです。
例えば、今までだと敵弾の数を最大499発までに設定していましたが
実際はそんなに撃つ場面はありません。
(と言うか処理落ちしすぎるので私の技術では無理)
でも499発に設定していたら、かならず499回は検索しないといけません。
なので、スプライト番号をキチンと考えて、なるべく無駄のないように分配し
総スプライト数を1024に減らしました。
それと、スプライトの有効範囲も大きく取っていたのですが、これも画面外の
見えない所でスプライトは動いているので、負担になります。
なので、場面場面でスプライト有効範囲を切り替えるようにし、なるべく
無駄に画面外で動かないようにしました。
で、結果は殆どの場面でFPS60を保ってくれるようになりました^^
弾がいっぱい出た時などにFPSが50~55くらいまで落ちていました。
なんとかならんもんかなぁ?と思ってどうすれば速くなるかな?と考えてみたところ
repeat回数を減らすのが良いのでは?と思い、方法を色々と考えてみました。
まず、私は一つ大きな勘違いをしていました。
配列変数の名前をタイプ値ごとに変えなければならないと思っていたのです。
例えば、空中敵のタイプ値は2で配列変数はex.enemy。
地上敵のタイプ値は32で配列変数はex.tijyouといった具合に分けていました。
これでも動く事は動くのですが、当り判定などは別々に行わなければならず
効率的ではありません。
es_find命令はタイプ値を足して検索出来るのですから、地上敵と空中敵のタイプ値を
足して検索すれば、一回の検索ですむので効率的と言えます。
このように、まとめれる検索は配列変数を統一してまとめて検索するようにしたのが第一点。
で、その検索も0から始めるのではなく、検索ごとにスプライト番号を指定し
設定したスプライト番号を超えたらbreakするようにしました。
↓こんな感じ
////////////////////////////////////////////////////////////
jikitama=609
repeat
es_find jikitama,4,jikitama
if jikitama=-1 : break
色々な処理
jikitama++
if jikitama>670 : break
loop
////////////////////////////////////////////////////////////
こうする事によって無駄なrepeatが減った(はず)
でも/ if jikitama=-1 : break /でrepeatを抜けている気もするのですが^^;
それと、今まではスプライトの使用数をその都度足して適当に設定していた為
1540個のスプライトを使用する設定になっていましたが
これも無駄な検索の要因になっているはずです。
例えば、今までだと敵弾の数を最大499発までに設定していましたが
実際はそんなに撃つ場面はありません。
(と言うか処理落ちしすぎるので私の技術では無理)
でも499発に設定していたら、かならず499回は検索しないといけません。
なので、スプライト番号をキチンと考えて、なるべく無駄のないように分配し
総スプライト数を1024に減らしました。
それと、スプライトの有効範囲も大きく取っていたのですが、これも画面外の
見えない所でスプライトは動いているので、負担になります。
なので、場面場面でスプライト有効範囲を切り替えるようにし、なるべく
無駄に画面外で動かないようにしました。
で、結果は殆どの場面でFPS60を保ってくれるようになりました^^
PR
この記事にコメントする
カレンダー
10 | 2024/11 | 12 |
S | M | T | W | T | F | S |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
リンク
カテゴリー
最新記事
(04/04)
(12/26)
(12/25)
(11/17)
(10/11)
プロフィール
HN:
kt.
性別:
男性
自己紹介:
プログラミング経験は昔ファミリーベーシックでちょっとさわったくらい。
好きなSTGは、怒首領蜂大往生、エスプガルーダ(2)等の弾幕STGやら雷電シリーズなんかの非弾幕、バトルガレッガ、グラディウスシリーズ、R-TYPE等、STGなら何でも好きです。
音楽がカッコイイSTGが特に好きで、並木学氏は最高!
好きなSTGは、怒首領蜂大往生、エスプガルーダ(2)等の弾幕STGやら雷電シリーズなんかの非弾幕、バトルガレッガ、グラディウスシリーズ、R-TYPE等、STGなら何でも好きです。
音楽がカッコイイSTGが特に好きで、並木学氏は最高!
ブログ内検索
最古記事