トップページgamedev
1001コメント322KB

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

■ このスレッドは過去ログ倉庫に格納されています
0001名前は開発中のものです。2008/11/27(木) 10:18:19ID:bBI1A+d5
ゲームプログラマなら誰もが通る、もしくは、通った道。青春の香り?
それは「シューティングゲーム製作」・・・。

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

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

過去スレ,関連スレは >>2-3で。
0576名前は開発中のものです。2009/03/03(火) 16:49:32ID:VISRpTLr
>>574>>575
数学から逃げるなよ
>>573のは「回転行列」とか調べれば分かるはず
0577名前は開発中のものです。2009/03/03(火) 17:02:34ID:9wM7nouk
>>576
その回転行列?っぽい方法でなら実装できそうだ
がんばってみる
0578名前は開発中のものです。2009/03/03(火) 17:08:24ID:VISRpTLr
>>577
あ、もしかしてまだ習ってない年齢とか?
そしたら言い方が悪かった
「回転行列」とか「一次変換」とか。三角関数が分かれば理解できると思う。
0579名前は開発中のものです。2009/03/03(火) 17:25:53ID:9wM7nouk
>>578
いや…なんというか…俺の通ってた高校がちょっとアレなとこでな…
高2くらいの時に三角関数の基礎は習ったっぽいんだがそのあと二次関数と三角関数の基礎を往復してたんだ…

一応sinとかついてる関数の使い方やラジアンうんたらは自力で勉強してそこはかとなく理解した
んで今作ってるシューティングにどうしても矩形の判定を使うシーンが出て来て/(^o^)\
ググってみて回転行列はよくわからんかったがとりあえず俺の作った「点pと点qの座標を渡すとp→qのラジアンを返す関数」を使えば何とかなりそうだ
0580名前は開発中のものです。2009/03/03(火) 17:28:57ID:VISRpTLr
>>579
自力でできてるならなんとかなるじゃん。頑張ってね。
0581名前は開発中のものです。2009/03/03(火) 17:41:00ID:9wM7nouk
>>580
(・∀・)b

ID:TEDvPeCPも超ありがとう
0582名前は開発中のものです。2009/03/03(火) 21:07:08ID:9wM7nouk
実装できたぜ
http://www.dotup.org/uploda/www.dotup.org4085.jpg

改めて御礼を申し上げます(・∀・)
0583名前は開発中のものです。2009/03/04(水) 02:47:16ID:c679wlvv
絵を見ながら考えてみた。三角関数使わなくても
直線と点の距離で判定することも可能

レーザの直線をL、判定する座標をPとした場合、
直線Lに直交し座標Pを通る直線L'を求め、
直線Lと直線L'の交点と、座標Pの距離を求める。
0584名前は開発中のものです。2009/03/04(水) 05:41:14ID:kXQL8zXx
画像だけなんでしょ?
05855822009/03/04(水) 06:11:33ID:1TDttkKc
電話から失礼(・∀・)
>>583
なんか難しそうだな…
家帰ったら考えてみる

>>584
青◇は画像、赤◇は当たり判定、白◇と白○は回転したレーザーと自機の当たり判定を関数で表示させてる(・∀・)ちゃんと当たり判定あるぜ
0586名前は開発中のものです。2009/03/04(水) 11:37:54ID:lY36xohs
>>583は内積の公式がそのまま使えるってだけなので…
学校で習うことも無駄では無いよぐらいのお話
だから
>直線Lに直交し座標Pを通る直線L'を求め、
は補助線だけで、計算する必要は無い

どちらかというと公式でググると全然出て来ないゆとり社会に絶望した
…仕方ないから描いた
ttp://www.dotup.org/uploda/www.dotup.org0763.jpg

上の回転前のでよくね?
0587名前は開発中のものです。2009/03/04(水) 11:51:22ID:AkgUqz4M
レーザーを直線だとすると中学で習う y = ax + b の公式が使えるんじゃない。
接触したかどうかは目標の座標がこの公式に当てはまるかどうかで判定できないかな。
もっとも誤差をどうするかっつ問題もあるが。
0588名前は開発中のものです。2009/03/04(水) 11:53:42ID:5CMIzNbi
画像キャッシュにおっぱいなメイドが残っててちょっとびっくりした
0589名前は開発中のものです。2009/03/04(水) 14:46:59ID:kXQL8zXx
管理の機能ってなに?と聞いたら

