[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 2chのread.cgiへ]
Update time : 05/09 09:02 / Filesize : 199 KB / Number-of Response : 762
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

シューティングゲーム製作技術総合 15機目



1 名前:名前は開発中のものです。 [2008/02/18(月) 12:02:20 ID:JNgyhRqZ]
ゲームプログラマなら誰もが通る、もしくは、通った道。青春の香り?
それは「シューティングゲーム製作」・・・。

このスレでは、そんなシューティングゲームの製作技術や技術の検証、成功談
失敗談笑い話、難易度の設定方法論、多弾の是非などについて語り合いましょう。
もちろんBulletMLなどで弾幕を作成してみたり、自分の作ったシューティングを
晒してみたり、プロジェクトをはじめてみるなどもOK!

ただし、シューティングの未来とか既存のゲームの話題などは、関連する他の
スレでやってくれ。

過去スレ,関連スレは >>2-3で。

142 名前:名前は開発中のものです。 mailto:sage [2008/03/25(火) 00:22:40 ID:+WqpoOyM]
ライフゲージをスライムの大きさで表示
そしてアイテムは全部スライム

143 名前:名前は開発中のものです。 mailto:sage [2008/03/25(火) 00:32:40 ID:9+3bwAjS]
普通に地上キャラでスライムだせばいいのでは・・・

144 名前:名前は開発中のものです。 mailto:sage [2008/03/25(火) 00:39:21 ID:BjCc4re0]
接触したら、コマンド入力方式戦闘シーンに突入すればいいのでは……。

145 名前:名前は開発中のものです。 mailto:sage [2008/03/25(火) 01:38:38 ID:uFzRVnSV]
ゲーム中の物体は全てオブジェクトで、
登場するたびにnewでメモリ確保してlistに突っ込んでるんだが、
newは自重したほうが速度的に有利なのかな
いまどきのPCなら問題ないよ・・・な?

146 名前:名前は開発中のものです。 mailto:sage [2008/03/25(火) 11:55:46 ID:mSvRfoAk]
そのぐらいの最適化、ちょっと手を加えれば済むんだからやっとけよ
プールして再利用、あとは事前にまとめて確保しておけ

147 名前:97=99 mailto:sage [2008/03/25(火) 12:04:14 ID:pBCIUDY5]
遅くなりましたがいろいろありがとうございました
今試行錯誤中です

148 名前:名前は開発中のものです。 mailto:sage [2008/03/25(火) 19:28:38 ID:njfgxTgM]
>>141
まさにその形で組んだ所だったよ。

内包する場合も141と同じ方式。
前にどこかで拾った式コピペしときま。外積使って頂点が左にあるか。を求めてるのかと。


828 2008/01/25(金) 18:20:24 ID:wCWKO3oH
名前は開発中のものです。(sage)

四角形ABCDと点Pの当たり判定
(Px-Ax)*(Py-By)-(Py-Ay)*(Px-Bx) > 0 and
(Px-Bx)*(Py-Cy)-(Py-By)*(Px-Cx) > 0 and
(Px-Cx)*(Py-Dy)-(Py-Cy)*(Px-Dx) > 0 and
(Px-Dx)*(Py-Ay)-(Py-Dy)*(Px-Ax) > 0
の時は当たり

149 名前:名前は開発中のものです。 mailto:sage [2008/03/25(火) 20:47:36 ID:ZVswnUkG]
>>146
ぶっちゃけSTGに可変長配列は要らないな
オブジェクトの配列を最初にまとめて確保して、存在フラグをメンバ変数に持たせる
派生クラスも作らないで、オブジェクトの種類はメンバ変数で管理

ぜんぜん美しくないけどな

150 名前:名前は開発中のものです。 mailto:sage [2008/03/26(水) 17:47:55 ID:H5DuUJqf]
オブジェクトのプールってどのように実装しているんでしょうか?

まとめて確保したオブジェクトのポインタをstackに積んでおいて
取り出したり使い終わったら戻したりみたいなやり方と
プールのlistと使用中のlistでやりとりするみたいなやり方
を思いついたんですけど・・・

もっとかっこいいやり方あるんでしょうか?



151 名前:名前は開発中のものです。 mailto:sage [2008/03/26(水) 18:31:19 ID:kiBU8E/6]
STLは使って無いんだけど、後者と同様の事をしてる。

任意サイズメモリを確保してそれをローカルヒープとして管理し、
そこからAlloc/Freeってのをやってたこともあったけど、可変サイズに対応可能だけど
メモリ管理ブロック分がもったいないとか、微々たるものだが処理コストが気になる、とか一長一短。
PCなら気にしなくてもいいかな?

