ゲームにおけるデータ構造・クラス設計・パターン
レス数が900を超えています。1000を超えると表示できなくなるよ。
0001名前は開発中のものです。
2006/08/10(木) 20:27:06ID:BnvyxuCBどのようにクラス設計をすればよいか、
継承・委譲関係はどのようにすればよいか、
使えそうなパターンは何かなど語るのもよし。
自作ゲームの内容とクラス図を書いて
改善案を聞くもよし。
設計に関して困ったことを質問するもよし。
関数の具体的な実装内容やゲーム内容に関しては他スレに譲る。
大いに語れ。
0821名前は開発中のものです。
2008/03/07(金) 18:25:22ID:cRszUD3e理由は、機体クラスの派生クラスで敵機クラスを作れば、
敵機の溜めショットの実装が楽になる。
0822名前は開発中のものです。
2008/03/07(金) 19:30:11ID:ZcSmZqCn溜めショット以外にも使うこと多そうだし。
カーソルとか、ポンと押した場合は1つ進むだけだけど、押しっぱなしにすると自動的にカーソルが動くとか、
そんな類の処理に流用できそう。
0823名前は開発中のものです。
2008/03/07(金) 19:36:59ID:i2RlFGNSvoid 機体クラス::update()
{
if (joypad1.getOnf() & BTN2) // getOnf() はボタン押し下げてれば真
m_shot2.Charge();
}
俺なら、こうするかなぁ。機体クラスのメンバ変数に溜めショット用の
メンバ変数を持たせる。
キー管理クラスというのが何を意図してるのかわからんけど、汎用の
パッド入力処理関数として
enum { BTN1 = 0x1, BTN2 = 0x2, BTN3 = 0x4, BTN4 = 0x8, ... };
getOnf(); // 押し下げボタンの論理和が返る
getTrg(); // 直前まで放されてて、このフレームに初めて押し下げられたボタンの論理和
getRep(); // 一定時間以上押しっぱなしのボタンの論理和
ぐらいは用意しておいた方が便利だよ。
0825820
2008/03/07(金) 23:26:54ID:1kJAWqPNちょっと出来に難があります。
1回のメインループで2回使用、例えばKEY_DOWNとKEY_UPの2種類を検出しようと
したりすると1種類目の呼び出ししか有効でなかったり。
enum BTN_STATE{ NO_PUSH, KEY_DOWN, KEY_PUSH, KEY_UP };
//「押されていない」「押下げた瞬間」「押されている状態」「押上げた瞬間」
class JoyPad{
int isPushDown[2][8];//[パッド1P、2P][ボタン数] (各ボタン押されているか否か)
public:
BTN_STATE getBtnState(int pad_num, int btn_num );
}
BTN_STATE JoyPad::getBtnState (int pad_num, int btn_num ){
int btn = ボタンが押されているか?関数( pad_num, btn_num );
if ( btn == 1 ) {//ボタンが押されていたら
if ( isPushDown[pad_num][btn_num] == 0){
isPushDown[pad_num][btn_num] = 1;
return KEY_DOWN;//「押下げた瞬間」
}else{
return KEY_PUSH;//「押されている状態」
}
}
if ( btn == 0 ) {//ボタンが押されてなければ
if(isPushDown[pad_num][btn_num] != 0){
isPushDown[pad_num][btn_num] = 0;
return KEY_UP;//「押上げた瞬間」
}
}
return NO_PUSH; //「押されていない
}
0826名前は開発中のものです。
2008/03/07(金) 23:36:57ID:6HaqHq5U0827名前は開発中のものです。
2008/03/07(金) 23:39:41ID:cRszUD3e0828名前は開発中のものです。
2008/03/07(金) 23:54:13ID:2OqKUBaL>>826も言ってるが
それぞれの状態について保存しておいて、それを参照すればいいじゃん
現在の状態をcurrentに0,1で保存するとして
押下した瞬間 on_trigger = (on_trigger ^ current) & ~current
離した瞬間 off_trigger = off_trigger ^ (^current & last)
過去の状態 last = current
0829820
2008/03/07(金) 23:56:56ID:1kJAWqPNちょっと考えて見ます
>>827
使っているのが「DXライブラリ」というDirectX用ライブラリなんですが押している状態しか
チェックできなくて難儀しています。
直接DirectXガリガリした経験がないのでわかりませんがWindowメッセージの
WM_KEYDOWN, WM_KEYUPに相当するものがあればその方が楽できそうですね…
0830名前は開発中のものです。
2008/03/08(土) 00:15:59ID:XxYr3Sol1フレーム内にon/offがあった場合検知できないのかねぇ?
(FPSを上げれば解決できそうな問題だと思うけど)
DirectXは(デバッガで止めるなどして)1フレーム内に複数の入力あっても、
全部取得できると思った。でもDirectXはその性質上最低レベルAPIだから、
DXで済ませるならDXでやったほうがいいんじゃないかな…
0831名前は開発中のものです。
2008/03/08(土) 08:33:18ID:L6W8V7J10832名前は開発中のものです。
2008/03/08(土) 09:13:25ID:S4+z8pGt低レベルな部分を隠すだけ、って割り切っちゃう。
0833名前は開発中のものです。
2008/03/13(木) 01:35:23ID:+x1fkFDE横レスすまん。
たぶん俺が根本的に何かを勘違いしているんだろうけど、
どう考えても意図がわからない。
押下した瞬間 on_trigger = current & ~last
離した瞬間 off_trigger = ~current & last
ほんとはこう?
「C,C++じゃねーよ」ってのならごめん。他の言語はわからない。
0834名前は開発中のものです。
2008/03/13(木) 10:23:04ID:QxqUuAIc0835名前は開発中のものです。
2008/03/13(木) 22:39:59ID:Bu/r75Um0836名前は開発中のものです。
2008/03/17(月) 12:58:49ID:bgIcAWWooopのコンポジション集約と、デザインパターンのコンポジットは全然別なことと、
デザインパターンのファザードがコンポジション集約と似た効果/構造してて戸惑った。
この違和感は普通にそのうち無くなるもの?
0837名前は開発中のものです。
2008/03/17(月) 14:16:30ID:hf8pDjO+そろそろ俺も覚えないと不味いな
0838名前は開発中のものです。
2008/03/17(月) 21:06:48ID:I1kfClSUストラテジー・コマンド・ステートパターンはよく使うが。
デザインパターンって言ってもgofやgof以外やマルチスレッドなやつとかwebアプリケーション用とかいろいろあるよ。
0839名前は開発中のものです。
2008/03/17(月) 21:46:13ID:6v9SY+1bあと、これも多少使うかなぁ。
・シングルトン ファイル I/O を一括管理するときとか
・オブザーバー 関連するゲームオブジェクト同士の管理(プレイヤーと、それに張り付くエフェクトとか)
実際のコードは、GoF のサンプルとはだいぶ違う形になってるけど、
まぁデザパタは設計のカタログなんで、実装の見た目が乖離する
ことはよくある。
0840名前は開発中のものです。
2008/03/17(月) 23:00:08ID:81oeEqxB0841名前は開発中のものです。
2008/03/17(月) 23:20:40ID:hf8pDjO+勉強になるよthx
まだGOF読んでないから今の段階ではさっぱりわからんけど
読むときに思い出すようにするよ
0842名前は開発中のものです。
2008/03/22(土) 13:55:51ID:bw12F9FG0843名前は開発中のものです。
2008/03/22(土) 20:22:05ID:gzkziAGJ0844名前は開発中のものです。
2008/03/22(土) 21:20:08ID:DCoIdvPZ0845名前は開発中のものです。
2008/03/22(土) 21:55:21ID:qUFi6y55でしょ
0846名前は開発中のものです。
2008/03/22(土) 22:34:31ID:bw12F9FGo がいっこ足らんぞ
Groove on Fightは名作
0847名前は開発中のものです。
2008/03/23(日) 01:18:27ID:Dg07h3ZN0848名前は開発中のものです。
2008/03/23(日) 11:58:11ID:3+fyKl7y0849名前は開発中のものです。
2008/03/23(日) 12:20:13ID:GdFVK2/80850名前は開発中のものです。
2008/03/23(日) 12:56:06ID:2zNLBPZ30851名前は開発中のものです。
2008/03/23(日) 18:28:12ID:4ckcNna2Groove on Fight・・・豪血寺3のサブタイトル
Grove On Fight・・・俺のミスタイプ
0852名前は開発中のものです。
2008/03/23(日) 20:57:34ID:dUwevhCK0853名前は開発中のものです。
2008/03/23(日) 21:19:48ID:PfMuEor50854名前は開発中のものです。
2008/03/23(日) 21:23:02ID:QBAbg4unと思う俺はたぶんまだまだ
0855名前は開発中のものです。
2008/03/23(日) 22:08:36ID:oa0oVRXo0856名前は開発中のものです。
2008/03/23(日) 22:14:12ID:t1TOnFxg基本クラス変数に派生クラス実体が入ってる時に関数を呼ぶと、
もし派生クラスがその関数をoverrideしてたら派生クラスの関数が呼ばれるんだぜ。
便利だと思わん?
0857名前は開発中のものです。
2008/03/23(日) 22:22:19ID:Oei8nD2Z0858名前は開発中のものです。
2008/03/23(日) 22:28:35ID:UjPr9gEx上に出たとおりだと、
いくつかのパターンは使ってる
ただし実装は書籍と違うけど
だと思うんだが。読み間違い?
0859名前は開発中のものです。
2008/03/23(日) 22:51:49ID:t1TOnFxg自分の中で、仮想でないメンバの上書きはシャドウで、オーバーライド=仮想メンバの上書きだと思ってた
0860名前は開発中のものです。
2008/03/23(日) 23:11:46ID:QBAbg4unそういうことができるのは知識としては持っているんだけど
例えば
モンスタークラスの派生でスライムクラス、ドラゴンクラスがあって…
とやらないで
モンスタークラスだけがあって
モンスタータイプっていうenumメンバ変数があってそれによって処理が変わる…
みたいに書いちゃうのね
まだまだスクリプト言語のときの癖が抜け切らないというか
たぶん継承をうまいこと使った方が生産性上がるんだろうけど
0861名前は開発中のものです。
2008/03/23(日) 23:22:02ID:2zNLBPZ3外部ファイル読み込み(ハードコーティングでもいいけどさ)を考えると面倒じゃない?
0862名前は開発中のものです。
2008/03/23(日) 23:40:01ID:QBAbg4unごめん。今の自分のレベルでは
継承だと外部ファイル読み込みが楽になる理由がよくわからない。
0863名前は開発中のものです。
2008/03/23(日) 23:42:50ID:/kBQhQQwノウハウとか捨てずに大事にするよろし
C++だのJavaだのC#だの使っても
最終的にはスクリプトなりテーブルなりで
キャラデータを管理することになるから
そんときに経験は生きるぜ
継承大好きっ子にありがちなハマリ道は
何でもかんでもソースに(ハードコーディングで)
記述してみたりクラス分けしてみたりして
結果として異様に複雑で深い継承木を
こさえて、仕様変更時の手間の多さに
戦慄して初心に返ること
0864名前は開発中のものです。
2008/03/23(日) 23:58:07ID:VUhk8OhJそういう使い方をするものだと思っていた。
今は>>860のスライムクラスみたいな継承の使い方をするの?
データに当たるような部分をコードに絡ませるのはなんか抵抗があるんだが。
0865861
2008/03/24(月) 00:07:17ID:tkEWMZpB言語仕様には開発者の哲学が詰まってるからなあ。
>864
俺の分かりづらい文章(>861)の翻訳dクス
0867862
2008/03/24(月) 00:21:04ID:KE3DiPkZやっぱわかんね。
>>856風の継承が>>860みたいな感じかと思っていたんだけど(違ってたらスマン)
そういう継承の仕方は主流じゃなくて
>>864風の継承(どういうクラス構成なのかはイメージがわかないけど)のが主流なのかな?
0868名前は開発中のものです。
2008/03/24(月) 00:21:28ID:uZDK8kFU実装継承を適当に使うと、そうなりがち。
インターフェース継承は、設計しっかりしてれば問題ないでしょ。
0869名前は開発中のものです。
2008/03/24(月) 00:22:39ID:Yr94LLRUいや、リア厨のときに俺はそれ(>>863)やって
ゲロ吐いたの
でも継承木ビューワの眺めは壮観だったよ
オナニープログラミング
0870861
2008/03/24(月) 00:35:53ID:tkEWMZpBあくまで、RPGっぽい敵のデータを例として挙げたから、それに対してのツッコミってことね。
他のところで使う分には知らん。
で、だ。
RPGを作ったことがないアマチュアの意見なんで、聞き流すだけでいいんだが。
敵データを外部ファイル読み込みで作るとする。
敵の動きを変更したり、敵の種類を増やしたいと思った時は、当然そのデータを弄ることで対応するわけだ。
敵のデータを変えるたびに、ソースコードの中のクラスを書き換えるのか?
敵の種類を増やしたら、派生クラスを動的に生成するのか?
そういうこと。
0871名前は開発中のものです。
2008/03/24(月) 00:42:36ID:nPahSoi8まあ多くても3回以上は継承したくはないよな
キャラ>モンスター>種族特性>個々のモンスター は既になんとやら
>>870
外部ファイルを作らず未だにステータスの固有値を派生クラスに直接書き込んでる俺はどうすrb・・・
0872名前は開発中のものです。
2008/03/24(月) 00:46:42ID:uZDK8kFURPGだと、
struct IEnemy;
class EnemyBase : public IEnemy {};
class EnemyBase : public EnemyBase {}; // 敵ザコクラス
class EnemyBoss1 : public EnemyBase {}; // 敵ボス1
class EnemyBoss2 : public EnemyBase {}; // 敵ボス2
って感じにするな。
ザコは全部一つのクラスで、データファイルとスクリプトで駆動。ボスは
プログラムでの特殊処理が必要なら、個別で作る。
0873名前は開発中のものです。
2008/03/24(月) 00:59:42ID:tkEWMZpBその辺は柔軟に、ってことね
0874862
2008/03/24(月) 01:09:59ID:KE3DiPkZえーと…
ごめん。なんか混乱してきた。
自分が何か読み違えているのかもしれないけど
>>864が>>861の翻訳であるとあったので
>>864に書いてあることを
「モンスター の 派生で スライム みたいな(哺乳類 の 派生で 犬 みたいな)
クラスの構成は間違っている。
外部データを読み込む際に便利なるような継承の仕方が実はあるよん。」
―と解釈したんだけど誤解している?
で、>>870を読むと「継承なんて使わずにデータを弄ることで挙動を変えるんだ」
と解釈したんだけど、それだと>>864の主張と矛盾するのでアレ??と思った。
どっちを勘違いしているんだろう俺は。
0875名前は開発中のものです。
2008/03/24(月) 01:23:08ID:tkEWMZpB0876名前は開発中のものです。
2008/03/24(月) 01:33:58ID:KE3DiPkZ読み違えてはいないけど矛盾もしていない?
余計にわからなくなって混乱してきたので一晩寝て考えてみる。
色々有難う。
0877名前は開発中のものです。
2008/03/24(月) 01:41:01ID:tkEWMZpB>864氏の主張を僕なりに解釈
●前半
敵データを記述するにしても、
テキストファイル(CSV)の場合もあれば、バイナリデータの場合もある。
ゲームによっては、ネット越しにデータベースへアクセスするかもしれない。
そういう部分を汎用的に書くのに継承は有効。
●後半
スライムとスライムベスとホイミスライムとドラゴンとオオアリクイと彷徨う鎧とで
いちいちクラス作ってたら一生終わんなくね?
0878名前は開発中のものです。
2008/03/24(月) 08:29:41ID:lmwW1pW4自分自身の意見としては>>877の通りなんだが、
種類ごとにクラスを作るような継承の使い方が全く見当がつかなかったので質問させてもらった。
本気で全種類分クラスを作るのか、
それともスライムとスライムベスはスライムクラスにまとめてしまうのか、
その場合出現テーブルなど外から参照するときはどうするんだ(クラス名?)とか、興味が尽きない。
実際どうやるんだ?
>>872のはどちらかというと戦闘時イベント(HP半減で台詞とか死亡エフェクトとか)など特殊処理を意識したものだと思うので
>>869の話を聞いてみたい。
0879名前は開発中のものです。
2008/03/24(月) 12:03:07ID:nPahSoi8と869ではないが予想
0880名前は開発中のものです。
2008/03/24(月) 14:53:51ID:GL5PdgnZクラス分けして幾つもの「科」を作り、何十もの「目」を作った
そして何百もの「種」を作ろうとしたとき、僕は秀丸のマクロで
大量のクラス(hpp、cpp)を作っていた
何かを間違えていることに気付き始めたのはその時だった
あれは14歳の夏休みでした
0881名前は開発中のものです。
2008/03/24(月) 14:58:03ID:kALgXEvY0882名前は開発中のものです。
2008/03/24(月) 15:00:11ID:GL5PdgnZ本気で作ったよ。リビルドにかかる時間の長さに興奮した
0883名前は開発中のものです。
2008/03/24(月) 15:00:26ID:T1jBR36AIronPythonでスライムクラスとか全部継承で作ったら面白いかも
0884名前は開発中のものです。
2008/03/24(月) 15:09:53ID:ajtWFMqv0885名前は開発中のものです。
2008/03/24(月) 16:18:36ID:gcKvtXCR>class EnemyBase : public IEnemy {};
まだこんな命名規則使うやつ居たのか
0886名前は開発中のものです。
2008/03/24(月) 16:25:13ID:kALgXEvYおまいは 変数hoge や Func()関数にまで突っ込むのか
0887名前は開発中のものです。
2008/03/24(月) 18:49:57ID:lmwW1pW4ひさしぶりに勇者を見た。
>>883
行動パターンとかをスクリプトにして外出しにするわけか。
でも動的に作成するのはなんだかコストが高そうな気がする。
0888872
2008/03/24(月) 21:24:32ID:KE3DiPkZ昨日のあらすじ
>>864継承使うよ(外部データ読み込むのにね)
>>870継承使わないよ(外部データで弄えばいいじゃん)
>>874(俺)矛盾しているやん!どっちやねん!?
>>875矛盾してるように思えないんだが
>>876(俺)え?!!
↑は置いといて取り敢えず1番の疑問の解消から…
>>864
>継承って、外部ファイル読み込みを外部データベース読み込みに変えるとき楽になるとか
ごめん。この継承の使い方、どんな使い方なのかまるで想像できない。
どんなの?
0889名前は開発中のものです。
2008/03/24(月) 22:09:39ID:kALgXEvY0890872
2008/03/24(月) 22:16:59ID:KE3DiPkZ0891名前は開発中のものです。
2008/03/24(月) 22:45:28ID:kALgXEvY0892872
2008/03/24(月) 22:48:16ID:KE3DiPkZもうちょっと考えてみるわ。
0893名前は開発中のものです。
2008/03/24(月) 22:56:35ID:kALgXEvY>>864継承使うよ(外部データ読み込むのにね)
>>870継承使わないよ(外部データで弄えばいいじゃん)
この時点で間違えてる。
0894872
2008/03/24(月) 23:01:16ID:KE3DiPkZうん。たぶん自分が曲解しているんだろうと
そう思って>>874を書いたんだけど
>>875で矛盾していないっていわれたもんで
>>876 え、別に読み違えていないの?に到って
>>877読めば>>888にはならんだろと言われて余計に????
0895名前は開発中のものです。
2008/03/24(月) 23:23:01ID:kALgXEvY>894の疑問に関してだけ言うとだ。
>874と>888とでは、お前さんの言ってる内容が異なる……と、自分は感じた。
>874の文章を読んだ限りでは、ちゃんと理解しているように見える。
>888は間違って理解しているように見える。
>864は
・データの読み込み方法(外部ファイルとかデータベースとか)については、派生クラスを作るべき
・データだけが違うオブジェクトについて、いちいちクラス分割するのはどうなんよ? 正しいの?(疑問系)
の2点について述べている。
具体的には>877を参照してほしい。
>870は
データが違うだけのオブジェクトについて、クラスを分けるのは最適ではないのでは?と述べている。
データの読み込み方法については何も述べていない。
よって、両者は矛盾していない。
0896872
2008/03/24(月) 23:54:26ID:KE3DiPkZおけ。落ち着いたw
やっと謎が解けた。
俺が単純に 「継承使う」←→「継承使わない」で相反していることをいっているように
感じて何故かそこに噛み付いて「矛盾している!」叫んでいただけで
ずっと
「外部データの読み込みの為には派生クラスを作るけど、
データの違いで吸収できるようなことにまで派生クラス作ってどうすんの?」
って主張してるだけで別に矛盾なんてしてねーじゃん
―と。
うん。それなら問題ない。確かに自分は読み違えてはいなかった。
変な方向にこだわって混乱させてスマン。
元々>>860でいうように継承使わない派だからクラスをうじゃうじゃ派生しない方が
良いのはわかるし。
残る疑問は「外部データを読み込みを楽にするために派生クラス」ってやつ。
これ、さっぱり実現方法がわからない。
0897名前は開発中のものです。
2008/03/25(火) 00:54:06ID:MCdo/Bj3インターフェースさえ揃えておけば
差し替えが楽になるってだけの話でしょ。
virtual void Img::Load(DestPtr* dst, FilePtr* src);
を継承したクラス郡
void Jpg::Load(DestPtr* dst, FilePtr* src);
void Png::Load(DestPtr* dst, FilePtr* src);
void Gif::Load(DestPtr* dst, FilePtr* src);
を作って差し替えるのが楽ってだけの。
0898872
2008/03/25(火) 01:22:10ID:kctvHJ5z有難う。
説明するまでもないほど常識的なやり方なのね。
勉強不足ですまん。勉強になった。
ファイル形式が違うのを読み込むときに記述が楽出来るのね。
0899名前は開発中のものです。
2008/03/25(火) 01:41:22ID:8j9nw6j10900名前は開発中のものです。
2008/03/25(火) 02:09:10ID:+wFlCySYお前は本当に872か?w
0901872
2008/03/25(火) 02:11:16ID:kctvHJ5zそもそも>>860でRPGを例に出したのが間違いだった。
敵の名前を皆が知ってるゲームでぱっと思いついたので安直に選んだ。
今思えばスーパーマリオの方が例としては良かった。
継承アレルギーの自分ならENEMYクラスひとつだけにして
全部データの違いで吸収するかなと。
ゲーム制作中にメットっていうファイヤーボールの効かない亀を思いついたとしても
ノコノコからの特化キャラとして派生させたりせずに
メンバ変数fireArmorを追加してメット以外のキャラを0に設定するかな。
0903名前は開発中のものです。
2008/03/25(火) 03:09:13ID:GnFPDA7Uという理由で継承の木にあてはめてしまうのはダメだよ
ていうかそんなのならやらない方がいいswitch文でよろしい
インターフェイスやスーパークラスを使う側に何が必要かということ
隠蔽のニーズのほうを第一に考えるべき
0904名前は開発中のものです。
2008/03/25(火) 06:25:37ID:lx9o+WS20906名前は開発中のものです。
2008/03/25(火) 14:06:40ID:OGAdbkNY0907名前は開発中のものです。
2008/03/25(火) 21:21:33ID:AbKMyTJI継承は多態が必要なときにしか使わないな。
0908名前は開発中のものです。
2008/03/25(火) 22:47:32ID:qKRP+2ua委譲の形に書き直す際に、書き直す前の委譲元オブジェクトの継承関係を
委譲先オブジェクトがそのまま引き継いでしまうようなソースを書いても
何の疑問も持たない奴が意外と多いから注意な。
どの部分を委譲すればよいか、粒度は適切かどうかを見極めたうえで
コーディングすべき。
0909名前は開発中のものです。
2008/03/25(火) 23:18:21ID:k9P0z5/O0910名前は開発中のものです。
2008/03/26(水) 00:49:14ID:WLaSa3Gs当り前だと認識する(定石・パターンを共有する)のが
設計・パターンの学習の第一歩なわけだから、
>>909は最も必要な思考ではあるが
最もレスしてはいけない文章でもあるな。
0911名前は開発中のものです。
2008/03/26(水) 05:21:20ID:AnrQAT7Uということだよ
そういうローカルな問題を解決するのに使ってしまうと
もっと大局的な構造を記述するために使われている継承との一貫性がなくなる
名前のつけ方からして一貫した目線であるべきなんだよ
ゲームを作ってる俺達はApplicationやSystemやEngineって呼べる一番高い位置から
見ているのだから敵キャラをEnemyと呼ぶのはおかしいよ
こんなのたまたまプレイヤーに敵対的なAIが乗ってるだけのゲームオブジェクト
に過ぎないんだから
データの入出力の種類どうこうはそんなの多分インスタンスが生成される必要も
ないんだろうからswitch文かなにかで書けば充分
「現実世界ではこれは〜の一種類とされています」なんてのを継承で
示してみせたところで後で見たとき何の役にも立たないわけだよ
0912名前は開発中のものです。
2008/03/26(水) 08:27:56ID:WLaSa3GsEnemyクラスを作ろうが、一ゲームオブジェクトの処理内容をベタ書きしようが、
どちらもApplicationが敵を直接意識して操作しているという悪例に他ならず
そういった意味で両者の違いなんてほとんどないに等しいから
「現実世界のものどおりに継承関係構築するのは無意味だ」という主張の
引き合いとして「名前の付け方からして〜」以下の文章を出すのは
あまりにも不適当で意味不明。
0913名前は開発中のものです。
2008/04/08(火) 17:58:37ID:o8llBZSA「1回目にここへ来たときはこっちのシナリオ、2回目以降はこっち」
「○○のアイテムを持ってるときに○○を調べるとこっちのシナリオ」
「○○への好感度が80以上のときに話しかけるとこっちのシナリオ」
様々な切り分け方があると思うのですが、そういう条件式とルートを
統括的に扱えるような設計というかやり方ってあるのでしょうか。
今やってるのはもうごちゃごちゃで、テストが不安で仕方ありません…
0914名前は開発中のものです。
2008/04/08(火) 22:19:28ID:XhbGzrYyいろいろなタイプがあると思うけど、それぞれのシーン内の分岐は
基本的にはif分の羅列になると思うんだ
あとこういう枯れたジャンルなら既にある優秀なツール、例えば
RPGならRPGツクールを、ADVなら吉里吉里とかNスクを
それぞれ参考にするといいんでねの
サンプル見たりチュートリアルに沿って使ってみたりすれば
イベントの基本構造とかが何となく見えてくるぞ
0915名前は開発中のものです。
2008/04/09(水) 10:51:18ID:2MmRi2Sh基本的には if 文の羅列だけど、たとえば RPG なら
・基本となるスクリプト
を用意しておいて、その上で条件が成立したときだけ
オーバーライドする内容を列挙した
・派生スクリプト
を上にかぶせるような作りにしておくと、多少は管理が楽になる。
0916名前は開発中のものです。
2008/04/12(土) 15:28:03ID:yutaDgBeちょっと考えたけど難しいわ。降参。
とりあえず綺麗にソースを書いといて。
シナリオそれぞれに分かりやすい名前付けといたがよさそうね。
300件以上とかあるだろうから、どうやって名前付けるんだろう・・・
0917名前は開発中のものです。
2008/04/12(土) 21:03:35ID:JhGNA0fRif文の羅列で凄まじいネストになってしまったりして見難くなるんだろうなぁ。
まぁそういう制御の部分を、コードではなくスクリプトでなるべく見易くするってのはいいよね。
これらの方法は、全ての状態をグローバルなフラグなどで管理することになるのだろうから
セーブやロードとかの処理は、結構簡単で良さそうだね。
915のいうような感じで、条件や処理を一つのオブジェクトに見立てて
それらを動的に拡張していくような構造なら、いままでのフラグ的なものを
上手いこと隠蔽化してくれそうに思うので、一歩進んでいると感じるなぁ。
ただこれは、とあるポイントに複数の拡張が生じる場合を考えると、
優先順位が必要になると思うので、そこは考慮しないといけないね。
場合によっては一つの拡張の優先順位が複数存在することもありそうだし、
拡張の呼び出し元を拡張要求ってなものにして、それに優先順位と実拡張への参照を持たせるといいのかな。
あと現在の拡張状態をセーブするのがちょっと面倒なのかなって思う。
0918名前は開発中のものです。
2008/04/12(土) 21:12:31ID:mZOjOCQT0919名前は開発中のものです。
2008/04/12(土) 21:40:58ID:mVEHbkLg> 優先順位が必要になると思うので、そこは考慮しないといけないね。
実際には、ほとんど必要ない。そこまでやると、シナリオ担当がついてこられなく
なるから。
0920名前は開発中のものです。
2008/04/12(土) 22:32:44ID:arZb3bS0ステートマシンって一般的な単語なのかな
波動やってないとたぶん分からないきもするが
でもそんなににきがつくならこんなアホな質問はせんか
スクリプトだろうがコードだろうがっどっちも同じプログラムであって根本の話ではないし
レス数が900を超えています。1000を超えると表示できなくなるよ。