- 1 名前:名前は開発中のものです。 [2008/02/18(月) 12:02:20 ID:JNgyhRqZ]
- ゲームプログラマなら誰もが通る、もしくは、通った道。青春の香り?
それは「シューティングゲーム製作」・・・。 このスレでは、そんなシューティングゲームの製作技術や技術の検証、成功談 失敗談笑い話、難易度の設定方法論、多弾の是非などについて語り合いましょう。 もちろんBulletMLなどで弾幕を作成してみたり、自分の作ったシューティングを 晒してみたり、プロジェクトをはじめてみるなどもOK! ただし、シューティングの未来とか既存のゲームの話題などは、関連する他の スレでやってくれ。 過去スレ,関連スレは >>2-3で。
- 139 名前:名前は開発中のものです。 mailto:sage [2008/03/24(月) 22:33:21 ID:V5wQxKJV]
- 横シューでグラVのバスクリン見たいに落ちてくるとか
- 140 名前:名前は開発中のものです。 mailto:sage [2008/03/24(月) 23:21:17 ID:nPahSoi8]
- >>137
えぇ。適当にベクトルの式の立てて解くっぽいことしか想像できないw しかもやり方わからんし 数Cもっとまじめにやるんだったかな・・・ちょっくら高校の教科書とにらめっこしてくる。
- 141 名前:名前は開発中のものです。 mailto:sage [2008/03/24(月) 23:44:00 ID:YAOqhvfe]
- 一方がもう一方に入り込む可能性を無視するなら、各辺が交わっているか判定する
入り込む場合は、一方の頂点がもう一方の領域に入っていることを判定する 頂点が領域に入っている判定は、 矩形に限定するなら、座標変換した後、普通に矩形と頂点の判定をするとか 凸多角形なら、辺と頂点の位置関係(常に頂点が辺の左側にあるか)を判定すればOK こんな感じ? >>139 背景の当たり判定考えてないんだよねぇ 何か土台でも作ろうかな
- 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)の壁は厚すぎる
|

|