まあ、全部クリックでジャンプ機能なんだが。
くわしくは、「ファセット分類」でググれ。

と友人から回答
こんな口の利き方のやつのために誰がツール作るかって感じだね
アイマスヲタ( ゚Д゚)<氏ね!

中野区から杉並区に引越し?
キモさがさらに増すねw糞
もう30代 市ねよとしか
0590名前は開発中のものです。2009/03/04(水) 15:26:30ID:oZbYQf/b
その友人とやらが見たら一発で特定される情報満載だがわざとか。
0591名前は開発中のものです。2009/03/04(水) 15:31:36ID:lY36xohs
NGIDにレスしない
「内積」が地雷だったらしい  ごめんね
0592名前は開発中のものです。2009/03/04(水) 15:38:15ID:kXQL8zXx
アホだから分からんよ
0593名前は開発中のものです。2009/03/04(水) 16:13:28ID:6k5gw4bE
>>587
数学的にはそれでもおk
点の座標を任意の曲線に代入したとき、解となるか

でもコーディングのしやすさとかから結局内積か一次変換に辿り着く
05945822009/03/04(水) 17:09:34ID:YGcqHfCc
な、内積…?に…日本語で…
0595名前は開発中のものです。2009/03/04(水) 17:18:24ID:6k5gw4bE
内積って日本語じゃなかったのか
ちなみに>>583は単なる外積
0596名前は開発中のものです。2009/03/04(水) 17:34:27ID:lY36xohs
>>594
>>583を図に描いて
ttp://www.dotup.org/uploda/www.dotup.org0763.jpg
っぽくなってればおk
D3DXVec2Dot()があるから内積は求まる
あと
sin^2+cos^2=1
つまり
a^2*sin^2+a^2*cos^2=a^2
かな

実は外積ベクトルの長さでもいいんだw
|a x b| = |a||b|sinθ
べ、別に知らなかった訳じゃないぞ!
0597名前は開発中のものです。2009/03/04(水) 17:43:13ID:6k5gw4bE
>>596
「点と直線」ならそれでおk
「点と線分」だったら長さの制限も必要
0598名前は開発中のものです。2009/03/04(水) 17:46:57ID:lY36xohs
>>597
「点と線分」だからこうやって逃げてる
0≦|a|cosθ≦|b|


ごめん。 ウチは2次の外積って使ったこと無い。
外積だと線分を定義出来るの?
05995822009/03/04(水) 17:47:15ID:YGcqHfCc
sinとかそーゆーのはCの関数に丸投げしてるからよくわからんのだ…
正直三角関数も三平方の定理?くらいしかよくわからんww

けどゲーム動く!ふしぎ!!^p^
0600名前は開発中のものです。2009/03/04(水) 17:49:01ID:pxzxR280
>>599
三平方の定理は三角関数じゃないぞ…
06015822009/03/04(水) 17:50:58ID:YGcqHfCc
>>600
なん…だと…!?
0602名前は開発中のものです。2009/03/04(水) 17:53:01ID:PEZ4h1/D
すごいね

何がすごいって
その昔ゲームプログラムの雑誌投稿とかしてた小中学生は
塾や独学で高校レベル大学レベルの数学を身に着けていたのに
今はそういう努力をしなくてもゲームが作れることを実証してしまっているという事実が
0603名前は開発中のものです。2009/03/04(水) 17:56:38ID:eMTzYVfZ
少しぐらいは勉強汁
0604名前は開発中のものです。2009/03/04(水) 17:57:57ID:6k5gw4bE
>>598
それでおk
若しくは、端点2つから角度判定するとかもあり
どっちが高速かは知らんが

