SyntaxHighlighter

2012年2月22日水曜日

スパゲティ爆発

コードが複雑になりすぎて頭が爆発した。
設計を見直そう。

仕様を決めずに拡張性の高いコードを書こう、と思ったのだけど、無謀だった。とりあえず動くものはできたが、いざ機能を追加しようとしても、コードがあちこちに散在しすぎてて修正箇所の把握が困難。作業効率が悪すぎて一向に前に進まない。

…というわけで、早めに正しい設計に戻そう。コードの重複に死を。適当にconstされてないポインタ戻すのは最早誰が中身を弄っているのか分からないし最悪だ。かといってGetSetにまみれた糞クラスも作ってはいけない。

今回の件から我々が得るべき教訓は、仕様が確定しないうちに製造を始めても決して完成しないということだ。



My Hack and Slash Gameにおける仕様と設計

【おおざっぱな仕様】
--あらゆる手段で敵を倒すのが目的である
--武器、スキル、キャラクタは外部から数値が変更されることがある
【少し細かい仕様】
--CharacterにはPlayer,Friend,Enemy,Bullet,AoE,Wall等がある
--SkillにはActiveSklillとPassiveSkillがある
----前者は実際にSkillをInvokeするTrigger
----WeaponはSkill発動の条件にはなるが、それ自体にInvokeの概念は無い
----後者は内部的にはほとんどWeaponと同じだが、Itemではない
--WeaponはSkillの性能を変更させる
----普通のARPGにおけるItemはWeaponとして処理する
--Skill,WeaponはCharacterが所有する
----それらは変更のされない参照を無制限にされる
--CharacterがSkillを使い、CharacterとSkillとWeaponに基づいてCharacterを生成する
--Characterの数値が変更されるEventは以下の条件で発生する
----Character同士の衝突
------衝突開始、接触中、接触終了により処理が分岐する
----時間経過
------SkillやWeaponの時間経過によるCharacterへの影響
------Character自身のTimeEventによる変化
----Userによる操作
------専らPlayerのみである。SkillのInvokeと移動を行う
----AIによる操作
------Player以外はCharacter自身で保有するAIがSkillのInvokeと移動を行う
----Skillによる衝突に拠らないCharacterへの干渉
------Friendの操作など
------SkillのPowerCost等はInvoke時ではなくここに処理がStackされ実行される
----CharacterがDeathってるならそのFrameの終わりにInstanceが消滅する
----その他
------未定┗(^o^ )┓三
--衝突、Characterの挙動はBox2Dが全部面倒見てくれます


【恒例の進行具合SS】


敵の体力ゲージ作ったらAoE放つともりもり減ってんぎもぢぃいいいい。

【確認されている不具合】
敵が200体ぐらいいると超重い。
プレイヤー発見した状態で毎F敵同士密着しながら接近してくると50体でも重い。

あと、Box2D側の不具合(?)かどうかは分からないけど、b2_staticBody上になんらかのb2_dynamicBodyをめり込んだ状態で生成してしまうと、以降全てのb2_dynamicBodyがisBullet=true状態でもめりこみまくりーの状態になる。ただし、普通はこの不正な場所への生成自体がなされないんだけど、一度に沢山生成するとたまに失敗するっぽい。

0 件のコメント:

コメントを投稿