152 名前:名前は開発中のものです。 mailto:sage [2008/03/26(水) 19:28:28 ID:GuggIAK/]
PCなら気にする必要は全く無しというのが俺の実験結果
ボス、弾、破片(パーティクル)に至るまで一個一個new(LocalAlloc)してdeleteして
24時間デモシーンをぶん回しても異常なしだったんだぜ

153 名前:名前は開発中のものです。 mailto:sage [2008/03/26(水) 20:34:31 ID:59FgdjS6]
物理演算とか相当煩雑な処理させない限り、
現在のPCの処理速度では最適化の意味がない、ってのは常々言われてるな
処理速度より、生産性とかソースの可読性とかを優先していいと思われ


154 名前:150 mailto:sage [2008/03/26(水) 22:29:36 ID:BPyz/7I/]
自分も今はそのままnewを使っているんですが
同じ動作をするなら少しでも軽いほうが精神衛生的に良いかなと。
処理もそんなに難しそうじゃないし。

まあ、一人でしこしこ作ってるので自分が納得できるようにやります。

155 名前:名前は開発中のものです。 mailto:sage [2008/03/26(水) 23:10:59 ID:u3R/2Gep]
それが一番だな。>自分が納得

156 名前:名前は開発中のものです。 mailto:sage [2008/03/26(水) 23:18:09 ID:pNomGL32]
俺は配列で確保してる


157 名前:名前は開発中のものです。 mailto:sage [2008/03/26(水) 23:37:23 ID:59FgdjS6]
クラスのサイズがバラバラだから、使いまわし出来ないなぁ
最大サイズで確保するのはなんか癪だ

158 名前:名前は開発中のものです。 mailto:sage [2008/03/27(木) 00:08:07 ID:sUf83WPb]
しかし最大サイズで確保するのが最も現実的な罠
断片化を抑えるために色々小細工してるから遅い、という原因には効く

159 名前:名前は開発中のものです。 mailto:sage [2008/03/27(木) 01:08:19 ID:V2zSEp+V]
>>157
>癪だ
富豪厨の俺に言わせれば
boost::simple_segregated_storageでガバッと確保して固定サイズでジャブジャブ融資
原資(メモリ)が足りない?そんなしみったれた貧弱PCユーザーは今すぐrejectだ!

160 名前:名前は開発中のものです。 mailto:sage [2008/03/27(木) 01:33:36 ID:PgdiK5wh]
アジャイル、UML,オブジェクト思考、階層化・・・
色々悩ませてくれたが・・・俺は最大の手段を使うことにした


そ れ は ・ ・ ・





goto文



161 名前:名前は開発中のものです。 mailto:sage [2008/03/27(木) 05:29:56 ID:/WF5Ry8k]
>>157
使いまわせるように作るんだよぅ

162 名前:名前は開発中のものです。 mailto:sage [2008/03/27(木) 09:52:59 ID:4/N0HnfM]
単純な直進弾や自機狙い弾と、
ホーミング弾や複雑なAIを持った敵機で、
必要なメンバ変数の数が違うんだよねぇ

163 名前:名前は開発中のものです。 mailto:sage [2008/03/27(木) 13:42:30 ID:QODpit3Q]
で?みたいな(笑)

164 名前:名前は開発中のものです。 mailto:sage [2008/03/27(木) 16:42:19 ID:V2zSEp+V]
>>162
3DSTGの敵機に編隊飛行、指令送受信、策敵、射撃、回避、離脱、体当たり
こんだけ積み込んでおおよそ64[Bytes/Instance]
ブースターだの脱出ポッドだのバリoートだのフライ○グアーマーだのといった
子インスタンスを加えても合計128[Bytes/Instance]を上回ることはなかった
誘導弾は64[Bytes/Instance]以下
直進弾は32[Bytes/Instance]以下

敵機200機の飽和攻撃により誘導弾800発と直進弾2000発
合計3000個のインスタンスが画面内を乱舞するとする

割り当て方法は全部同じプールでも別々のプールでも
インスタンス毎にnew(HeapAlloc)でも好きにしたまえだが
毎回HeapAllocだと管理領域分も考慮しなければいけないので
ここでは話を単純化するためプールとする

165 名前:続き mailto:sage [2008/03/27(木) 16:42:55 ID:V2zSEp+V]
富豪厨は太っ腹なので全て128[Bytes/Instance]の固定サイズで
湯水のごとくアロケート