そして>>602に全力で同意
知らないのは罪ではないが、知ろうともしないのは大罪。
0605名前は開発中のものです。2009/03/04(水) 18:17:36ID:lY36xohs
2次元の外積ってなんだったんだ?
0606名前は開発中のものです。2009/03/04(水) 18:29:39ID:kXQL8zXx
>>602
どうせ応用利かないし 動くものをうpしないし 口だけだし
ただの駄スレ
0607名前は開発中のものです。2009/03/04(水) 18:38:02ID:YGcqHfCc
うpしたのは去年9月が最後だったかな…
0608名前は開発中のものです。2009/03/04(水) 21:05:48ID:kXQL8zXx
http://www.youtube.com/watch?v=HTMQIBypM1E
0609名前は開発中のものです。2009/03/04(水) 22:15:05ID:EHouFaTB
またキチガイが沸いてるな
0610名前は開発中のものです。2009/03/05(木) 00:48:55ID:d60hqFFF
DirectXを直に叩いて2DSTG作ってる人に質問。
2DSTGだと長方形描画がメインになることが多いけど、頂点バッファって使ってる?
四角を書くだけならDrawPrimitiveUPでもそんなにデータ転送発生しないし、
そんなにデメリットないのかなぁと。
0611名前は開発中のものです。2009/03/05(木) 01:45:31ID:YZiaSlgc
>>605
お前は外積を何だと思ってるんだ?
06125832009/03/05(木) 02:17:45ID:IWxpnIkp
>>582
中学校でならった公式が役にたてる日がくるなんてなー
とか思いながら書き込んだんだ。直線の傾きを求める方法の方が
良いからとかいう思いはなかった。余計な一言だったらごめん。
回転前の座標に変換してから判定する方法で動いているのだから
そのやり方で良いとおもいます。

あと>>602
勉強しなくても良いと言うわけでなないけど、数学を頑張らなくても
ゲームを作れるライブラリがあって、それが目的に合ったものなら
使うべきじゃね?
プログラミングのコツは、いかに楽をするかだと思う。
0613名前は開発中のものです。2009/03/05(木) 02:29:16ID:YZiaSlgc
>>612
>>602が「ライブラリを使うな」と書いてあるようには見えないけど
0614名前は開発中のものです。2009/03/05(木) 02:46:28ID:brqYBTxt
軽く皮肉ってるようには取れるな
0615名前は開発中のものです。2009/03/05(木) 02:49:20ID:YZiaSlgc
皮肉られるのは当然だろwww
0616名前は開発中のものです。2009/03/05(木) 02:50:17ID:w2SNAszt
自嘲も含まれてる気がするな。
まぁいいじゃん。どうでも。
0617名前は開発中のものです。2009/03/05(木) 02:51:26ID:YZiaSlgc
でも三角関数くらいできてほしい
0618名前は開発中のものです。2009/03/05(木) 02:58:51ID:sodOyuM3
>>613
おちつけ、>>612に対するそのレスはちょっと暴投だぞ
0619名前は開発中のものです。2009/03/05(木) 03:01:36ID:sodOyuM3
レスが進んでタイミングずれてるしorz
0620名前は開発中のものです。2009/03/05(木) 03:01:38ID:YZiaSlgc
>>618
>ゲームを作れるライブラリがあって、それが目的に合ったものなら使うべきじゃね?
俺はこの発言を受けたまでだが。
0621名前は開発中のものです。2009/03/05(木) 03:04:47ID:brqYBTxt
>>620
だから皮肉ってると思うならその内容は何だと思ってるんだよ
0622名前は開発中のものです。2009/03/05(木) 03:09:59ID:w2SNAszt
>>620

602はいわば「さびしい世の中になっちゃったね」と言ってて
612はそれに「そんな捨てたもんじゃないですよ」と言ってて
話は噛み合ってるんだから、613のレスはズレてる。
0623名前は開発中のものです。2009/03/05(木) 03:14:35ID:YZiaSlgc
>612はそれに「そんな捨てたもんじゃないですよ」と言ってて
俺は「目的にあった便利なライブラリなら使うべきじゃない?」と言ってるように見えた。
前提から俺が間違ってたね。
0624名前は開発中のものです。2009/03/05(木) 03:18:43ID:39/f14G9
お前らシューティングの話以外だと急に盛り上がるのな
つまんねぇ言い合いしてねぇで技術的な話しろやアホども
0625名前は開発中のものです。2009/03/05(木) 09:20:01ID:/7Ei5x6Q
ゲームできちゃったらインストーラー作りたいじゃん?
あれってなんかライブラリかパッケージかなんかあんの?
0626名前は開発中のものです。2009/03/05(木) 09:29:07ID:UZtmr8UQ
フリーソフトでインストーラとか気持ち悪いよ・・・
0627名前は開発中のものです。2009/03/05(木) 09:35:47ID:if7dF5u6
>>625 Inno Setupとか。
0628名前は開発中のものです。2009/03/05(木) 13:28:50ID:ibiz+wEo
フリーとか体験版でインストーラー使わないと始められないものは
DLしてもゴミ箱行きだ
0629名前は開発中のものです。2009/03/05(木) 14:54:12ID:1d/NzH52
>>624
わかったよ。

