1 名前:名前は開発中のものです。 mailto:sage [2008/11/27(木) 10:18:19 ID:bBI1A+d5] ゲームプログラマなら誰もが通る、もしくは、通った道。青春の香り? それは「シューティングゲーム製作」・・・。 このスレでは、そんなシューティングゲームの製作技術や技術の検証、成功談 失敗談笑い話、難易度の設定方法論、多弾の是非などについて語り合いましょう。 もちろんBulletMLなどで弾幕を作成してみたり、自分の作ったシューティングを 晒してみたり、プロジェクトをはじめてみるなどもOK! ただし、シューティングの未来とか既存のゲームの話題などは、関連する他の スレでやってくれ。 過去スレ,関連スレは >>2-3 で。
501 名前:名前は開発中のものです。 [2009/03/05(木) 22:06:05 ID:K8fBdWo9] >>661 BulletもEnemyもFireは持ってない。 BulletもEnemyも呼ばれるのはupdateとdrawだけ。 それぞれの行動はupdateの中でScriptが決めてActionに実体がある感じ。 class Fireはないけどあえて書くなら class Fire : public Action class Move : public Action みたいになっている。
502 名前:名前は開発中のものです。 mailto:sage [2009/03/05(木) 22:11:08 ID:/7Ei5x6Q] >>664 すまんね ちと混合していた Fire() はないようだね 君は Composite パターン 問題ない ただ、複雑になるのはある程度予測しといた方がいい
503 名前:名前は開発中のものです。 mailto:sage [2009/03/05(木) 22:15:21 ID:/7Ei5x6Q] >>664 いや class Enemy : public Bullet ここが問題 それでいくなら Decorator パターン class Decorator : public Object class Bullet : public Decorator class Enemy : public Decorator class MyShip : public Decorator ではどうかね?
504 名前:名前は開発中のものです。 mailto:sage [2009/03/05(木) 22:21:16 ID:g++EGVdD] >>663 >>656 のミスリードには気付いてたけど、僕がいう事じゃ無いし 後はみんなの好き嫌いをアンケート程度の気分で聞いておく >>661 ぐらいだったら、僕は許すな アンチパターンも許すけど、 >Draw(){/*SetStreamSource()1回に、SetMatrix()とDrawPrimitive()を配列要素数回 */} は譲れないな
505 名前:名前は開発中のものです。 mailto:sage [2009/03/05(木) 22:23:48 ID:/7Ei5x6Q] >>660 なるほど EnemyA, EnemyB に目がいっていた 君がしたいのは Iterator パターンでは?
506 名前:名前は開発中のものです。 mailto:sage [2009/03/05(木) 22:50:23 ID:/7Ei5x6Q] //---------------------- // 永遠に呼ばれない void Bullet::Fire() { printf( "部長ぉぉぉぉぉぉぉ!!!\n" ); } //---------------------- とかしてもいいかな
507 名前:名前は開発中のものです。 mailto:sage [2009/03/05(木) 22:53:56 ID:/7Ei5x6Q] //---------------------------------------------------------------------------- // 永遠に呼ばれない void Bullet::Fire() { MessageBox( HWND_DESKTOP, "返事がないようだ ただの屍のようだ", "error?", MB_OK ); or MessageBox( HWND_DESKTOP, "パターンが分からないようだ", "error?", MB_OK ); } //----------------------------------------------------------------------------
508 名前:名前は開発中のものです。 mailto:sage [2009/03/05(木) 23:03:09 ID:vElUtQql] いまさらだけど、>>656 の >Enemy インスタンスが消滅すると >Bullet インスタンスも消えてしまう な に を い っ て い る ん だ ? 継承を理解してないな。 それはそうと個人的には class Bullet : public Enemy なんだけどな。 弾は特殊な敵って意味合いで。
509 名前:名前は開発中のものです。 mailto:sage [2009/03/05(木) 23:13:05 ID:/7Ei5x6Q] >>671 ミスリードと言ってるだろ 反応ないから寝る
510 名前:名前は開発中のものです。 mailto:sage [2009/03/05(木) 23:16:48 ID:/4jagLW1] なんとなくメモリの動的確保をしたくない俺は ずらずらとスパゲティ書いてるw
511 名前:名前は開発中のものです。 mailto:sage [2009/03/05(木) 23:42:12 ID:1d/NzH52] うむ。まだデザパタがまだ生成パターンしか読み終わってないうちにはちと辛いな、デザタパで説明が完結されるとorz てかみんな柔軟だな。実際のコードを覗いてみたいぜ。・・・C++は多分読めないけど
512 名前:名前は開発中のものです。 [2009/03/06(金) 00:03:12 ID:Eu3rRFpD] >>674 ID:/7Ei5x6Q の言ってることはあまり気にしない方がいいよ。
513 名前:名前は開発中のものです。 mailto:sage [2009/03/06(金) 07:29:29 ID:xstPUn85] >>675 ID変えてからの反応ではもう誰も信頼せんよ そんなに否定するなら代案だせよ ID:K8fBdWo9「だれか〜このソースどうにかしてくれませんか〜?」 ID:/7Ei5x6Q「こういうのはどうかね?」 ID:K8fBdWo9「・・・」 この船は先に進むんですか?
514 名前:名前は開発中のものです。 mailto:sage [2009/03/06(金) 08:00:37 ID:UQFJ8zhz] >>676 港につきません。
515 名前:名前は開発中のものです。 mailto:sage [2009/03/06(金) 11:06:50 ID:HHW0AAKz] どこをどう勘違いしたら>>656 みたいな解釈になるんだ。 ていうか >継承という概念が分かってない ってのはID:/7Ei5x6Q 自身の話かな。 とりあえずC++のサイト回って勉強してみては?
516 名前:名前は開発中のものです。 [2009/03/06(金) 12:07:53 ID:Eu3rRFpD] >>676 ID:K8fBdWo9が低レベルすぎて話にならない所をやんわり流してるんだろ。
517 名前:名前は開発中のものです。 [2009/03/06(金) 12:11:05 ID:Eu3rRFpD] >>676 間違えた ID:/7Ei5x6Qが低レベルすぎて話にならない所をやんわり流してるんだろ。
518 名前:/7Ei5x6Q mailto:sage [2009/03/06(金) 12:58:32 ID:xstPUn85] そうなのかい? 君のはデコレータパターンとコンポジットパターンの組み合わせだよ もしくはパターンに当てはめられるのが嫌だったのかな ごめんよ・・・
519 名前:名前は開発中のものです。 mailto:sage [2009/03/06(金) 13:07:51 ID:q2+zc1Kz] クラス?継承?new?知らんがな(´・ω・`) 構造体最強ヒャァハァァァァー
520 名前:名前は開発中のものです。 mailto:sage [2009/03/06(金) 13:36:30 ID:dVN9ZSyA] よう、俺。
521 名前:名前は開発中のものです。 mailto:sage [2009/03/06(金) 13:57:04 ID:C76RJ9rx] >>682 その結論はオカシイ このパターン厨の書いてることは、パターンの名前で ググる事ができる奴が見たら赤面もんのことばかりだぞ… >>674 の持ってる本がちょっと分厚過ぎるじゃないか? GoFは、たった23個しか無くて判りやすい図が入ってる …STG制作にはアンチパターン>>655 が要る事もあるが、 発想の種子ぐらいにはなるんじゃない?
522 名前:名前は開発中のものです。 mailto:sage [2009/03/06(金) 14:06:02 ID:q2+zc1Kz] >>684 いや、俺はガチで会話についていけないだけだww 最近になってポインタの使い道がわかって喜んで関数作って動いてSUGEEEEEEEEってやってるレベルだ 独学マンセー
523 名前:名前は開発中のものです。 mailto:sage [2009/03/06(金) 14:15:36 ID:wgorap74] みんな いったい誰と戦っているんだ!?
524 名前:名前は開発中のものです。 mailto:sage [2009/03/06(金) 15:03:36 ID:xstPUn85] ブルマは脱いだらアカンがな(`・ω・´)
525 名前:名前は開発中のものです。 mailto:sage [2009/03/06(金) 16:33:57 ID:QhFILLD4] このスレでは、そんなシューティングゲームの製作技術や技術の検証、成功談 失敗談笑い話、難易度の設定方法論、多弾の是非などについて語り合いましょう。 もちろんBulletMLなどで弾幕を作成してみたり、自分の作ったシューティングを 晒してみたり、プロジェクトをはじめてみるなどもOK! 何でここ喧嘩と設計の話ばっかりなの? 実際に作ってる奴いるの?
526 名前:名前は開発中のものです。 mailto:sage [2009/03/06(金) 17:41:36 ID:wgorap74] これは自作自演でうpする前フリだな
527 名前:685 mailto:sage [2009/03/06(金) 18:57:39 ID:E7ymH2OK] 作ってるぜっ(・∀・)半年前に一度うpしてるぜ
528 名前:名前は開発中のものです。 mailto:sage [2009/03/06(金) 19:33:21 ID:fB/frkhf] 頑張ってクラスとか継承とか使ってみるものの、こんがらがって死ぬ 設計がいかに大事かがセッ分かった気がする
529 名前:名前は開発中のものです。 mailto:sage [2009/03/06(金) 19:49:27 ID:g/bnT2ZX] 俺はObject クラス作って基本、自機や敵、それらの弾、爆発、背景等はみんなObjectから派生させて作ってる 敵から出る弾は当たり判定チェックの関係上、壊せる弾は敵と同じ扱い(Enemy派生)、壊せん奴は別扱い ただ、getxとか使うとイメージ的に負荷かかりそうで座標とかpublicにしてるためStructチックになってしまってるorz 以前は強引にfriend使ってたw まあとりあえず完成させればいいよな、どこかは言わんが以前別スレにうpしてる
530 名前:名前は開発中のものです。 mailto:sage [2009/03/06(金) 19:58:07 ID:CCKZ0ZvT] >>692 特定した
531 名前:名前は開発中のものです。 mailto:sage [2009/03/06(金) 20:04:30 ID:xstPUn85] >>692 当たり判定は どこのクラスでやってる?
532 名前:名前は開発中のものです。 mailto:sage [2009/03/06(金) 20:35:02 ID:t1RJlJqe] 作ってるぜ、劣化サイヴァリアみたいなの。ここのレスはレベルが高くて理解出来ないけど。
533 名前:名前は開発中のものです。 mailto:sage [2009/03/06(金) 20:40:28 ID:C76RJ9rx] この流れなら言える!! ちょい前までゲーム制作ブログのオマケでSTGも挙げてたけど、全部消してバックれたぜw …移転先や安否を気遣うメールは一通たりとも来なかったぜ… orz きっと、色々内情を察してくれたんだ、多分、きっと多分
534 名前:名前は開発中のものです。 mailto:sage [2009/03/06(金) 20:45:54 ID:g/bnT2ZX] 当たり判定はゲーム本体のクラスでやる予定(以前はグローバル関数でやってた)
535 名前:名前は開発中のものです。 mailto:sage [2009/03/06(金) 21:37:07 ID:xstPUn85] >>696 バックれたら 移転先もわからんだろうw
536 名前:名前は開発中のものです。 mailto:sage [2009/03/06(金) 21:42:08 ID:ZZrBBfbz] >>697 ミジンコがうじ虫になるくらいの進化じゃないか! マジレスするならグローバル関数でやるのと大差ないぞ、それ。
537 名前:名前は開発中のものです。 mailto:sage [2009/03/06(金) 21:50:00 ID:QYwcIkUm] JAVAで作ってるのは俺くらいか…… つい最近調べてみたら、なんか東方遊夜雀なんてもんが開発されてたりするのね。 ハードル高いwwww
538 名前:名前は開発中のものです。 mailto:sage [2009/03/06(金) 21:58:23 ID:g/bnT2ZX] 駄目なのか 他にも敵クラス辺りに当たり判定するメンバ関数作ることも考えてるけど まあ呼び出すところは変わらんけど
539 名前:名前は開発中のものです。 mailto:sage [2009/03/06(金) 22:02:00 ID:QYwcIkUm] 普通はbulletクラスかplayerクラスにisHit関数を付けるもんだろう。 だってそうしないと弾固有の当たり判定とかとれないじゃん。
540 名前:名前は開発中のものです。 mailto:sage [2009/03/06(金) 22:23:03 ID:k/SdMtBY] >>697 俺の場合、 class CollisionListener { public: int getX(); int getY(); int getWidth(); int getHeight(); void touched(CollisionListener* obj) // objは衝突相手 }; class Player : public CollisionListener; class Bullet : public CollisionListener; class Enemy : public CollisionListener; /* 衝突判定のカテゴリを分類する。(例:プレイヤなら敵、敵弾、地面と衝突。敵弾ならプレイヤ、地面と衝突) */ enum CollisionGroup { Player, PlayerBullet, Enemy, EnemyBullet, Ground }; /* 衝突検知を管理するクラス(ほんとは○○マネージャとかいう名前はダメなんだとかうんたらかんたら……) */ class CollisionManager { public: void addListener( CollisionGroup type, CollisionListener* listener ); // リスナ(プレイヤ、敵とか)を登録する void removeListener( CollisionGroup type, CollisionListener* listener ); // 登録を抹消する void detect(); // 登録されたリスナの衝突を検知し、衝突したならリスナのtouchedメソッドを呼び出す };
541 名前:名前は開発中のものです。 mailto:sage [2009/03/06(金) 22:27:05 ID:C76RJ9rx] ぶっちゃけ関連ページが全部消えててメアドだけ生きてるとは普通思わないもんな >>701 これくらいなら「ダメ出し」があったとしても、クラス設計の善し悪しの話で、 >>702 みたいなのをifで逃がすことになると、クラス設計が下手だと言われる。 その関数の中に、switchやifが沢山含まれるなら、設計を変える事で 良くなる『可能性』があるし、将来の拡張でswitchやifを加えないで済む『可能性』もある アドホックなswitchやifも許し… …今クラス設計の話をしてるんだから、参考にすべきだ(゚Д゚)ハッ!
542 名前:名前は開発中のものです。 mailto:sage [2009/03/06(金) 22:51:03 ID:QYwcIkUm] それはそうとおまえらに質問。 クラス名の相談なんだが、敵の弾クラスはbulletでいいと思うんだが、自分の発射した弾はなんて名前にするのがベスト? bulletクラスを継承してないからplayerBulletって名前にするのも変だし……
543 名前:名前は開発中のものです。 mailto:sage [2009/03/06(金) 22:59:54 ID:C76RJ9rx] shot に一票
544 名前:名前は開発中のものです。 mailto:sage [2009/03/06(金) 23:06:52 ID:ZZrBBfbz] >>705 EnemyBullet,PlayerBullet って明記してしまえば後で見ても間違わない気がする。 気がするだけかもしれない。 Object -> Enemy -> EnemyBullet ├ -> Player └ -> PlayerBullet みたくなるだろうけど、それでよければ。
545 名前:名前は開発中のものです。 mailto:sage [2009/03/06(金) 23:07:20 ID:QYwcIkUm] >>706 せんきゅー。shotって命名しておいたぜ! それと、携帯アプリのSTGだとどういうインターフェイスで弾撃たせるのが楽かな? 自動で撃ってしまうとそれはそれで戦略性が低くなってしまいそうなのだが。
546 名前:名前は開発中のものです。 mailto:sage [2009/03/06(金) 23:09:44 ID:ZZrBBfbz] >>707 は矢印の方向に継承するってことでヨロ。 クラス図としてみたら逆になっちゃうけど突っ込んじゃらめぇ
547 名前:名前は開発中のものです。 mailto:sage [2009/03/06(金) 23:10:38 ID:CCKZ0ZvT] プレイヤーの弾はChinkoにして可読性を著しく低下させてる
548 名前:名前は開発中のものです。 mailto:sage [2009/03/06(金) 23:14:46 ID:ZZrBBfbz] >>710 おま…それアンタッチャブルじゃないか 触れないです><
549 名前:名前は開発中のものです。 [2009/03/07(土) 14:49:37 ID:oFkRuMFA] class OchinpoMilkとかやるだろ。 あとで後悔するんだけど。
550 名前:名前は開発中のものです。 mailto:sage [2009/03/07(土) 15:07:06 ID:bRexpzAJ] 確かにシューティングゲームだな
551 名前:名前は開発中のものです。 mailto:sage [2009/03/08(日) 05:03:44 ID:j2H/7CnL] class AbstractManko { private: virtual long ChinkoPlease(size_t) = 0; }; //○月×日作成: すべてのクラスはこれを継承してねw名前変えないでねw
552 名前:名前は開発中のものです。 mailto:sage [2009/03/08(日) 07:56:41 ID:XlVAa9br] すべての存在はAbstractなMankoから生まれる……
553 名前:名前は開発中のものです。 mailto:sage [2009/03/08(日) 15:43:28 ID:B8bsQorT] なるほど。playerはmotherShipクラスから生成されて、enemyはalienMotherクラスから生成されるんだな……
554 名前:名前は開発中のものです。 mailto:sage [2009/03/08(日) 16:19:58 ID:AO3ln+kr] ChinkoPlease(size_t) がprivate:って、 ありえねぇーことを宣言するなw。
555 名前:名前は開発中のものです。 [2009/03/08(日) 16:29:42 ID:3kCVX1OJ] STGの話題じゃないけど #include <iostream> class A{ private: virtual void aa(void) = 0; }; class B : public A{ public: void aa(void){} }; int main(void){ B b; b.aa(); std::cout << "hello" << std::endl; char c; std::cin >> c; return 0; }; が通るのは何で?
556 名前:名前は開発中のものです。 mailto:sage [2009/03/08(日) 16:35:19 ID:lUOcnlf/] 何が疑問なのかわからないが、、、、virtual をオーバーライドした関数はvirtual が無くてもvirtual
557 名前:名前は開発中のものです。 mailto:sage [2009/03/08(日) 16:54:34 ID:iZlPrvU5] タイプセーフが無いC++的にはこうだよ。 タイプセーフな他の言語から見るととおかしいのだろうけど #include <iostream> class A{ private: ? ? ? ? virtual void aa(void) = 0; public: ? ? ? ? void update(void){ ? ? ? ? ? ? ? ? std::cout << "update" << std::endl; ? ? ? ? ? ? ? ? aa(); ? ? ? ? }; }; class B : public A{ public: ? ? ? ? void aa(void){ ? ? ? ? std::cout << "aa() of B called." << std::endl;} }; int main(void){ ? ? ? ? B b; ? ? ? ? A *a; ? ? ? ? a = &b; ? ? ? ? //a->aa(); エラー ? ? ? ? a->update(); ? ? ? ? ? ? ? ? return 0; }
558 名前:名前は開発中のものです。 mailto:sage [2009/03/08(日) 16:54:35 ID:XklWG2/f] ???何で通らないと思うのか? class A の private: virtual void aa(void) = 0; は、どこでも使ってないから捨てられるだろ? ちなみに *aa=NULL; って意味だから。aa(); とかやって実行するのは危険だね。 Windows なら特権エラー(不正な処理を実行しましたダイアログ)かな? class B の public: void aa(void){} は、main 始まったらすぐ実行されるね。ここは、 public: void aa(void){std::cout << "ot"; } とでもしとけば?
559 名前:名前は開発中のものです。 mailto:sage [2009/03/08(日) 16:58:17 ID:XklWG2/f] >>721 *aa=NULL; はまちがい。aa=NULL;
560 名前:名前は開発中のものです。 [2009/03/08(日) 17:01:45 ID:3kCVX1OJ] C++はあまりわかんないです。 不思議だと思ったのは class Aのprivateな抽象関数aaを Aを継承したclass Bでpublicに実体を作っているところです。
561 名前:名前は開発中のものです。 mailto:sage [2009/03/08(日) 17:07:12 ID:XklWG2/f] 「privateな抽象関数aa」は、class Bへ継承させても、継承されてないよ。だってprivateだもん。
562 名前:名前は開発中のものです。 [2009/03/08(日) 17:09:35 ID:3kCVX1OJ] >>724 そう思います。 でもこれが通らないんです。 #include <iostream> class A{ private: virtual void aa(void) = 0; }; class B : public A{ public: //void aa(void){} }; int main(void){ B b; //b.aa(); std::cout << "hello" << std::endl; char c; std::cin >> c; return 0; };
563 名前:名前は開発中のものです。 mailto:sage [2009/03/08(日) 17:11:14 ID:XklWG2/f] >>724
564 名前:名前は開発中のものです。 mailto:sage [2009/03/08(日) 17:12:13 ID:iZlPrvU5] >>724 virtual抜いたらコンパイルできない。 codepad.org/MaZEDgo2 「privateな抽象関数aa」は、pubicな aa()でもオーバーライドできるだろ
565 名前:名前は開発中のものです。 mailto:sage [2009/03/08(日) 17:15:16 ID:XklWG2/f] >>724 ごめん間違えた。 「privateな抽象関数aa」は、class Bへ継承されているが class Bのpublic aa();の方が優先だから、 class Bのpublic aa();にしかアクセス出来ない。 ここでclass A の privateやvirtualなbb();とかあれば、継承されるから、 int main(void){ B b; b.bb(); とかで使えると思う。
566 名前:名前は開発中のものです。 [2009/03/08(日) 17:18:35 ID:3kCVX1OJ] 抽象関数を持つclass Aを継承したclassは、 class Aの抽象関数を実体化しなくてはいけない。 と思っていたのです。 そうではないのですね。 javaから入ったので不思議でした。
567 名前:名前は開発中のものです。 mailto:sage [2009/03/08(日) 17:25:14 ID:iZlPrvU5] >>728 >class A の privateやvirtualなbb();とかあれば、 ねーよw codepad.org/aEfKdVPO
568 名前:名前は開発中のものです。 mailto:sage [2009/03/08(日) 17:25:58 ID:XklWG2/f] ttp://msugai.fc2web.com/java/override.html >アクセス修飾子の規則の例外として、private 修飾されたメソッドはオーバーライドできません。 JavaもC++も同じじゃないかな?
569 名前:名前は開発中のものです。 mailto:sage [2009/03/08(日) 17:27:59 ID:XklWG2/f] >>730 >>728 ごめんそれも間違いだ。bb();とか無理です。
570 名前:名前は開発中のものです。 [2009/03/08(日) 17:31:31 ID:3kCVX1OJ] privateな抽象関数を持つclass Aを継承したclass Bが実体化出来るのが不思議。 同class Aの抽象関数aaと同じ名前のpublicな関数をclass Bに作ったことで動く事が不思議。 同class Aの抽象関数aaを継承したclass Bでで作らないと実体化できない事が不思議。 なんかそんな感じです。 すみません。
571 名前:名前は開発中のものです。 mailto:sage [2009/03/08(日) 18:00:50 ID:uTNKd2IK] プログラム板の初心者C++スレでやろうぜ・・・
572 名前:名前は開発中のものです。 mailto:sage [2009/03/08(日) 20:02:21 ID:t0AdkGXJ] Javaは違うのかもしれんがC++はそういう仕様なんでしょ メンバ変数も違うアクセス修飾詞でオーバーライドできるし 抽象関数を持ったクラスはそれを派生させて実装したクラスでないと実体化できんのはJavaでも同じでしょ
573 名前:名前は開発中のものです。 [2009/03/09(月) 00:20:55 ID:vdPDd+Q/] javaって派生先の仮想関数のアクセス修飾を変えれなかったんじゃなかったっけ?
574 名前:名前は開発中のものです。 [2009/03/09(月) 00:54:10 ID:4v1RPow6] オブジェクト指向も度がすぎると、使われもしないゴミクラスが 沢山残る罠。
575 名前:名前は開発中のものです。 [2009/03/09(月) 01:02:27 ID:4v1RPow6] ↑ただ単に今一、配慮を怠ったクラスを書くと そういう事になると言うのをいいたかっただけ。
576 名前:名前は開発中のものです。 mailto:sage [2009/03/09(月) 01:43:12 ID:j7Fn6gwa] 継承が多くても、STG中にキャストする様なオブジェクトとかあんまり無いと思うけどな オブジェクト指向とか言うほど大げさなモノでも無い 抽象基底クラスを作り、それの配列かコンテナに継承した子のオブジェクトをいれる 遷移するモノならインターフェースを作り、継承した状態のオブジェクトを保存しておくだろ あんまり思い浮かばない。 楽につくる事が優先だ
577 名前:名前は開発中のものです。 mailto:sage [2009/03/09(月) 02:29:20 ID:nD/Sv/Tx] 敵とか敵弾とか継承してもどうせ分けて扱っちゃうし・・・
578 名前:名前は開発中のものです。 mailto:sage [2009/03/09(月) 05:33:07 ID:s3+yn2Ga] け、継承って何だ、クラスって何だ 敵の構造体とか、弾の構造体でいいだろっ 動的確保?知らんがな(´・ω・`)
579 名前:名前は開発中のものです。 mailto:sage [2009/03/09(月) 05:50:33 ID:nD/Sv/Tx] いちいち動的確保なんかしてたら弾幕の生成でめちゃくちゃ処理落ちする 俺は最初に作っとくの
580 名前:名前は開発中のものです。 mailto:sage [2009/03/09(月) 10:04:04 ID:c/sep/SW] ボス戦とかどうしてるんだ。 予め発射される弾の数を決めてるってことか?
581 名前:名前は開発中のものです。 mailto:sage [2009/03/09(月) 10:41:10 ID:s3+yn2Ga] 一万発分くらい確保しとけばおkkkkkk
582 名前:名前は開発中のものです。 mailto:sage [2009/03/09(月) 10:48:15 ID:nD/Sv/Tx] >>743 一体何万発確保するつもり? 決めるといっても、せいぜい2〜3000発程度。これ以上多いとメモリ云々以前にゲームとして無理。
583 名前:名前は開発中のものです。 mailto:sage [2009/03/09(月) 12:24:29 ID:c/sep/SW] いや、そういう意味じゃない。 ボス戦だと、ボス倒すまで延々と戦闘が続く訳じゃん。 合計弾発射数は、実質無限な訳じゃん? ということは、どっかで弾リストのクリーンナップでもしてるんだろ? どうやって要らない弾とそうでないのとか分けてるのかと。
584 名前:名前は開発中のものです。 mailto:sage [2009/03/09(月) 12:30:20 ID:c/sep/SW] それとさ、普通はbullet[]にしろリストにしろ、実際に格納されてるのはbulletクラスを継承した StreightBulletクラスとかAccelBulletとかcurveBulletな訳じゃん。 newしないでどうやって使いまわすの?
585 名前:名前は開発中のものです。 mailto:sage [2009/03/09(月) 12:36:43 ID:nD/Sv/Tx] >StreightBulletクラスとかAccelBulletとかcurveBulletな訳じゃん。 こんなことしてねーもんwww
586 名前:名前は開発中のものです。 mailto:sage [2009/03/09(月) 12:39:35 ID:4gpR4arb] 画面外に出たりどっかにぶつかったら未使用状態に戻せばいいだけ クラスだけで動作変えてるならそりゃnew必要でしょう
587 名前:名前は開発中のものです。 mailto:sage [2009/03/09(月) 12:40:29 ID:nD/Sv/Tx] ちなみにこれ >どうやって要らない弾とそうでないのとか分けてるのかと。 リスト2つ作ればいいじゃん
588 名前:名前は開発中のものです。 mailto:sage [2009/03/09(月) 12:42:50 ID:9YN/v32z] クラスだけで動作変えるとかないわ 本人は継承を有効活用してるつもりだろうが、無駄でしかない
589 名前:名前は開発中のものです。 mailto:sage [2009/03/09(月) 12:45:34 ID:s3+yn2Ga] >>746 俺リストよくわからん 弾にフラグもたせてて設置されているなら1、設置されていないなら0 置かれた順にソートもしてるぞ。設置する時に空いてる弾拾ってきて構造体の仮想連結の最後にくっつけてフラグON 弾が削除される瞬間に前後の番号の弾連結してから弾の構造体のメンバ初期化してフラグをOFF
590 名前:名前は開発中のものです。 mailto:sage [2009/03/09(月) 12:48:31 ID:M8Y9J7eH] >>750 >>492 (というかそこからの一連の流れ)みたいな感じ? あと動的確保するだけでそんな処理落ちする? クラスだけで動作変えるってのがよく分からない あとそうじゃなかったらどう動作を変えるの?
591 名前:名前は開発中のものです。 mailto:sage [2009/03/09(月) 12:53:40 ID:c/sep/SW] えー、みんな曲射弾とか加速/減速弾とか誘導弾とか重力弾とか拡散/炸裂弾とか別々のクラスにしてないのー? 別々のクラスにしておけば拡張が簡単だよ?
592 名前:名前は開発中のものです。 mailto:sage [2009/03/09(月) 12:53:40 ID:L17yPJfy] >>747 うん、newしないと継承が使えなくなって不便な面はある。 でも弾が多くなってくると、それを差し引いてもnewしない事によるパフォーマンス的なメリットはあるよ。実際スペックしょぼいノートPCで試したら30fpsが60fpsになったし。
593 名前:名前は開発中のものです。 mailto:sage [2009/03/09(月) 12:53:44 ID:nD/Sv/Tx] >>753 あぁ、ちょうどこんな感じ、STLは使ってないけど 処理落ちは量によってはする。弾数の多いn-way弾とか、出現と消失が頻繁なときとか。 最近のPCじゃ気にならないだろう。それだけに、こんなに話題が続くとは思ってなかったがw >あとそうじゃなかったらどう動作を変えるの? 動作の部分だけ別に作る
594 名前:名前は開発中のものです。 mailto:sage [2009/03/09(月) 12:56:34 ID:c/sep/SW] なるほど。弾種類からswitchしてprivate staticメソッドを呼ぶのかw なんかそれも変な気もするが。
595 名前:名前は開発中のものです。 mailto:sage [2009/03/09(月) 12:57:43 ID:nD/Sv/Tx] >>757 馬鹿?
596 名前:名前は開発中のものです。 mailto:sage [2009/03/09(月) 12:58:29 ID:s3+yn2Ga] >>754 弾の行動をひたすら書いてるソースファイルがある 特にキモイ動きさせたくなければ無指示でも動くし指示しまくれば弾が増えたりグラフィック変わったりどんな奇天烈な動作もお手の物
597 名前:名前は開発中のものです。 mailto:sage [2009/03/09(月) 13:02:11 ID:9YN/v32z] >>757 動作分岐でswitchしか知らないのか
598 名前:名前は開発中のものです。 mailto:sage [2009/03/09(月) 13:17:02 ID:wiYT9l9H] 弾1発ごとにnewしてdeleteしてたらメモリに断片できまくらない?
599 名前:名前は開発中のものです。 mailto:sage [2009/03/09(月) 13:33:25 ID:Q0zoLpbu] total memoryが1MB位しか無いenvironmentなら話はotherだが、 今時そんなところを気にしても仕方ないぞ。 心配ならboost::pool使っとけ。 booooostが気に食わないなら、弾の継承クラスを全て包含した共用体で配列を作って placement newすればいい。
600 名前:名前は開発中のものです。 mailto:sage [2009/03/09(月) 13:35:45 ID:M8Y9J7eH] >>753 なるほどね、大体把握(したと思うw) >動作の部分だけ別に作る これってどんな感じ? 俺のイメージ的には bullet{ bulletがもってるステータス(位置とか) moveA(){ /* 動作A */}; moveB(){ /* 動作B */}; } こんな感じなんだけど それとももっと手続き的?な感じなのかな
601 名前:名前は開発中のものです。 mailto:sage [2009/03/09(月) 13:46:24 ID:4gpR4arb] 関数ポインタ持たせてもいいけど、動きはスクリプトにして実行時に読ませることもあるしなあ