ゲーム開発、オブジェクト思考とかMVCの考え方

cocos2d使ってゲーム作ってる時のオブジェクトの役割がわからなくなってつぶやいたら @t_okada さんと @gaolay さんが教えてくれた。
1
Rento @rento83

なんかオブジェクトしこうの正解がわからなくなってきた。誰かすっごい綺麗にお手本みたいに作ってるゲームのソースを見せておくれよ。メインのゲームデータ(キャラの位置とか秒数とかスコアとか)はゲームマネージメントクラス作ってそいつが持つべき?そうなるとキャラもそいつがもつ?

2012-04-22 15:13:03
ゆうぞら @gaolay

@Rento83 多分ゲーム世界っていうのに相当するクラスはいるです

2012-04-22 15:15:06
Rento @rento83

@gaolay なるほど!!そいつが全部管理してるんですね!となるとゲーム画面(シーン)の役目はほぼ無いですね!

2012-04-22 15:16:37
ゆうぞら @gaolay

@Rento83 位置はキャラごとに持った方が便利

2012-04-22 15:16:48
岡田哲哉 @t_okada

@gaolay @Rento83 ゲームの場合、MVCのM(model)がゲーム世界ですよね。それが全体管理。あと、キャラとかアイテムとかも必要に応じてオブジェクト化。

2012-04-22 15:17:12
Rento @rento83

@gaolay んでキャラの位置の変更はゲーム世界が行う感じでしょうか?それともキャラ自身に移動するメソッドを持たせるべきですか?

2012-04-22 15:17:48
Rento @rento83

@t_okada キャラとかアイテムとかタイル(背景)とかそういうのはなんとなく解るきがするんですが、キャラの移動とか(例えば画面真ん中超えたらキャラじゃなくて背景移動したい)どこにメソッド持たすのかがわからなくなるです。

2012-04-22 15:19:35
ゆうぞら @gaolay

@Rento83 キャラが移動した方が楽です。それで必要な時に世界に問い合わせる。私は衝突してますか?とか。

2012-04-22 15:19:38
Rento @rento83

@gaolay なるほどーーーーーーー!!!!!なんかぴくってきました!w

2012-04-22 15:20:04
ゆうぞら @gaolay

@Rento83 移動も世界に問い合わせる感じですね。僕はこっちに行きたいですって

2012-04-22 15:20:35
岡田哲哉 @t_okada

@Rento83 @gaolay ゲームの性質にもよるんだろうけど、基本的にはキャラオブジェクトに「動けよ」って言うと動く感じですね。動けるかどうかなキャラ側が(場合によってゲーム全体の状態を調べて)判定する感じかな。

2012-04-22 15:21:01
Rento @rento83

@gaolay そうなるとゲーム世界は噂のシングルトンって奴にしてshared〜で取得する感じですか?ちょっとsharedなんちゃらの仕組みしらべなきゃ!!

2012-04-22 15:21:25
Rento @rento83

@t_okada @gaolay やっぱりキャラ毎に移動しろって命令するですね!なんかつかめてきた気がします!

2012-04-22 15:23:29
ゆうぞら @gaolay

@Rento83 あとシーンごとにルール変わるなら、ゲーム基本世界を継承した、ラウンド?ごとのクラスにしてもいいかも

2012-04-22 15:25:28
岡田哲哉 @t_okada

@Rento83 +sharedなんちゃらで世界を取れるようにしておけばらくちんですが、キャラを作るときに「おまえが所属する世界はこれ」って指定して、キャラ側でそれを保持しておく方法もありますね。こちらのほうが美しいかな。

2012-04-22 15:25:48
Rento @rento83

@gaolay 超わかりやすい!ありがとうございます!

2012-04-22 15:26:28
ゆうぞら @gaolay

@Rento83 シーン(cocosですよね)の役割は世界そのものであってもいいし、衝突判定とか動きに関するものだけにしてもいいしって感じかと

2012-04-22 15:27:03
Rento @rento83

@t_okada あ、そっちの方が美しいんですか!?技術的にそっちしか出来ないので意味もなくなんとなく劣っている作法かと思ってましたwそっちでいきます!

2012-04-22 15:27:14
Rento @rento83

@gaolay シーン自体が世界クラスでも有りなんですね!MVC的にはC部分かと思っていました。(cocos2dです)

2012-04-22 15:28:43
ゆうぞら @gaolay

@Rento83 ViewControllerみたいな感じですよね。

2012-04-22 15:29:44
岡田哲哉 @t_okada

@Rento83 シングルトンにすると(あり得るかどうかわかりませんが)将来多数の世界を持つように拡張するのが困難になりますね。そういうのがあり得ないようなものであればシングルトンでも良い(いちいちインスタンスを渡さなくてよいので楽チン)って感じ。劣ってるってことはないです。

2012-04-22 15:29:58
Rento @rento83

@t_okada その程度のめんどくささなら問題ないっす!wありがとうございます!

2012-04-22 15:30:55
Rento @rento83

@gaolay なるほど。やっぱりバスケさんのいいつけを守ってViewControllerには動きのぶぶんにかんするものだけにします!wありがとうございます!

2012-04-22 15:32:00
ゆうぞら @gaolay

@t_okada @Rento83 [chara bornIn:world] とかですね。美しいかもw

2012-04-22 15:32:55
Rento @rento83

かっけーーーーー!しゃれおつ!! RT @gaolay: @t_okada @Rento83 [chara bornIn:world] とかですね。美しいかもw

2012-04-22 15:33:27