Moveってひとくくりにしてるけど実際の所、関数をさらに細分化すると管理しやすいと思わん?
座標移動、オブジェクト(弾)の生成、消滅判定、衝突判定とか。

1、とりあえず全員動かす。
2、弾やザコを追加する。
3、画面外の敵や弾を消す。
4、衝突判定する。

どうだろう


0630名前は開発中のものです。2009/03/05(木) 16:29:50ID:39/f14G9
>>629
むしろ移動とか(別の)オブジェクトの生成をどうやって集約してんだよ
普通に作ってりゃいくつかの関数に分かれるだろ
0631名前は開発中のものです。2009/03/05(木) 16:32:07ID:rEiNGvky
技術的な話したかったら話を広げる努力しろよwww
俺はしないけどwwww
0632名前は開発中のものです。2009/03/05(木) 16:53:26ID:39/f14G9
>>631
消えろよカスwwwwwwwwww
0633名前は開発中のものです。2009/03/05(木) 17:24:46ID:1d/NzH52
>>630
俺に聞くなよ。そこら辺のMove、Drawに分けるべき、で解説が終わってるサイトに聞けよ。
0634名前は開発中のものです。2009/03/05(木) 17:28:30ID:39/f14G9
>>633
おいおい、逆ギレか?ww
馬鹿め、自分の無能を呪えよアホww
0635名前は開発中のものです。2009/03/05(木) 17:50:45ID:brqYBTxt
>>629で何が言いたいのか意味分からん
Moveってひとくくり?何の話?
各オブジェクトにとりあえずMoveとDraw作ってそこに適当に関数作ったりしながら処理を書いてくんじゃないの?

0636名前は開発中のものです。2009/03/05(木) 18:42:04ID:1d/NzH52
>>635
ん、そうだよな。ただ自分の場合
Move()、Fire()、Exists()、Touch(オブジェクト a,オブジェクト b)、Draw()で決まりきって今の所問題もないからふと疑問に思って。
0637名前は開発中のものです。2009/03/05(木) 18:49:42ID:/7Ei5x6Q
何が何だかワケワカメ
0638名前は開発中のものです。2009/03/05(木) 19:17:32ID:brqYBTxt
>>636
だからFire、Exist、Touch等はMove内の処理だろ?
各オブジェクトの移動と描画をMoveとDrawに分けてるんだから
細分化って何をどうしたいんだ?
0639名前は開発中のものです。2009/03/05(木) 19:20:00ID:FsoDo+yK
おちつけ
0640名前は開発中のものです。2009/03/05(木) 19:57:43ID:K8fBdWo9
俺はこんなの。
各自オブジェクトがスクリプトで行動を切り替えてる。
自殺もするのでオブジェクトを管理して回してる奴が生き死にを確認したりもしてる。
 
//インタプリタなスクリプト。Objectから呼んでActionを主に更新する。
class Script{
  
};
 
//MoveとかFireとかの基底のインタフェース
class Action{
  bool update(void);//処理が終了していたらtrueを返すとかそんなの
};
 
//敵、自機、弾、その他の基底のインタフェース
class Object{
protected:
  Script scr;
  Action act;
public:
  void update(void);//この中でact.update()を処理したりScriptを呼んでactの切り替えをする。
  void draw(void);//描く
};
 
なんか面白い組み方があったら教えてほしい。
という技術の話題を振ってみる。
0641名前は開発中のものです。2009/03/05(木) 20:02:25ID:1d/NzH52
なぜか上げてた。特に意味はない。