種類   サイズ(使用メモリ) 個数 サイズ合計 使用メモリ合計 無駄使い
----------------------------------------------------------
敵.       128(128)    200   25600 .  25600 .        0
誘導弾    64(128)    800   51200  102400 .    51200
直進弾    32(128).   2000   64000  256000    192000
----------------------------------------------------------
合計     224(384)   3000 . 140800  384000    243200

敵、誘導弾、直進弾、別々のプールから割り当てる場合と比較すると
3倍弱のメモリを使用して約243KBを無駄にすることが分かる
これを「に、243KBも!(#@Д@)」とするか
「たったの243KBで騒ぐ貧乏人はrejectだな」とするかは
各人のエンゲル係数や可処分所得に左右される大変デリケートな問題
ここではあえて言及しないことにする

以上

166 名前:名前は開発中のものです。 mailto:sage [2008/03/27(木) 17:01:14 ID:V2zSEp+V]
× 約243KBを無駄にする
○ 約237KBを無駄にする

167 名前:名前は開発中のものです。 mailto:sage [2008/03/27(木) 20:03:42 ID:p+6nv0BF]
>敵機200機の飽和攻撃により誘導弾800発と直進弾2000発
>合計3000個のインスタンスが画面内を乱舞

これは酷いな。生きのこれる気がしないぜ

168 名前:名前は開発中のものです。 mailto:sage [2008/03/27(木) 20:38:33 ID:/7zHrXV5]
一昨日PC2 6400 2GBx2を8000円で買ったんだが
243200バイトの損失なら
8000 * 243200 / (1024^3 * 4) = 4.53E-01
たった45銭3厘の損失かぁ



MSXの32KB拡張RAMカートリッジ、高かったなぁ(遠い目

169 名前:名前は開発中のものです。 mailto:sage [2008/03/27(木) 21:35:50 ID:PgdiK5wh]
もまいらいったいいくつから作ってるんだ?

170 名前:名前は開発中のものです。 mailto:sage [2008/03/27(木) 21:58:45 ID:d3jrFqn7]
パピコンでBASICゲーム作ってたのは中学んときだけど、
まがりなりにもシューティングらしきのを作ったのは高校ん時だったかなぁ。
やはりパピコンのBASICコンパイラ+表示部分だけマシン語(ハンドアセンブル)で。

あの頃からほとんど成長してないのは正直どうかと……w



171 名前:名前は開発中のものです。 mailto:sage [2008/03/27(木) 22:04:51 ID:V2zSEp+V]
>>169
もまいの故郷

goto文を恐れなく使う兵達のスレ
pc.2ch.net/tech/kako/1021/10213/1021364372.html

172 名前:名前は開発中のものです。 mailto:sage [2008/03/27(木) 22:07:22 ID:DaOlp9/i]
真の富豪厨は毎回new/deleteだろ。

173 名前:名前は開発中のものです。 mailto:sage [2008/03/27(木) 22:11:27 ID:V2zSEp+V]
やった(>>152=俺)が、余りにもアッサリとうまく動きやがったので
面白くないからrejectしてやった

174 名前:名前は開発中のものです。 mailto:sage [2008/03/27(木) 22:58:05 ID:WDUR6Kc3]
3Dで敵機64バイトって小さすぎない?
姿勢情報とかでどうしても容量デカくなりそうだけど

175 名前:名前は開発中のものです。 mailto:sage [2008/03/27(木) 23:44:06 ID:XP2qgfZL]
変位(座標)と回転の情報を4x4行列にぶち込んでればそりゃブクブク膨れ上がるだろうけど
回転にクォータニオンとか使ってれば2要素増えるだけだぜ?(圧縮すれば1要素増加で済む)
変位のほうは単純にz成分(1要素)が加わるだけ

結局、姿勢情報はfloat値6個(24バイト)もあれば十分表現できる
後は速度情報を加えて計48バイトとか

まぁ普通はそんな感じじゃね?

176 名前:174 mailto:sage [2008/03/28(金) 00:28:27 ID:PZRPRNjR]
>変位(座標)と回転の情報を4x4行列にぶち込んでればそりゃブクブク膨れ上がるだろうけど

うっ、それまさに自分だ。。。
クォータニオンか。。。D3DXで提供されてるから素直に使ってみるか

レスd

177 名前:名前は開発中のものです。 mailto:sage [2008/03/28(金) 00:57:37 ID:p3ibL9sX]
そうかなぁ
4x4行列をジャブジャブ使ったほうがある意味で爽快かもよ

178 名前:名前は開発中のものです。 mailto:sage [2008/03/28(金) 01:12:03 ID:0fJyqmGF]
>>172
なんという俺


179 名前:名前は開発中のものです。 mailto:sage [2008/03/28(金) 01:12:06 ID:PZRPRNjR]
そ、そういう発想の転換もアリだよね、ね
PCならこの程度何の実害ないし
クォータニオンはまたその内検討してみまつ。。。

180 名前:名前は開発中のものです。 mailto:sage [2008/03/28(金) 01:13:36 ID:PZRPRNjR]
すまんこアンカー忘れ。>>177だた



181 名前:名前は開発中のものです。 mailto:sage [2008/03/28(金) 01:18:13 ID:Pgm9Hf0W]
>>177
おまいもうboostスレに帰れよw

182 名前:名前は開発中のものです。 mailto:sage [2008/03/28(金) 01:26:20 ID:p3ibL9sX]
どうもお邪魔しました!

_______    boostスレの     STGスレの
|←boostスレ|        中の人      中の人
. ̄.|| ̄ ̄ ̄       ┗(^o^ )┳(^o^ )┳(^o^ )┛≡=-
  ||            ┏┗  ┗┗  ┏┗ ≡=-
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄

183 名前:名前は開発中のものです。 mailto:sage [2008/03/28(金) 02:01:16 ID:ZjS17OFO]
絆スキップ

184 名前:名前は開発中のものです。 mailto:sage [2008/03/28(金) 14:37:29 ID:SjpgUEnZ]
>>175
>ブクブク膨れ上がる

常日頃からメタボメタボ言われまくってる俺の
センシティブなハートをお前は深く傷つけたよ

185 名前:名前は開発中のものです。 mailto:sage [2008/03/28(金) 20:50:33 ID:qlc6IPHd]
メタボ臭とかいう新ジャンルのSTGを開拓すればいんじゃね

186 名前:名前は開発中のものです。 mailto:sage [2008/03/28(金) 21:15:38 ID:/8lohFxt]
それ何てミクロの決死圏
血管の中で中性脂肪の弾幕でもかわすのか?すげぇ既視感あるネタだけど

泡状のとかブニョブニョしたものを描くの面倒臭そうだな
昔のメガデモでよくみかけたMETABALLみたいな手法を使えばいけそうだな


オヤジギャグじゃないからな

187 名前:名前は開発中のものです。 mailto:sage [2008/03/28(金) 22:00:27 ID:wFA3mk0n]
メガデモ(笑)
メタボール(笑)

オッサンばっか(笑)

188 名前:名前は開発中のものです。 mailto:sage [2008/03/28(金) 23:11:26 ID:ikErMOXa]
メガデモのメタボールの仕組みよく知らないんだが、あれって

 濃度を格納したボリュームデータを用意して
 ある濃度をしきい値にして面を張る

みたいな、ベタなやり方だったのかな
10年近く前にクラシックペンティアム積んだPCでぐりぐり動いてた
ような記憶があるんで、上記の手続きだと(特にボリュームデータの
更新、というかアニメーション?あたりが)かなり重たいものになりそうだし
やっぱ何らかのトリック(フェイク)が使われたのかな

あ、ソース公開されてる作品あるからそれ覗けばいいだろってのは分かってる
話題がないのでなんとなくネタ振りということで・・・

グニャグニャ(連続体?)オブジェクトが出現するSTGとか作ってみたいし


189 名前:名前は開発中のものです。 mailto:sage [2008/03/29(土) 01:52:02 ID:oF0Q5YC2]
ム板のメガデモスレ池
マジレス

190 名前:名前は開発中のものです。 mailto:sage [2008/03/29(土) 02:49:58 ID:4C1bZfLa]
>>188
ソフトレンダもので初代Pentiumでぐりぐり(60FPS以上で)動いてたなら
スクリーン解像度は400*300とか320*240程度だったはず
濃度値を収める三次元格子もかなり荒かったんじゃないかなぁ

濃度値の精度は8ビットで格子数は16*16*16=4096バイトとかで十分
この程度なら当時でも余裕で処理できたはず

つか、今時のビデオカードで2DSTGでメタボールっぽいキャラ出すなら
パーピクセルで描ける
法線マップとアルファ付きカラーマップにぼやけた円を重ね描きしていって
アルファテストで閾値設定して描けば立体感(光沢付き)ぷよぷよだよ!
DirectXのSDKにもそんな感じのサンプルが入ってたはず




191 名前:名前は開発中のものです。 mailto:sage [2008/03/29(土) 10:50:00 ID:p4/t7kS/]
背景が黒いなら加算合成で出来ちゃうんだけどな。

192 名前:名前は開発中のものです。 mailto:sage [2008/03/29(土) 10:52:47 ID:PdR5kqA3]
メタボはメタボールの略だったのか。

193 名前:名前は開発中のものです。 mailto:sage [2008/04/01(火) 15:39:40 ID:3rITgYf3]
メタルボーク発進

194 名前:名前は開発中のものです。 mailto:sage [2008/04/04(金) 00:38:42 ID:JN0z56Et]
質問
CGってグラフィックボードで描いてるんだよね?
ハード的な理由で描画はマルチスレッドみたいになるの?
てことは、処理落ちの原因はほとんど当たり判定とかのせいになるの?
ということは、当たり判定をマルチスレッド分担すればいろいろ完璧?

195 名前:名前は開発中のものです。 mailto:sage [2008/04/04(金) 01:02:14 ID:1TsuscT3]
今時、当たり判定程度で処理落ちするCPUはない
プログラムにむちゃくちゃ無駄が多かったりしない限り

3Dならポリゴン数が多いと、GPUの性能次第で処理落ちするし、
物理演算があるとCPU性能次第で処理落ちするかな

196 名前:名前は開発中のものです。 mailto:sage [2008/04/04(金) 03:26:09 ID:kdoRe4RJ]
>>194
「てことは」の前後の文脈がどういう理屈で繋がるのか知らんが、2DSTGの話をしてるなら
今時どんなヘボノートPC環境であろうとも「当たり判定」で処理落ちさせるなんて至難の業だな
5年近く前のモバノート(1GHz前後のペンM…当然シングルコア)でシングルスレッドの総当りで
敵50匹と弾1500発の処理やらせて普通に60fps出るんだから、この時点で既に「いろいろ完璧」

197 名前:名前は開発中のものです。 mailto:sage [2008/04/04(金) 03:59:52 ID:VspohKvQ]
そのスペックで1500の総当りってどう考えてもきつい気がするんだけども・・・

198 名前:名前は開発中のものです。 mailto:sage [2008/04/04(金) 07:15:31 ID:69exqbeK]
ウチのご隠居チンコパッドX31が初代セントリーノの1.2GHzで
だいたい同世代みたいだけど、1500個くらいならイケてる

ビデオチップがMobileRadeonとやや貧弱だから、計算よりも
描画周りに気を使う

使うっつってもテクスチャをケチりまくるとか
頂点バッファとDrawPrimitiveの使い方を適切に、とか
その程度の話だけどね

199 名前:名前は開発中のものです。 mailto:sage [2008/04/04(金) 10:16:35 ID:AI/AEUDG]
総当り以外の当たり判定処理ってのが思いつきません。

ずっと昔に仮想マップみたいなのを用意しておいて
そこにキャラや弾の情報を書き込み、判定の際に使うってのを
何かで見た記憶があるけど、こういうのの事でしょうか。

200 名前:名前は開発中のものです。 mailto:sage [2008/04/04(金) 10:46:32 ID:hPpN0s4/]
空間分割ってのがありまして。

完全2Dなら当たり判定のある空間を縦横20くらいに分割して、
それぞれの空間に属するもの同士で判定を取ることで、
当たる見込みの無いものとの判定を事前に回避する。



201 名前:名前は開発中のものです。 mailto:sage [2008/04/04(金) 12:27:23 ID:euXxyvh6]
>>199
pc11.2ch.net/test/read.cgi/gamedev/1199303757/762-765n
↑の質問したのお前?
仮に別人だとしてもこの過疎板でこのタイミングで同じ質問が二度出るのは変だな
どっかのゲー専の宿題か何かか?正直に吐いたら褒美をくれてやるぞw

202 名前:名前は開発中のものです。 mailto:sage [2008/04/04(金) 13:27:02 ID:AI/AEUDG]
違います。
ゲー専の宿題でもないです。

今、自分で2Dゲーム作ってて、
キャラと弾、全部あわせると最高1600強を動かしてて、総当りでやってて問題なく遊べてる。
(もちろんあくまで「最高1600」であって、常にそれだけ動いてるわけではない)
「自機と敵弾」だけの判定じゃなくて、「敵と敵弾」とかの判定もやってるのに
ちゃんと遊べるから、最近のPCの処理速度はすげーなーとか思いつつも
やっぱもっと効率のいい判定方法ないかな、と考えてただけです。

203 名前:名前は開発中のものです。 mailto:sage [2008/04/04(金) 14:08:55 ID:98Hdy+Q5]
1600*1600の総当りは3年位前のスペックだときつくないかな?

204 名前:名前は開発中のものです。 mailto:sage [2008/04/04(金) 14:20:04 ID:kACwEiIs]
三年前、2005年のスペックというと
athlon64が全盛でathlon64x2が登場、Core2Duoがまだ、という辺り

有り得ないくらい余裕だな

205 名前:名前は開発中のものです。 mailto:sage [2008/04/04(金) 14:36:20 ID:8r+omDm7]
1600*1600だと最新マシンでも空間分割しないときついんじゃないか。
>>196は弾*キャラなんじゃない?

206 名前:名前は開発中のものです。 mailto:sage [2008/04/04(金) 16:24:58 ID:XVBdGsRf]
典型的な2DSTGで1600のオブジェクトを表示するったって大半が弾なんだけど
1600*1600という数字(組み合わせ)に一体何の意味があるのか>>203は説明できないだろ

207 名前:名前は開発中のものです。 mailto:sage [2008/04/04(金) 16:25:30 ID:KKsDXKAb]
ja.pastebin.ca/970731
やっつけだがpen3 1GHzのマシンで平均32ミリ秒
30fpsで間に合わないってところか

208 名前:名前は開発中のものです。 mailto:sage [2008/04/04(金) 17:04:15 ID:KKsDXKAb]
ja.pastebin.ca/970760
今度は32*32の敵64体と16*16の弾1600発のテストで、弾はヒットしたら壊れるという想定
同マシンで2〜3ミリ秒
余裕すぎるな

ただのジコマンなのに連投してすまん

209 名前:名前は開発中のものです。 mailto:sage [2008/04/04(金) 17:25:12 ID:0OItj9LK]
総当りっていったら、普通は敵だの弾だの関係なく
{1600}C{2} = 1600*1599/2 の組み合わせになるんじゃないのか?
64*1600の組み合わせじゃあ桁が違う

210 名前:名前は開発中のものです。 mailto:sage [2008/04/04(金) 17:32:55 ID:KKsDXKAb]
>>209
それは>>207

>>208は単なるジコマンぽ



211 名前:名前は開発中のものです。 mailto:sage [2008/04/04(金) 19:04:55 ID:g/x8ThIF]
>>203
”総当りの意味をちゃんと使ってくれ”
と、暗に言ってるだけだと思うんだが

212 名前:名前は開発中のものです。 mailto:sage [2008/04/04(金) 20:34:11 ID:GfOfbOVS]
オブジェクトを敵機・弾など種類ごとにリストにしておき、
あるリストの要素と別のリストの要素の当たり判定を行うことで、
無駄な判定はなくせると思うが


213 名前:名前は開発中のものです。 mailto:sage [2008/04/04(金) 20:42:54 ID:9+TzVPLQ]
俺もそれだ。

214 名前:名前は開発中のものです。 mailto:sage [2008/04/04(金) 21:04:37 ID:qbhzPNp0]
>>212
例えば自機が画面の左下にあるのに
右上に固まってる敵弾と判定と判定を行うのは無駄な判定だとは思わないか?

215 名前:名前は開発中のものです。 mailto:sage [2008/04/04(金) 21:06:02 ID:qbhzPNp0]
なんか変な文章に・・・

216 名前:199=202 mailto:sage [2008/04/04(金) 21:43:26 ID:WdCHFh7R]
なんか俺の書いた事について色々あったみたいで、申し訳ないです。

俺が問題としてた話題はあくまで「総当り以外の判定方法」であって、
それ以外(俺がどんな事やってるか)は、この際関係ないから
>>201さんに納得してもらえる程度の情報出せばいいと思って
おおざっぱな説明しただけで、実際に1600*1600の判定やってるわけじゃないです。

常に全キャラ使ってるわけじゃないし、キャラ同士、弾同士の衝突判定は
ある場合より無い場合の方が多いし、そもそも味方同士の判定はやってないし、
というようにかなり減らしてはいます。

という事で>>201さんに納得していただいて、その褒美を貰おうと心待ちにしている次第です。

217 名前:名前は開発中のものです。 mailto:sage [2008/04/04(金) 22:03:57 ID:GfOfbOVS]
>>214
当たり判定範囲が矩形なら無駄な判定は生じない
むしろ、空間分割の方が無駄
5〜10個の矩形の複合体とか円形とか多角形なら、空間分割にも利があるけど、
矩形のバウンディングボックスで一度判定すれば十分だろ

218 名前:名前は開発中のものです。 mailto:sage [2008/04/04(金) 23:32:07 ID:qbhzPNp0]
俺の日本語がダメなばっかりに変な誤解をさせてしまってるかもしれない・・・
それとも俺が誤解してるのかも?

>>212の方法って敵弾が1000個あったとしたら
1000回自機と判定しなきゃならないってことだよね?

悪い例えだけど(実際はツリーだったり)
敵弾を分割した空間ごとにリストにしておき、
自機のある空間とその空間のリストの当たり判定を行うことで、
無駄な判定はなくせると思うが

219 名前:名前は開発中のものです。 mailto:sage [2008/04/04(金) 23:32:34 ID:KKsDXKAb]
組み合わせが多いときは、分割は有効だけどね

220 名前:名前は開発中のものです。 mailto:sage [2008/04/04(金) 23:37:39 ID:KKsDXKAb]
グリッドハッシュ
ttp://lucille.atso-net.jp/blog/?p=85

シューティングにここまで必要か?と問われたら
個人的には要らないと答えるが
知っておいて損は無いと思う



221 名前:名前は開発中のものです。 mailto:sage [2008/04/04(金) 23:50:38 ID:98Hdy+Q5]
昔は、IF文使うときに&&を使わず
入れ子にして速度を稼いだりしたなぁ

222 名前:名前は開発中のものです。 mailto:sage [2008/04/04(金) 23:53:49 ID:qbhzPNp0]
確かに1対多だったら労力のわりにたいした恩恵受けるもんでもないんだけども・・・

223 名前:名前は開発中のものです。 mailto:sage [2008/04/05(土) 00:13:39 ID:ElJWYWg0]
とりあえず、オマエラ「空間分割 衝突」で1回ググれば幸せになれるんじゃね?

224 名前:名前は開発中のものです。 mailto:sage [2008/04/05(土) 00:23:10 ID:xg5znUOR]
>>221
わざわざ入れ子にしなくても
if( A() && B() )
これA()がfalseならB()は実行されないから
左のほうをfalseになりやすいものにすればいいと思うんだけど
昔のコンパイラは違うのかね

225 名前:名前は開発中のものです。 mailto:sage [2008/04/05(土) 00:27:12 ID:ndMxol9I]
>>209
敵弾とか敵機はお互い衝突しない
つまり敵属性同士は衝突しない
自機と自弾についても同じこと

敵(Enemy)と自(プレイヤー、味方、Friendly)。たった「2種」の敵味方属性
そしてオブジェクトに割り当てられる敵味方属性情報は静的。定数。const
プリプロセッサ、コンパイラにかける前から明らか。火を見るより
ゲームデザインの時点で既に決まってること
それなのに、判定…意味も無く…1600*1600回…あり得ない…愚行…常軌を逸する…愚鈍

226 名前:名前は開発中のものです。 mailto:sage [2008/04/05(土) 00:28:02 ID:ndMxol9I]
BULLET enemybulletarray[1500];
ENEMY enemyarray[100];
PLAYER player;
for(int n0=0; n0<1500; n0++){
  for(int n1=0; n1<1500; n1++)
   CollisionDetection( enemybulletarray[n0] , enemybulletarray[n1] );
  for(int n1=0; n1<100; n1++)
   CollisionDetection( enemybulletarray[n0] , enemyarray[n1] );
}
for(int n0=0; n0<100; n0++){
  for(int n1=0; n1<1500; n1++)
   CollisionDetection( enemybulletarray[n0] , enemybulletarray[n1] );
  for(int n1=0; n1<100; n1++)
   CollisionDetection( enemybulletarray[n0] , enemyarray[n1] );
}
//↑ここまでで1600*1600回

227 名前:名前は開発中のものです。 mailto:sage [2008/04/05(土) 00:38:24 ID:ndMxol9I]
BULLET playerbullet[100];
//2DSTGで総当りで当たり判定するっつったら普通コレ
for( int n0=0; n0<1500; n0++)
  CollisionDetection(player , enemybulletarray[n0]);
for( int n0=0; n0<100; n0++)
  CollisionDetection(player , enemyarray[n0]);
for( int n0=0; n0<100; n0++)
  for(int n1=0; n1<100; n1++)
   CollisionDetection( enemyarray[n0], playerbullet[n1] );

228 名前:名前は開発中のものです。 mailto:sage [2008/04/05(土) 00:43:36 ID:ndMxol9I]
BULLET enemybulletarray[1500];
>>226訂正

ENEMY enemyarray[100];
PLAYER player;
for(int n0=0; n0<1500; n0++){
  for(int n1=0; n1<1500; n1++)
   CollisionDetection( enemybulletarray[n0] , enemybulletarray[n1] );
  for(int n1=0; n1<100; n1++)
   CollisionDetection( enemybulletarray[n0] , enemyarray[n1] );
}
for(int n0=0; n0<100; n0++){
  for(int n1=0; n1<1500; n1++)
   CollisionDetection( enemyarray[n0] , enemybulletarray[n1] );
  for(int n1=0; n1<100; n1++)
   CollisionDetection( enemyarray[n0] , enemyarray[n1] );
}
//↑ここまでで1600*1600回


229 名前:名前は開発中のものです。 mailto:sage [2008/04/05(土) 00:47:03 ID:KzcCKEO1]
>>225-228
言いたい事は概ね同意だが下手なカイジネタは寒いからヤメレ

230 名前:名前は開発中のものです。 mailto:sage [2008/04/05(土) 00:51:05 ID:ouV9zovg]
自機と敵弾・敵機と自弾以外に衝突判定する必要無いだろ
1600×1600になるのは自機1600機と敵弾1600個みたいな時



231 名前:名前は開発中のものです。 mailto:sage [2008/04/05(土) 00:57:53 ID:fK+4rNgg]
弾同士が打ち消しあうときもな

232 名前:名前は開発中のものです。 mailto:sage [2008/04/05(土) 01:02:18 ID:xg5znUOR]
弾同士の当たり判定が無いなんて勝手に決め付けるなよ。
そういうSTG作りたいと思ってる人がいるかもしれないじゃないか。
というより5年前に俺が作った。
ビリヤード風弾幕wwwとかいいながら。
ひどい処理落ちで泣いた。

233 名前:名前は開発中のものです。 mailto:sage [2008/04/05(土) 01:03:00 ID:KzcCKEO1]
計算機アルゴリズムで使われる「総当たり」とか「総当たり法」ってのは
理論的にありうるor考え得る全ての組み合わせ全てを○○する、ことであって
この理論的にありうる、考え得るってのがキモ

理論的にありえない、100%かんがえられない組み合わせを端から除外しても
やはり総当たりだ

敵同士、味方同士は「当たらない」というルールになってるなら端から除外しても
やはり総当たりだ



234 名前:名前は開発中のものです。 mailto:sage [2008/04/05(土) 01:04:20 ID:ouV9zovg]
弾同士が打ち消し合うときは(1599 + 1) / 2×1599じゃないか?

235 名前:名前は開発中のものです。 mailto:sage [2008/04/05(土) 01:37:44 ID:ndMxol9I]
>>229
ウッセー自分で書いて後で赤面してんだからそれ以上言うな

236 名前:名前は開発中のものです。 mailto:sage [2008/04/05(土) 15:10:07 ID:yDdR+5eW]
33MHzくらいのCPUでSTGを作ったときは空間分割にしないと重くて大変だった。
そういうプアなハードじゃないなら好きに作った方がいいかもね。

237 名前:名前は開発中のものです。 mailto:sage [2008/04/05(土) 15:19:58 ID:q5ZpKtyT]
自機の弾が1600発とか弾で画面が見えなくなりそうだなw

238 名前:名前は開発中のものです。 mailto:sage [2008/04/05(土) 18:40:45 ID:9fddUrpP]
>>224
私の記憶が確かならば、A()でとっとと打ち切られるのはCの仕様で保証されているはずだ。

239 名前:名前は開発中のものです。 mailto:sage [2008/04/05(土) 19:27:04 ID:hxbbxTAw]
O(n^2)の壁は厚すぎる

240 名前:名前は開発中のものです。 mailto:sage [2008/04/06(日) 01:22:08 ID:+j0OgDSv]
>>218
矩形同士の判定程度だと、
  ツリー管理コスト>>>衝突判定のコスト
だと思うのだが。これが3Dでコリジョンも複雑になってくると、
  衝突判定コスト>>>ツリー管理コスト
になるけど



241 名前:名前は開発中のものです。 mailto:sage [2008/04/06(日) 01:42:33 ID:5ljxdwAA]
>240 の頭の中にはどんな木が生えているのだろう?
木ってぐらいなんだから再帰なんだんろうけど、

それよりも、ずっと簡単なs個の空間分割でこんな感じだよ。

比較回数(衝突判定回数)は総当たりが一定でO(N^2)としたら、

s個の空間に分割した時は、
最小 O(N^2/s +N) 〜 最大 O(N^2 +N)
 +Nってあるのは、中心より上とか下とか、左右とか、分割条件との比較。

最大は、全ての判定対象が一つの空間に有るとき。
最小は、全ての判定対象が均一にそれぞれの空間に別れたとき。

最大なんて状態ばかりのゲームはそう滅多に作れない。
必要とあらば中心を移動する事もできちゃうしね。

242 名前:名前は開発中のものです。 mailto:sage [2008/04/06(日) 02:25:27 ID:KzCv2Ahg]
あれだ





弾幕ゲーが嫌いで、オブジェクト数がさほど多くない俺には不要>空間分割






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<199KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef