STGの敵の出現テーブル

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
Suikaba
記事: 194
登録日時: 9年前

STGの敵の出現テーブル

#1

投稿記事 by Suikaba » 8年前

お久しぶりです。またお世話になります。
東方のような弾幕STGを作っています。
現段階では、敵の出現テーブルはOpenOfficeのExcel的なもので、龍神録のサイトにあるような感じで実装しています。
敵の出現のタイミングは、ゲーム開始時からのカウント(1フレーム1カウント)をとっているのですが、
これだとフレーム落ちした際にあまりよろしくないのかなぁと思いまして、質問させて頂きます。
聞いた話によると、カウント方式ではなくどれだけ進んだか(背景がどれだけスクロールされたか蓄積する)で
タイミングを取ってるというお話も聞いたことがあります。

あと、XMLというものでやるという話も聞きまして、それについても回答していただけると有難い限りです。

言語はC++, 開発環境はVS2010を使用しております。

よろしくお願いします。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 9年前
住所: 東海地方
連絡を取る:

Re: STGの敵の出現テーブル

#2

投稿記事 by softya(ソフト屋) » 8年前

私はシューティングマニアではないので知らないこともあるかも知れませんが。
Suikaba さんが書きました:聞いた話によると、カウント方式ではなくどれだけ進んだか(背景がどれだけスクロールされたか蓄積する)で
タイミングを取ってるというお話も聞いたことがあります。
背景スクロールの座標を基準にする方法ですね。
背景のスクロール量はフレーム数を基準にするのではなくスクロール開始からの経過時間で行います。
ただ、この経過時間方式とする場合は自機や敵の移動や弾も含めて全て経過時間基準での処理に改めないとダメだと思います。
Suikaba さんが書きました:あと、XMLというものでやるという話も聞きまして、それについても回答していただけると有難い限りです。
xmlだと楽になるというのはないと思いますが何処で聞いた話でしょうか?
自分で配置ツールを作るならcsvでもxmlでも構わないと思います。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

Suikaba
記事: 194
登録日時: 9年前

Re: STGの敵の出現テーブル

#3

投稿記事 by Suikaba » 8年前

>> softyaさん
毎度回答有難う御座います。
スクロール開始からの経過時間ですか、なるほど。
XMLの話ですが、それと同時にcsvのはなしもしてました。ちなみに知人から聞きました。
StageEditor等を作ったらどうだろうなぁと言う会話の中で出てきました。
とりあえず、スクロール開始からの経過時間で検討してみようと思います。

本当に回答有り難うございました。

Suikaba
記事: 194
登録日時: 9年前

Re: STGの敵の出現テーブル

#4

投稿記事 by Suikaba » 8年前

それに伴ってですが、
東方のようなSTGでは途中に会話が入ったりするのですが、それもスクロール開始からの経過時間で
行なっているのでしょうか。
それとも、敵の出現テーブルの中に含まれている(表現が微妙かもしれません)のでしょうか。

こちらの方も出来れば回答お願いいたします。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 9年前
住所: 東海地方
連絡を取る:

Re: STGの敵の出現テーブル

#5

投稿記事 by softya(ソフト屋) » 8年前

Suikaba さんが書きました:>> softyaさん
毎度回答有難う御座います。
スクロール開始からの経過時間ですか、なるほど。
XMLの話ですが、それと同時にcsvのはなしもしてました。ちなみに知人から聞きました。
StageEditor等を作ったらどうだろうなぁと言う会話の中で出てきました。
とりあえず、スクロール開始からの経過時間で検討してみようと思います。

本当に回答有り難うございました。
「背景スクロールの座標を基準にする方法ですね。」と書きましたが、経過時間でも構いません。
背景スクロールの座標も経過時間もフレームカウントと違って丁度な時間(==比較)できませんので指定値を超えたらになりますから、龍神録のままだと何度も発生してくるので発生したら次は発生しない抑制フラグが必要になります。