>>638
なんだ、その。いや、ゲーム全体からみりゃそうなんだが。

if ポーズ中じゃないなら
{
forループ
オブジェクト配列[i].Move()
forループ
オブジェクト配列[i].Fire()
forループ
  forループ
   Touch(オブジェクト配列[i],オブジェクト配列[j])
}
forループ
  オブジェクト配列[i].Draw()

とかやんね?
0642名前は開発中のものです。2009/03/05(木) 20:12:12ID:1d/NzH52
>>640
今の所、難易度別の行動設定とか用意してないんで、オブジェクトの行動は敵の種類ごとにべた書きだなー。


0643名前は開発中のものです。2009/03/05(木) 20:19:46ID:/7Ei5x6Q
>>640
なんかJAVA JAVAっぽいね
それはおいといて
これの Object 派生させるの?
0644名前は開発中のものです。2009/03/05(木) 20:24:42ID:g++EGVdD
>>640>>641同じ人なの?

>>643
この作りでObjectを派生させたらナンセンスだと思う。
オブジェクト配列を派生するなら判る。

派生とかクラス設計の人は
>オブジェクト配列[i].Fire()
>Touch(オブジェクト配列[i],オブジェクト配列[j])
などをやらない
「オブジェクト配列に、Fireを行わないオブジェクトや、
Touchが不用なオブジェクトを入れられ無いっておかしくね?」

…と思うんじゃね?
0645名前は開発中のものです。2009/03/05(木) 20:25:20ID:K8fBdWo9
>>643
ほとんどのクラスをスマートポインタラッパにしてjavaのようにC++で書いてる。
で、
class Bullet : public Object
class Enemy : public Bullet
とかしてる。
MyShipをどこから派生させると美しいかは毎回悩む。
06463722009/03/05(木) 20:27:09ID:g++EGVdD
>>645
3人目ゲット
0647名前は開発中のものです。2009/03/05(木) 20:41:04ID:K8fBdWo9
>>646
?
0648名前は開発中のものです。2009/03/05(木) 20:45:15ID:1d/NzH52
>>644
んにゃ別。

>Objectを派生させたらナンセンスだと思う。
マジカー。Fire()で実装が空とかなんだが。実際Fireしてもほんとに撃つかどうかはオブジェクト依存だしいいかなーと思ってる。
ってかFire()という名前が問題か。

Touchのほうは実際は、自機リスト、敵機リスト、背景オブジェリスト、前景オブジェリスト、などから
2つ選んでハードコーディングする。だからまぁ自機_敵機、敵機_自機弾_自機_敵弾の3つぐらいTouchを利用したループがある。

自分で言っててあんまりきれいな実装じゃないかも。
0649名前は開発中のものです。2009/03/05(木) 20:48:41ID:JU51dqJC
>>645
継承がis aの関係じゃない時点で美しくない
0650名前は開発中のものです。2009/03/05(木) 20:53:18ID:g++EGVdD
富豪的にはありなんだろうけど…。 今俺本当に日本語書けてる?
以下、俺の思い浮かべる評判の悪いクラス設計の例。 「is a」ぐらいは守ってる?
vector<Obj *> ObjArray;
class Obj
{
  virtual void Update()
  {
    Move();
  }
  virtual void Move(){/*実装*/}
};
class EnemyObj :Obj
{
  virtual void Fire(){/*実装*/}
  void Update()
  {
    Move();
    Fire();
  }
};
class EnemyA :EnemyObj
{void Fire(){/*ユニークな実装*/} void Move(){/*ユニークな実装*/}};
class Barrier :Obj
{
  bool IsTouch(Obj tgt){/*実装*/}
  void Update()
  {
    Move();
    foreach(vector<Obj *>,tgt,ObjArray)IsTouch(Obj tgt);//foreachの構文が今ググったら違った!?
  }
};
0651名前は開発中のものです。2009/03/05(木) 20:54:12ID:/7Ei5x6Q
>>645
class Enemy : public Bullet
だと Bullet 属性も継承することになるんだが・・・
Bulletクラスに破裂するという操作があると
Enemyにも引き継がれるが

