シューティングゲーム製作技術総合 17機目
■ このスレッドは過去ログ倉庫に格納されています
0001名前は開発中のものです。
2008/11/27(木) 10:18:19ID:bBI1A+d5それは「シューティングゲーム製作」・・・。
このスレでは、そんなシューティングゲームの製作技術や技術の検証、成功談
失敗談笑い話、難易度の設定方法論、多弾の是非などについて語り合いましょう。
もちろんBulletMLなどで弾幕を作成してみたり、自分の作ったシューティングを
晒してみたり、プロジェクトをはじめてみるなどもOK!
ただし、シューティングの未来とか既存のゲームの話題などは、関連する他の
スレでやってくれ。
過去スレ,関連スレは >>2-3で。
0668名前は開発中のものです。
2009/03/05(木) 22:23:48ID:/7Ei5x6Qなるほど EnemyA, EnemyB に目がいっていた
君がしたいのは Iterator パターンでは?
0669名前は開発中のものです。
2009/03/05(木) 22:50:23ID:/7Ei5x6Q// 永遠に呼ばれない
void Bullet::Fire()
{
printf( "部長ぉぉぉぉぉぉぉ!!!\n" );
}
//----------------------
とかしてもいいかな
0670名前は開発中のものです。
2009/03/05(木) 22:53:56ID:/7Ei5x6Q// 永遠に呼ばれない
void Bullet::Fire()
{
MessageBox( HWND_DESKTOP, "返事がないようだ ただの屍のようだ", "error?", MB_OK );
or
MessageBox( HWND_DESKTOP, "パターンが分からないようだ", "error?", MB_OK );
}
//----------------------------------------------------------------------------
0671名前は開発中のものです。
2009/03/05(木) 23:03:09ID:vElUtQql>Enemy インスタンスが消滅すると
>Bullet インスタンスも消えてしまう
な に を い っ て い る ん だ ?
継承を理解してないな。
それはそうと個人的には class Bullet : public Enemy なんだけどな。 弾は特殊な敵って意味合いで。
0672名前は開発中のものです。
2009/03/05(木) 23:13:05ID:/7Ei5x6Qミスリードと言ってるだろ
反応ないから寝る
0673名前は開発中のものです。
2009/03/05(木) 23:16:48ID:/4jagLW1ずらずらとスパゲティ書いてるw
0674名前は開発中のものです。
2009/03/05(木) 23:42:12ID:1d/NzH52てかみんな柔軟だな。実際のコードを覗いてみたいぜ。・・・C++は多分読めないけど
0675名前は開発中のものです。
2009/03/06(金) 00:03:12ID:Eu3rRFpDID:/7Ei5x6Q の言ってることはあまり気にしない方がいいよ。
0676名前は開発中のものです。
2009/03/06(金) 07:29:29ID:xstPUn85ID変えてからの反応ではもう誰も信頼せんよ
そんなに否定するなら代案だせよ
ID:K8fBdWo9「だれか〜このソースどうにかしてくれませんか〜?」
ID:/7Ei5x6Q「こういうのはどうかね?」
ID:K8fBdWo9「・・・」
この船は先に進むんですか?
0677名前は開発中のものです。
2009/03/06(金) 08:00:37ID:UQFJ8zhz0678名前は開発中のものです。
2009/03/06(金) 11:06:50ID:HHW0AAKzていうか
>継承という概念が分かってない
ってのはID:/7Ei5x6Q 自身の話かな。
とりあえずC++のサイト回って勉強してみては?
0679名前は開発中のものです。
2009/03/06(金) 12:07:53ID:Eu3rRFpDID:K8fBdWo9が低レベルすぎて話にならない所をやんわり流してるんだろ。
0680名前は開発中のものです。
2009/03/06(金) 12:11:05ID:Eu3rRFpD間違えた
ID:/7Ei5x6Qが低レベルすぎて話にならない所をやんわり流してるんだろ。
0681/7Ei5x6Q
2009/03/06(金) 12:58:32ID:xstPUn85君のはデコレータパターンとコンポジットパターンの組み合わせだよ
もしくはパターンに当てはめられるのが嫌だったのかな
ごめんよ・・・
0682名前は開発中のものです。
2009/03/06(金) 13:07:51ID:q2+zc1Kz構造体最強ヒャァハァァァァー
0683名前は開発中のものです。
2009/03/06(金) 13:36:30ID:dVN9ZSyA0684名前は開発中のものです。
2009/03/06(金) 13:57:04ID:C76RJ9rxこのパターン厨の書いてることは、パターンの名前で
ググる事ができる奴が見たら赤面もんのことばかりだぞ…
>>674の持ってる本がちょっと分厚過ぎるじゃないか?
GoFは、たった23個しか無くて判りやすい図が入ってる
…STG制作にはアンチパターン>>655が要る事もあるが、
発想の種子ぐらいにはなるんじゃない?
0685名前は開発中のものです。
2009/03/06(金) 14:06:02ID:q2+zc1Kzいや、俺はガチで会話についていけないだけだww
最近になってポインタの使い道がわかって喜んで関数作って動いてSUGEEEEEEEEってやってるレベルだ
独学マンセー
0686名前は開発中のものです。
2009/03/06(金) 14:15:36ID:wgorap740687名前は開発中のものです。
2009/03/06(金) 15:03:36ID:xstPUn850688名前は開発中のものです。
2009/03/06(金) 16:33:57ID:QhFILLD4失敗談笑い話、難易度の設定方法論、多弾の是非などについて語り合いましょう。
もちろんBulletMLなどで弾幕を作成してみたり、自分の作ったシューティングを
晒してみたり、プロジェクトをはじめてみるなどもOK!
何でここ喧嘩と設計の話ばっかりなの?
実際に作ってる奴いるの?
0689名前は開発中のものです。
2009/03/06(金) 17:41:36ID:wgorap740690685
2009/03/06(金) 18:57:39ID:E7ymH2OK0691名前は開発中のものです。
2009/03/06(金) 19:33:21ID:fB/frkhf設計がいかに大事かがセッ分かった気がする
0692名前は開発中のものです。
2009/03/06(金) 19:49:27ID:g/bnT2ZX敵から出る弾は当たり判定チェックの関係上、壊せる弾は敵と同じ扱い(Enemy派生)、壊せん奴は別扱い
ただ、getxとか使うとイメージ的に負荷かかりそうで座標とかpublicにしてるためStructチックになってしまってるorz
以前は強引にfriend使ってたw
まあとりあえず完成させればいいよな、どこかは言わんが以前別スレにうpしてる
0693名前は開発中のものです。
2009/03/06(金) 19:58:07ID:CCKZ0ZvT特定した
0694名前は開発中のものです。
2009/03/06(金) 20:04:30ID:xstPUn85当たり判定は どこのクラスでやってる?
0695名前は開発中のものです。
2009/03/06(金) 20:35:02ID:t1RJlJqe0696名前は開発中のものです。
2009/03/06(金) 20:40:28ID:C76RJ9rxちょい前までゲーム制作ブログのオマケでSTGも挙げてたけど、全部消してバックれたぜw
…移転先や安否を気遣うメールは一通たりとも来なかったぜ… orz
きっと、色々内情を察してくれたんだ、多分、きっと多分
0697名前は開発中のものです。
2009/03/06(金) 20:45:54ID:g/bnT2ZX0698名前は開発中のものです。
2009/03/06(金) 21:37:07ID:xstPUn85バックれたら 移転先もわからんだろうw
0699名前は開発中のものです。
2009/03/06(金) 21:42:08ID:ZZrBBfbzミジンコがうじ虫になるくらいの進化じゃないか!
マジレスするならグローバル関数でやるのと大差ないぞ、それ。
0700名前は開発中のものです。
2009/03/06(金) 21:50:00ID:QYwcIkUmつい最近調べてみたら、なんか東方遊夜雀なんてもんが開発されてたりするのね。
ハードル高いwwww
0701名前は開発中のものです。
2009/03/06(金) 21:58:23ID:g/bnT2ZX他にも敵クラス辺りに当たり判定するメンバ関数作ることも考えてるけど
まあ呼び出すところは変わらんけど
0702名前は開発中のものです。
2009/03/06(金) 22:02:00ID:QYwcIkUmだってそうしないと弾固有の当たり判定とかとれないじゃん。
0703名前は開発中のものです。
2009/03/06(金) 22:23:03ID:k/SdMtBY俺の場合、
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メソッドを呼び出す
};
0704名前は開発中のものです。
2009/03/06(金) 22:27:05ID:C76RJ9rx>>701
これくらいなら「ダメ出し」があったとしても、クラス設計の善し悪しの話で、
>>702みたいなのをifで逃がすことになると、クラス設計が下手だと言われる。
その関数の中に、switchやifが沢山含まれるなら、設計を変える事で
良くなる『可能性』があるし、将来の拡張でswitchやifを加えないで済む『可能性』もある
アドホックなswitchやifも許し…
…今クラス設計の話をしてるんだから、参考にすべきだ(゚Д゚)ハッ!
0705名前は開発中のものです。
2009/03/06(金) 22:51:03ID:QYwcIkUmクラス名の相談なんだが、敵の弾クラスはbulletでいいと思うんだが、自分の発射した弾はなんて名前にするのがベスト?
bulletクラスを継承してないからplayerBulletって名前にするのも変だし……
0706名前は開発中のものです。
2009/03/06(金) 22:59:54ID:C76RJ9rx0707名前は開発中のものです。
2009/03/06(金) 23:06:52ID:ZZrBBfbzEnemyBullet,PlayerBullet
って明記してしまえば後で見ても間違わない気がする。
気がするだけかもしれない。
Object -> Enemy -> EnemyBullet
├ -> Player
└ -> PlayerBullet
みたくなるだろうけど、それでよければ。
0708名前は開発中のものです。
2009/03/06(金) 23:07:20ID:QYwcIkUmそれと、携帯アプリのSTGだとどういうインターフェイスで弾撃たせるのが楽かな?
自動で撃ってしまうとそれはそれで戦略性が低くなってしまいそうなのだが。
0709名前は開発中のものです。
2009/03/06(金) 23:09:44ID:ZZrBBfbzクラス図としてみたら逆になっちゃうけど突っ込んじゃらめぇ
0710名前は開発中のものです。
2009/03/06(金) 23:10:38ID:CCKZ0ZvT0711名前は開発中のものです。
2009/03/06(金) 23:14:46ID:ZZrBBfbzおま…それアンタッチャブルじゃないか
触れないです><
0712名前は開発中のものです。
2009/03/07(土) 14:49:37ID:oFkRuMFAあとで後悔するんだけど。
0713名前は開発中のものです。
2009/03/07(土) 15:07:06ID:bRexpzAJ0714名前は開発中のものです。
2009/03/08(日) 05:03:44ID:j2H/7CnL{
private:
virtual long ChinkoPlease(size_t) = 0;
};
//○月×日作成: すべてのクラスはこれを継承してねw名前変えないでねw
0715名前は開発中のものです。
2009/03/08(日) 07:56:41ID:XlVAa9br0716名前は開発中のものです。
2009/03/08(日) 15:43:28ID:B8bsQorT0717名前は開発中のものです。
2009/03/08(日) 16:19:58ID:AO3ln+krありえねぇーことを宣言するなw。
0718名前は開発中のものです。
2009/03/08(日) 16:29:42ID:3kCVX1OJ#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;
};
が通るのは何で?
0719名前は開発中のものです。
2009/03/08(日) 16:35:19ID:lUOcnlf/0720名前は開発中のものです。
2009/03/08(日) 16:54:34ID:iZlPrvU5#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;
}
0721名前は開発中のものです。
2009/03/08(日) 16:54:35ID:XklWG2/fclass 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"; }
とでもしとけば?
0722名前は開発中のものです。
2009/03/08(日) 16:58:17ID:XklWG2/f*aa=NULL; はまちがい。aa=NULL;
0723名前は開発中のものです。
2009/03/08(日) 17:01:45ID:3kCVX1OJ不思議だと思ったのは
class Aのprivateな抽象関数aaを
Aを継承したclass Bでpublicに実体を作っているところです。
0724名前は開発中のものです。
2009/03/08(日) 17:07:12ID:XklWG2/f0725名前は開発中のものです。
2009/03/08(日) 17:09:35ID:3kCVX1OJそう思います。
でもこれが通らないんです。
#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;
};
0726名前は開発中のものです。
2009/03/08(日) 17:11:14ID:XklWG2/f0727名前は開発中のものです。
2009/03/08(日) 17:12:13ID:iZlPrvU5virtual抜いたらコンパイルできない。
http://codepad.org/MaZEDgo2
「privateな抽象関数aa」は、pubicな aa()でもオーバーライドできるだろ
0728名前は開発中のものです。
2009/03/08(日) 17:15:16ID:XklWG2/fごめん間違えた。
「privateな抽象関数aa」は、class Bへ継承されているが class Bのpublic aa();の方が優先だから、
class Bのpublic aa();にしかアクセス出来ない。
ここでclass A の privateやvirtualなbb();とかあれば、継承されるから、
int main(void){
B b;
b.bb();
とかで使えると思う。
0729名前は開発中のものです。
2009/03/08(日) 17:18:35ID:3kCVX1OJclass Aの抽象関数を実体化しなくてはいけない。
と思っていたのです。
そうではないのですね。
javaから入ったので不思議でした。
0730名前は開発中のものです。
2009/03/08(日) 17:25:14ID:iZlPrvU5>class A の privateやvirtualなbb();とかあれば、
ねーよw
http://codepad.org/aEfKdVPO
0731名前は開発中のものです。
2009/03/08(日) 17:25:58ID:XklWG2/f>アクセス修飾子の規則の例外として、private 修飾されたメソッドはオーバーライドできません。
JavaもC++も同じじゃないかな?
0732名前は開発中のものです。
2009/03/08(日) 17:27:59ID:XklWG2/f>>728
ごめんそれも間違いだ。bb();とか無理です。
0733名前は開発中のものです。
2009/03/08(日) 17:31:31ID:3kCVX1OJ同class Aの抽象関数aaと同じ名前のpublicな関数をclass Bに作ったことで動く事が不思議。
同class Aの抽象関数aaを継承したclass Bでで作らないと実体化できない事が不思議。
なんかそんな感じです。
すみません。
0734名前は開発中のものです。
2009/03/08(日) 18:00:50ID:uTNKd2IK0735名前は開発中のものです。
2009/03/08(日) 20:02:21ID:t0AdkGXJメンバ変数も違うアクセス修飾詞でオーバーライドできるし
抽象関数を持ったクラスはそれを派生させて実装したクラスでないと実体化できんのはJavaでも同じでしょ
0736名前は開発中のものです。
2009/03/09(月) 00:20:55ID:vdPDd+Q/0737名前は開発中のものです。
2009/03/09(月) 00:54:10ID:4v1RPow6沢山残る罠。
0738名前は開発中のものです。
2009/03/09(月) 01:02:27ID:4v1RPow6そういう事になると言うのをいいたかっただけ。
0739名前は開発中のものです。
2009/03/09(月) 01:43:12ID:j7Fn6gwaオブジェクト指向とか言うほど大げさなモノでも無い
抽象基底クラスを作り、それの配列かコンテナに継承した子のオブジェクトをいれる
遷移するモノならインターフェースを作り、継承した状態のオブジェクトを保存しておくだろ
あんまり思い浮かばない。 楽につくる事が優先だ
0740名前は開発中のものです。
2009/03/09(月) 02:29:20ID:nD/Sv/Tx0741名前は開発中のものです。
2009/03/09(月) 05:33:07ID:s3+yn2Ga敵の構造体とか、弾の構造体でいいだろっ
動的確保?知らんがな(´・ω・`)
0742名前は開発中のものです。
2009/03/09(月) 05:50:33ID:nD/Sv/Tx俺は最初に作っとくの
0743名前は開発中のものです。
2009/03/09(月) 10:04:04ID:c/sep/SW予め発射される弾の数を決めてるってことか?
0744名前は開発中のものです。
2009/03/09(月) 10:41:10ID:s3+yn2Ga0745名前は開発中のものです。
2009/03/09(月) 10:48:15ID:nD/Sv/Tx一体何万発確保するつもり?
決めるといっても、せいぜい2〜3000発程度。これ以上多いとメモリ云々以前にゲームとして無理。
0746名前は開発中のものです。
2009/03/09(月) 12:24:29ID:c/sep/SWボス戦だと、ボス倒すまで延々と戦闘が続く訳じゃん。
合計弾発射数は、実質無限な訳じゃん? ということは、どっかで弾リストのクリーンナップでもしてるんだろ?
どうやって要らない弾とそうでないのとか分けてるのかと。
0747名前は開発中のものです。
2009/03/09(月) 12:30:20ID:c/sep/SWStreightBulletクラスとかAccelBulletとかcurveBulletな訳じゃん。
newしないでどうやって使いまわすの?
0748名前は開発中のものです。
2009/03/09(月) 12:36:43ID:nD/Sv/Txこんなことしてねーもんwww
0749名前は開発中のものです。
2009/03/09(月) 12:39:35ID:4gpR4arbクラスだけで動作変えてるならそりゃnew必要でしょう
0750名前は開発中のものです。
2009/03/09(月) 12:40:29ID:nD/Sv/Tx>どうやって要らない弾とそうでないのとか分けてるのかと。
リスト2つ作ればいいじゃん
0751名前は開発中のものです。
2009/03/09(月) 12:42:50ID:9YN/v32z本人は継承を有効活用してるつもりだろうが、無駄でしかない
0752名前は開発中のものです。
2009/03/09(月) 12:45:34ID:s3+yn2Ga俺リストよくわからん
弾にフラグもたせてて設置されているなら1、設置されていないなら0
置かれた順にソートもしてるぞ。設置する時に空いてる弾拾ってきて構造体の仮想連結の最後にくっつけてフラグON
弾が削除される瞬間に前後の番号の弾連結してから弾の構造体のメンバ初期化してフラグをOFF
0753名前は開発中のものです。
2009/03/09(月) 12:48:31ID:M8Y9J7eH>>492(というかそこからの一連の流れ)みたいな感じ?
あと動的確保するだけでそんな処理落ちする?
クラスだけで動作変えるってのがよく分からない
あとそうじゃなかったらどう動作を変えるの?
0754名前は開発中のものです。
2009/03/09(月) 12:53:40ID:c/sep/SW別々のクラスにしておけば拡張が簡単だよ?
0755名前は開発中のものです。
2009/03/09(月) 12:53:40ID:L17yPJfyうん、newしないと継承が使えなくなって不便な面はある。
でも弾が多くなってくると、それを差し引いてもnewしない事によるパフォーマンス的なメリットはあるよ。実際スペックしょぼいノートPCで試したら30fpsが60fpsになったし。
0756名前は開発中のものです。
2009/03/09(月) 12:53:44ID:nD/Sv/Txあぁ、ちょうどこんな感じ、STLは使ってないけど
処理落ちは量によってはする。弾数の多いn-way弾とか、出現と消失が頻繁なときとか。
最近のPCじゃ気にならないだろう。それだけに、こんなに話題が続くとは思ってなかったがw
>あとそうじゃなかったらどう動作を変えるの?
動作の部分だけ別に作る
0757名前は開発中のものです。
2009/03/09(月) 12:56:34ID:c/sep/SW0758名前は開発中のものです。
2009/03/09(月) 12:57:43ID:nD/Sv/Tx馬鹿?
0759名前は開発中のものです。
2009/03/09(月) 12:58:29ID:s3+yn2Ga弾の行動をひたすら書いてるソースファイルがある
特にキモイ動きさせたくなければ無指示でも動くし指示しまくれば弾が増えたりグラフィック変わったりどんな奇天烈な動作もお手の物
0760名前は開発中のものです。
2009/03/09(月) 13:02:11ID:9YN/v32z動作分岐でswitchしか知らないのか
0761名前は開発中のものです。
2009/03/09(月) 13:17:02ID:wiYT9l9H0762名前は開発中のものです。
2009/03/09(月) 13:33:25ID:Q0zoLpbu今時そんなところを気にしても仕方ないぞ。
心配ならboost::pool使っとけ。
booooostが気に食わないなら、弾の継承クラスを全て包含した共用体で配列を作って
placement newすればいい。
0763名前は開発中のものです。
2009/03/09(月) 13:35:45ID:M8Y9J7eHなるほどね、大体把握(したと思うw)
>動作の部分だけ別に作る
これってどんな感じ?
俺のイメージ的には
bullet{
bulletがもってるステータス(位置とか)
moveA(){ /* 動作A */};
moveB(){ /* 動作B */};
}
こんな感じなんだけど
それとももっと手続き的?な感じなのかな
0764名前は開発中のものです。
2009/03/09(月) 13:46:24ID:4gpR4arb0765名前は開発中のものです。
2009/03/09(月) 13:52:06ID:nD/Sv/Tx弾に直接はもたせない。デリゲートする。
0766名前は開発中のものです。
2009/03/09(月) 13:54:05ID:9YN/v32z設計自体が大きく変わる
0767名前は開発中のものです。
2009/03/09(月) 13:58:24ID:L17yPJfy言語にもよるだろうけどdelegate作るとnewと同様コストかかんない?
0768名前は開発中のものです。
2009/03/09(月) 14:02:36ID:nD/Sv/Txデリゲートっていうと大げさか。所詮ポインタ演算だし。関数ポインタとどっこい。
気に食わなきゃ>>762でもしてろってこった。でも「いちいちnew」は絶対にやだね。
■ このスレッドは過去ログ倉庫に格納されています