ちなみにXMLはHTMLのタグをご存知でしたら、あれと似たものでHTMLタグを拡張したものと思って頂ければ良いと思います。
一応XMLの規格には準拠している必要があります。
「@IT:XMLマスターへの道 第2回 XMLの概要と起源、関連規格」
http://www.atmarkit.co.jp/fxml/rensai2/ ... ter02.html
「XML」
http://gogodiet.net/z/xml/index.htm
XMLを扱うライブラリは定番とも言えるのがC言語の場合無いので、自力で作るか誰かが公開されているものを使う必要があります。
C++だとマイクロソフトのXmlLiteなどなどがあります。
Suikaba さんが書きました:それに伴ってですが、
東方のようなSTGでは途中に会話が入ったりするのですが、それもスクロール開始からの経過時間で
行なっているのでしょうか。
それとも、敵の出現テーブルの中に含まれている(表現が微妙かもしれません)のでしょうか。
イベントの発生なら経過時間でもスクロール量でも構いませんが中ボスを倒したりとか条件のある場合もあるかと思いますよ。
まぁざっくり考えて、敵の発生テーブルに入れておくのが管理しやすいかとは思いますが別に分けても良いと思います。
イベント条件が複雑ならLuaなどで複雑な条件をスクリプト記述するのも方法です。
つまり定番はないので、自分の好きに作られて良いと思います。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

Suikaba
記事: 194
登録日時: 9年前

Re: STGの敵の出現テーブル

#6

投稿記事 by Suikaba » 8年前

>> softyaさん
なるほど・・・とても参考になりました。ありがとうございました。

またお世話になるかとは思いますが、よろしくお願いいたします。
回答くださった方、本当にありがとうございました。

ISLe
記事: 2645
登録日時: 9年前
連絡を取る:

Re: STGの敵の出現テーブル

#7

投稿記事 by ISLe » 8年前

フレーム落ちしたら遅れた分だけズレて良いので1フレーム1カウントで良いのではないでしょうか?
60フレームに1.5秒かかってしまうところを時間単位で敵を出したら、ボスが道中の3分の2あたりで登場することになりますよ。

東方のようなシューティングゲームなら背景スクロールはフレームと同期していますからスクロールベースにする必要性は無いと思います。
会話中も背景スクロールしてますし。会話はプレイヤーの任意のタイミングで進みますし。
シューティング部分のメインモジュールでカウントしたら良いのではないでしょうか。

音ゲーで曲と同期させるような場合とかだと、フレームとは非同期になりますけど。

XMLはデータ構造とエラーチェックの仕組みが入っててその辺をライブラリに任せられるのでエディタの外部ファイル形式としての実装が楽だと思います。
XML自体はテキストファイルで手作業で弄れるのでデバッグもしやすいはずです。

Suikaba
記事: 194
登録日時: 9年前

Re: STGの敵の出現テーブル

#8

投稿記事 by Suikaba » 8年前

>>ISLeさん
回答有難う御座います。
経過時間で制御しても問題があるのですね・・・
とりあえずどちらの可能性も検討しつつ実装してみようと思います。
XMLについてですが、そうですね、見た目が綺麗だなぁと思いました。
いろいろとやりやすそうです。

回答有り難うございました

ISLe
記事: 2645
登録日時: 9年前
連絡を取る:

Re: STGの敵の出現テーブル

#9

投稿記事 by ISLe » 8年前

要は、フレーム落ちで発生した遅延をどうやって取り返すかの実装にかかってます。
取り返すにはフレーム落ちを検出するためのロジックを実装する必要がありますから気にしないというのもひとつの手です。

フレームレートを自動調整する場合でも、フレーム基準で組んでおいてコマ落ち(描画だけを飛ばす)で追い付かせる手がよく使われます。

閉鎖

“C言語何でも質問掲示板” へ戻る