それだったら Object に破裂操作を最初っから純仮想関数で宣言しておき
class Bullet : public Object;
class Enemy : public Object;
の方が自然じゃない?

とりあえず >> 372 のソースが見たいものだが
オブジェクト=メモリのかたまりと考えてるのか?
0652名前は開発中のものです。2009/03/05(木) 20:55:41ID:K8fBdWo9
>>649
640のObjectは例えで、ScriptとかActionはもう少し上で持ってる。
updateだけを持ってるクラスがだいたいの基底。
で、Enemyは高級なBullet的な定義をするんだけど
(BulletもAbstractBulletみたいなのを作って細分化した方がいいとか悩む)
MyShipはどこがいいのかに悩んでる。
 
どうだろうか?
0653名前は開発中のものです。2009/03/05(木) 21:04:28ID:K8fBdWo9
>>651
Bulletの破裂はEnemyの死。
Bulletだって弾を撃つことはある。
そんな感じでBulletに出来てEnemyに出来ないことがあまり考えつかないから class Enemy : public Bullet にしてる。
 
あと、EnemyAとかEnemyBってのは作ってなくて、全部スクリプトで決めてる。
 
Enemy img="res/enemy/zako1.bmp" x="100" y="100"
Move r="90" v="100"
Sleep sec="60"
 
みたいなの。
0654名前は開発中のものです。2009/03/05(木) 21:27:03ID:/7Ei5x6Q
>>650
それは Prototype パターンだね
0655名前は開発中のものです。2009/03/05(木) 21:39:01ID:g++EGVdD
ライフゲームの1セルを1オブジェクトにした実装はしない
と前書いた時通じたかと思った…

>>651
>とりあえず >> 372 のソースが見たいものだが
>オブジェクト=メモリのかたまりと考えてるのか?
DirectXの都合で、同じ描画のオブジェクトを集めたい

言語が痛いので、模擬コードです
class DrawAbleObj
{
  描画位置配列;
  void Draw(){/*SetStreamSource()1回に、SetMatrix()とDrawPrimitive()を配列要素数回 */}
  virtual update()
  add(座標)…など
}
class bullet :
class enemy :
class enemy_bullet :
/*初期化*/
DrawAbleObj配列.add(new bullet())
DrawAbleObj配列.add(new enemy())
DrawAbleObj配列.add(new enemy_bullet())
/*メインループ内のDraw*/
  foreach(型,i,DrawAbleObj配列)
    i.Draw();

>>652
MyShipに継承させたい物はあんまりないな
グローバルまで行かなくても、参照されて困らない所に在ればよくね?
0656名前は開発中のものです。2009/03/05(木) 21:39:53ID:/7Ei5x6Q
>>653
その構造だと Enemy インスタンスが消滅すると
Bullet インスタンスも消えてしまうけど
Bullet インスタンスを残しておきたい場合などの表現が不可能になる

Enemy *enemy = new Enemy
enemy->Fire(); // ここでbulletが複数作られる
enemy->End(); // 敵の消滅
delete enemey; // ここでbulletも全部消える

継承という概念が分かってない
どこかで不具合がでてくる
設計で悩んでる
0657名前は開発中のものです。2009/03/05(木) 21:45:45ID:/7Ei5x6Q
>>655
君は問題ない
0658名前は開発中のものです。2009/03/05(木) 21:47:03ID:K8fBdWo9
>>656
Enemyが死んでもBulletは死なないように作ってる。
なんでBulletが消えるのか分からない。
EnemyのFireをBullet管理者が受け取ってBulletが生成されてるだけで、Enemyとの関連はない。
0659名前は開発中のものです。2009/03/05(木) 21:47:30ID:sv4Dn5ZX
一体何の話かわからない俺はベターC
0660名前は開発中のものです。2009/03/05(木) 21:53:28ID:g++EGVdD
>>654
いちお、生存期間中にCloneを作る事はないよ

自称Strategyのつもり、Update()に多態性を持たせたい
しかし、生存期間中にEnemyAがEnemyBにキャストされるような事はないので、自称

>>657
thx
0661名前は開発中のものです。2009/03/05(木) 21:59:43ID:/7Ei5x6Q
#include <stdio.h>

class Object
{
protected:
double x;
public:
virtual void Fire() = 0;
};

class Bullet : public Object
{
public:
virtual void Fire();
};

class Enemy : public Bullet
{
public:
virtual void Fire();
};

//----------------------
// 永遠に呼ばれない
void Bullet::Fire()
{
x = 2.0;
printf( "%f\n", x );
}
//----------------------
0662名前は開発中のものです。2009/03/05(木) 22:00:07ID:/7Ei5x6Q

void Enemy::Fire()
{
x = 1.0;
printf( "%f\n", x );
}

void main()
{
Object *obj = new Enemy;

obj->Fire();

delete obj;
}

となり無駄が生じる
0663名前は開発中のものです。2009/03/05(木) 22:03:17ID:kKvbso12
>656こんな事言う人に問題ないと言われても安心できないと思うんだが
というかID:/7Ei5x6Qがなにを言いたいのか分からない
0664名前は開発中のものです。2009/03/05(木) 22:06:05ID:K8fBdWo9
>>661
BulletもEnemyもFireは持ってない。
BulletもEnemyも呼ばれるのはupdateとdrawだけ。
それぞれの行動はupdateの中でScriptが決めてActionに実体がある感じ。
 
class Fireはないけどあえて書くなら
class Fire : public Action
class Move : public Action
みたいになっている。
0665名前は開発中のものです。2009/03/05(木) 22:11:08ID:/7Ei5x6Q
>>664
すまんね ちと混合していた
Fire() はないようだね

君は Composite パターン

問題ない

ただ、複雑になるのはある程度予測しといた方がいい
0666名前は開発中のものです。2009/03/05(木) 22:15:21ID:/7Ei5x6Q
>>664
いや
class Enemy : public Bullet
ここが問題

それでいくなら Decorator パターン

class Decorator : public Object
class Bullet : public Decorator
class Enemy : public Decorator
class MyShip : public Decorator
ではどうかね?
0667名前は開発中のものです。2009/03/05(木) 22:21:16ID:g++EGVdD
>>663
>>656のミスリードには気付いてたけど、僕がいう事じゃ無いし

後はみんなの好き嫌いをアンケート程度の気分で聞いておく
>>661
ぐらいだったら、僕は許すな
アンチパターンも許すけど、

>Draw(){/*SetStreamSource()1回に、SetMatrix()とDrawPrimitive()を配列要素数回 */}
は譲れないな
0668名前は開発中のものです。2009/03/05(木) 22:23:48ID:/7Ei5x6Q
>>660
なるほど 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
いまさらだけど、>>656
>Enemy インスタンスが消滅すると
>Bullet インスタンスも消えてしまう
な に を い っ て い る ん だ ?

継承を理解してないな。


それはそうと個人的には class Bullet : public Enemy なんだけどな。 弾は特殊な敵って意味合いで。
0672名前は開発中のものです。2009/03/05(木) 23:13:05ID:/7Ei5x6Q
>>671
ミスリードと言ってるだろ

反応ないから寝る
0673名前は開発中のものです。2009/03/05(木) 23:16:48ID:/4jagLW1
なんとなくメモリの動的確保をしたくない俺は
ずらずらとスパゲティ書いてるw
0674名前は開発中のものです。2009/03/05(木) 23:42:12ID:1d/NzH52
うむ。まだデザパタがまだ生成パターンしか読み終わってないうちにはちと辛いな、デザタパで説明が完結されるとorz
てかみんな柔軟だな。実際のコードを覗いてみたいぜ。・・・C++は多分読めないけど
0675名前は開発中のものです。2009/03/06(金) 00:03:12ID:Eu3rRFpD
>>674
ID:/7Ei5x6Q の言ってることはあまり気にしない方がいいよ。
0676名前は開発中のものです。2009/03/06(金) 07:29:29ID:xstPUn85
>>675
ID変えてからの反応ではもう誰も信頼せんよ
そんなに否定するなら代案だせよ

ID:K8fBdWo9「だれか〜このソースどうにかしてくれませんか〜?」
ID:/7Ei5x6Q「こういうのはどうかね?」
ID:K8fBdWo9「・・・」

この船は先に進むんですか?
■ このスレッドは過去ログ倉庫に格納されています