1人でゲームが作れるように修行します。2 (487レス)
1人でゲームが作れるように修行します。2 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
312: 名前は開発中のものです。 [sage] 2011/09/12(月) 22:53:19.97 ID:Im+6OdM9 ラインを割ったときには、その時点での(x,y,z)を控えておき、3秒間のカウンタを開始する。 その3秒間も、ボールのループごとの処理は継続する。 3秒たったら、控えておいた位置を復元するとともに、速度はゼロ、フラグは'接地'にセット スローインしたときは、初速度は違うかもしれないが蹴ったときと同様。 (x,y,z)の控えや3秒カウンタは、ボールとは別のメインのクラスなどで管理するといいと思う。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/312
313: SGGK ◆6pZCoAtaxk [sage] 2011/09/12(月) 23:12:56.43 ID:I4CSS3jX >>310,312 アドバイス、ありがとうございます。 書き込む前にリロードし忘れてしまい、すれ違ってしまいました。(汗; 自分のソースも似た感じの処理になってるようなのですが、 何故か原因不明でどんどん複雑化しているようです。 例えば、切り替えた状態が、知らない間に別のところで切り替えられてしまう…というような感じ。 ここから崩して作り直すのは厳しいので逆にこのまま>>252の 6.CPU選手をまずは1人登場させ、動くようにする。 7.ポジション別にCPU選手のAIを調整する。 8.タイム、スコア、勝敗、タイトル画面などの装飾要素を実装する。 を目指してソースをupできるようにして、そこからソースの見直しをしてみたいと思います。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/313
314: 名前は開発中のものです。 [sage] 2011/09/13(火) 19:12:35.87 ID:nrv6ZrDs その残り3つ、急に段差がきつくなってると思う。 無理に進めずに、今までのところをきっちり固めてから進むべきじゃないかな。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/314
315: SGGK ◆6pZCoAtaxk [sage] 2011/09/13(火) 22:23:15.13 ID:UyS152Ji >>314 書き込みありがとうございます。 AIについては何も勉強してない状態なので、ボール持ってる選手に他の選手が 近づいていくだけで、これがAIという事にしようと考えていましたが、これだけでは物足りないかもしれません。 もう少しAIっぽくしようとすると確かにきついです。 昨日は、崩して作り直すのは難しいと言ったけど、無理せず、部分的でもいいので ソースを見直して、AIも少し調べてみようと思います。 現時点では、直したばかりのボール移動部分をさらに見直すつもり。 今の段階でも、選手が停止した状態ではボールが蹴れないとか、 ボールがマウス方向に飛ばないとか、クリックしてもすぐに蹴れないなどの不具合が出ているので、 ここはもう一度作り直した方がよさそうな気がした。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/315
316: 名前は開発中のものです。 [sage] 2011/09/14(水) 20:07:55.18 ID:tc3GEPcb コーディングする気はないけれど>>252を解釈してみる。 まずは「1.グラウンドとゴールを描画する。カメラを動かしたいのならその動かし方も決めて調整しておく」から。 グラウンドは大きな板ポリゴンにテクスチャを張る方法でも、自分で芝目や白線のポリゴンを描く方法でも どっちても良いが、ポイントは「ゴールラインの中心に適切な高さのゴールを描いているかに懸かっている。 これは、基本的な座標系の方向とスケールを正しく理解してプログラミングしているかの試金石になる。 グラウンドとゴール一式を3Dモデルとして外部からインポートするという方法も有ると思うが、 その場合でも試験的にゴール枠、ゴールライン、タッチラインにプログラムで赤線を引くなどして、 平面の座方形の向きと、プログラム内でのフィールドのスケールを視覚的に確認しておくことは必須。 また、当然その様子は透視投影画像で自由にカメラ位置を変えて確認すべきなのだが、 そんなことはライブラリに専用関数が用意されているので、むしろ0番目的な段階の話だと言える。 数字キーを押したら例えばコーナーポストの外からゴール上空を注視する景色になるとか、 いつでも任意のカメラ位置から任意の地点を注視できるように、フレームワークに組み込んでおきたい。 おそらく3Dのサッカーゲームでユーザがプレイヤーに指示を与えながら マウスでカメラも操作しろというのは無理だと思うので、完成度が上がってきたころには 自動カメラワークのアルゴリズムを検討することいなる。 ただし、現時点では切り替え式で十分。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/316
317: 名前は開発中のものです。 [sage] 2011/09/14(水) 20:42:28.24 ID:tc3GEPcb 引き続き「2.ボールを配置し、試験的にマウスでクリックすると蹴ったように動くようにする」について。 ボールクラスの実装は>>310のとおりで、メソッドは、 (1) ボールの現在位置をセットし、速度は0にする:セットプレイ専用 (2) ループごとに実行する運動方程式の処理 (3) ボールの現在位置を求める (4) ボールが接触した面があった場合、法線ベクトルを引数に速度を反転させ、反発面上に位置補正する処理 (5) ボールの現在速度を求める (6) ボールに初速度を与える:キック時専用 (7) 現在位置にボールを描画する とする。(4)の反発は、まずは地面で、次にゴールポストとクロスバーにも反応するようにしておきたい。 とりあえずテスト用には、右クリックでセンターマークに(1)ボールをセット、 左クリックで最初は固定方向でも良いので(6)ボールに初期値を与える機能を呼び出す。 ポイントは、キックによる初速度、重力加速度定数、転がり減衰係数、反発係数などの物理パラメータを しっかりチューニングし、気持ちよくプレイできるバランスを見つけることに尽きる。 ちなみにメンバ変数はprivateにし、不用意に外部からフラグ操作しないこと。今後もおそらくその必要はないはず。 >>311によると「当たり判定をキャンセルするフラグ」のような意味不明なフラグを導入しているようだが、 物理的にナンセンスで実際バグの元にもなっている。発想を切り替えなければならない。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/317
318: 名前は開発中のものです。 [sage] 2011/09/14(水) 21:02:28.23 ID:tc3GEPcb 連投大丈夫かな?「3.ラインを割った状態(スローイン、コーナーキック、ゴールキック、得点)を判定し、復帰処理をつくる」 日本サッカー協会の競技規定によると、ボールがラインを完全に割ったらアウトオブプレーとのことなので、 段階1で確認したプログラム上のフィールドサイズと、段階2のメソッド(3)によるボールの(中心の)現在位置と、 おそらく定数となるボールの半径から、インプレーかアウトオブプレーか判定ができる。 アウトの場合、タッチラインを割ったのか、ゴールラインを割ったのか、 またゴールラインの場合は、かごの内か外かまで判定できる。 しかし現時点ではコーナーキック、ゴールキックの区別はできない。 アウトオブプレーを検出したらフレームワーク側でホイッスルを鳴らすなり何か表示するなどの演出を始めても良いが、 ボールの物理シミュレーションメソッド(2)は呼び続けておくのが好ましい。 演出が終わったら復帰処理となるが、タッチラインを割ったときなら飛び出た位置あたりからスローインだし、 コーナーキック、ゴールキック、あるいは得点後はセットプレー扱いなので再開位置は自動的に決まるはず。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/318
319: 名前は開発中のものです。 [sage] 2011/09/15(木) 06:32:14.49 ID:I5TXtYrP 「4.選手をまず1人表示し、動かせるようにする」 選手の3Dモデルデータが必要となるが、とりあえず雪だるまか、こけしか、冷蔵庫で代用することにし、 ここで本質的に重要なのは操作方法の決定とパラメータ調整ではないかと思う。 しかも、単に選手の2次元移動とはいいつつも、実際にはカメラの方向によってプレイヤーが混乱しない ような工夫が必要なため、快適なプレイ環境を実現する操作方法というのは、実に奥が深いと思われる。 ここの作りこみ次第で、ゲームの面白さが左右されるはず。 しかしとりあえず暫定的なものにしておいて先の段階へ進みたいのであれば、 カメラ位置をセンターラインの延長上空、注視点をセンターマークにし、フィールド全体が見渡せる画面とし、 選手はカーソルキーかゲームパッドで移動するようなオーソドックスな方法で構わない。 この段階において、プレイヤーはフィールドの中だけ移動できるように境界条件処理をしておくと良い。 また、ボールとの関わりについては、少なくともこの段階では相互にまったく干渉しないことも確認しておく。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/319
320: SGGK ◆6pZCoAtaxk [sage] 2011/09/15(木) 06:34:11.75 ID:DAY99jiD >>316,317,318 ありがとうございます。 これから始めようとしているボール関係処理作り直しの参考にさせてもらいます。 「1.グラウンドとゴールを描画する。カメラを動かしたいのならその動かし方も決めて調整しておく」 いまはメタセコイアっぽい操作でカメラを動かせる段階で止まっていますが、 作業が進めば、自動も考えてみたいです。 「2.ボールを配置し、試験的にマウスでクリックすると蹴ったように動くようにする」 基本的には>>310氏の案の様にいこうと今考え始めてたところで、法線による反発は将来の課題にしようと思います。 自分はZEROCUPの操作にこだわりすぎてたようで、ZEROCUPは選手がボールにあたると ボールが選手に対してシューティングゲームのオプションのように動くので、 このボールキープ時のボールの動きは別のアルゴリズムに切り替えないと自分には無理で、 キープ中は当たり判定をOFFにしないと毎ループキープ状態への切り替え初期化がされてしまうといった事情が重なり、 だんだん複雑になっていったのだと思います。 ただ、ボールの移動処理をシンプル化しようとした時、選手がボールに当たった時に 選手の移動方向にボールが蹴られる方式では、ドリブルしながら選手の移動方向を変えようとすると、 選手がボールに当たる瞬間に方向を変えなければ、今のマウスカーソルに選手が向かう方式では 方向変更ができないと思い、これが悩みになってました。 一応、ZEROCUPにこだわらない案も考えてみたので戻ってきたら続きを書いてみたいと思います。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/320
321: 名前は開発中のものです。 [sage] 2011/09/15(木) 07:07:32.22 ID:I5TXtYrP 「5.選手とボールの接触判定をし、マウスクリックの代わりに選手が蹴るようにする」 先の段階で放置しておいた選手とボールの作用条件について実装する。 選手もボールもともに運動する物体であることから、まずは、 段階2の(3)および(5)で得られるボールの位置および速度を、 判定対象選手のローカル座標系における相対位置、相対速度に変換する。 その上で下記の順に判定、処理を行う (1) ボールの相対位置が選手に十分近い(距離<ボール半径+体格半径)かつ 相対速度ベクトルが選手側に向かってきている場合、 ボールがコントロールできない位置で単純に当たったものとみなし、 メソッド2の(4)による反射処理を行う。法線はワールド座標系に逆変換すること。 その際、選手自身の移動速度の法線方向成分を加味するため、 反発係数は1.0を超えることも有り得る。 (2) ボールの相対位置が選手正面の特定領域内にあり、 かつ選手がコントロールする意思を持った状態の場合、 その意思に従いトラップするなりキックするなりでボールの相対速度を決め、 ボールメソッド2(6)を呼び出す。 その際も、選手ローカル座標からワールド座標系に戻してから渡す。 いずれでもなければ、選手はボールに干渉しない。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/321
322: 名前は開発中のものです。 [sage] 2011/09/15(木) 07:32:47.70 ID:I5TXtYrP >>320 ボールをトラップするも、ドリブルも、パスもシュートも、本質的には 「選手がボールをコントロールできる相対位置・速度条件にいるとき、どのようなコントロールの意思を示すか」 によって、ボールに新しい運動速度を与えるという処理に統一できる。 つまり、選手はボールに対しては速度にしか干渉できないように制限している。 これによって、もし多数の選手が団子状になったとしても、どう転がるかわからなけれど 試合自体は進行可能になると思う。 先着選手にボールが帰属(優先キープ)してしまうようなルールだと、ゲーム性が変わってくると思うけれど、 格闘よりもフィールド戦略を主にするなら、それもありかと思う。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/322
323: 名前は開発中のものです。 [sage] 2011/09/15(木) 21:25:19.83 ID:I5TXtYrP 「6.CPU選手をまずは1人登場させ、動くようにする」 4で書き忘れたけれど選手クラスの定義には、 ・現在位置(x,yz) ・向いている方向 ・移動速度 ・チームの識別符号 など、描画やボールへの干渉判定に必要な状態変数を持たせる。 それを少し拡張して、 ・目標位置 ・目標方向 をメンバに加え、 「現在位置が目標位置から遠ければ、 向いている方向を目標位置の方向に1フレーム期間で回れる角度だけ補正し、 移動速度も制限速度内で目標位置の方向に加速する。 目標位置い近くなったら、 向いている方向を目標方向に近づけるとともに、 目的地で静止できるように減速する」 というような処理関数を作ってみる。 すると、CPU選手には「ボールを相手ゴールに向かってコントロールできる位置と方向」を与えれば、 毎フレームごとにボールに向かって突進するはず。 ボールがコントロール可能な状態(5の(2))になったなら、敵ゴールに向かってボールを蹴り出すが、 小さくければおそらくドリブルっぽくなるだろうし、ゴールに十分近づいたら強く蹴ってシュートにすればいい。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/323
324: 名前は開発中のものです。 [sage] 2011/09/15(木) 22:00:59.48 ID:I5TXtYrP 「7.ポジション別にCPU選手のAIを調整する」 ここまでくると脳内プログラミングでは難しくなってくるが敢えて思考実験を続けてみる。 6での拡張で、個々の選手に対して、 ・ボールをコントロールできない状態なら、目的地と方向を指示する ・ボールをコントロールできる状態なら、ボールのキック方向と強さを指示する の2パターンだけ考えればよくなった。 目的地については、チームで戦うときは必ずしもボールに向かう必要はなく、 むしろパス回しを活用していかに早く安全に敵陣深く攻め込めるかを考えた配置に なるよう、監督になった気分でそれぞれの選手に指示するべきである。 具体的には、選手間の位置関係から、ボールをコントロールできる(可能性が最も高い)選手から、 最前線の選手までの経路探索アルゴリズムを応用しつつ、個々の選手がより有利な位置に 移動するような評価関数などを駆使して、ということになりそうだが、脳内シミュレーションでは無理っぽい。 なお、選手への指示に上の2パターンを出せば、あとは自動で動いてくれるようにしたので、 ゲームパッドで選手ひとりを直接動かす操作方法は、この段階でデバッグ機能として卒業したい。 その代わりに、プレイヤーもマウスなどを使って、「どのプレイヤーをどこへ動かす」という指示を リアルタイムに出せるインタフェースを作っておく。 こうなると完全にサッカーチームの監督ごっこというゲームシステムが固まってくる。 もしくは、ジョイパッド操作は、チーム内で一人だけ動きが違う「キーパー」操作に割り当てても良いかも。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/324
325: 名前は開発中のものです。 [sage] 2011/09/15(木) 22:21:08.89 ID:I5TXtYrP このあと>>252では仕上げに入っているけれど、補足すべき要素としては、 A.選手同士の接触判定と解決処理 B.最後にボールに触れた選手によるスローイン、ゴール・コーナーキックの判別 C.オフサイドの判定 D.AI実装のための評価関数の充実 などが必要じゃないかと思う。 「8.タイム、スコア、勝敗、タイトル画面などの装飾要素を実装する」については、 まあ、そのまんま好きなように作りこめば良い。 長々書いたけれど一応これで脳内では完成したつもり。 本当に実装できるか確かめていないので何の保証もないけれど、 なにか一部でも参考になれば嬉しいので自由に使ってくださいな。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/325
326: SGGK ◆6pZCoAtaxk [sage] 2011/09/15(木) 23:35:53.55 ID:7ihcTlmB 戻ってきたので>>320の続きです。 「3.ラインを割った状態(スローイン、コーナーキック、ゴールキック、得点)を判定し、復帰処理をつくる」 「4.選手をまず1人表示し、動かせるようにする」 どちらも一応大体は組み込めたような感じです。修正は今後もあると思います。 まだポリゴンキャラはやったことなく、ここで教わったビルボードというのでやってます。 いまの自分のレベルだとポリゴンキャラ実装はかなり先になりそうです…。 「5.選手とボールの接触判定をし、マウスクリックの代わりに選手が蹴るようにする」 しばらくの間は、この段階で頑張る事になると思います。 選手自身のボール反射は全く考えてなかったので、それ以外のキック、ドリブルなどの書き直しが 上手く出来たら、挑戦してみます。 「6.CPU選手をまずは1人登場させ、動くようにする」 方向をメンバに持たすのを考えてませんでした。 ポリゴンキャラじゃないので、絵的に表現させるのはまだまだ無理なので、 足元に矢印を表す直線を書いて向きを表現しようと思います。 「7.ポジション別にCPU選手のAIを調整する」 ここは未知の領域なのでまだ先ですが、この段階までこれたら参考にしたいと思います。 >>325も含めて多くの助言、ありがとうございました。 回答できなかった部分も今後の進捗に合わせて細部に取り込んでいこうと思います! それと、ZEROCUPにこだわらない案 ドリブルキーを押すと選手とボールの位置関係と、蹴りたい方向を考慮して 選手があるていどオートで動く。 例えば、まっすぐドリブル中に90度右に動くようにマウスカーソルを動かした時に 丁度ボールを蹴りだしてしまったら、そのボールまで選手が動き、そこでマウスカーソル方向に蹴って、 選手もマウスカーソル方向に動くようになるという感じ。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/326
327: SGGK ◆6pZCoAtaxk [sage] 2011/10/06(木) 23:08:47.15 ID:9XiSdH1l 選手がボールと当たってたらボールを蹴れるようになるなどの処理を消して、 ボールの移動処理を簡素化してバグが出なくなるまで出来た。 しかし、ボールが表示されない。 とりあえず、マウスクリックでボールを蹴れるところまで戻せるよう頑張るつもり。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/327
328: SGGK ◆6pZCoAtaxk [sage] 2011/10/17(月) 22:36:26.10 ID:PMZ6FiGu ちょっと停滞している状況にあるけど、まだ諦めてはいない(汗; ボールが描画されなかった理由は、ボールの座標値に異常な大きさの数値が設定されていた為と思われる。 ソースを目で追うと、座標値計算の途中で0で割ろうとしている箇所があり、そこを直したらボールが表示された。 kick関数は選手のメンバ関数だったのをボールのメンバ関数に移し、左マウスクリックでkick関数を実行するようにしたら、 ボールは動くけどまだおかしい。 ボールは浮かずに常に右側にまっすぐ移動し、ラインを出てもラインアウトの判定がされなくなっている。 直接の原因はまだ不明だけど、ボールのメンバ変数にY軸回転角度と射出角度と速度の絶対値を持たせるように変えたことで、 まだ気付いていない未修正のところがあるからだと考えてる。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/328
329: SGGK ◆6pZCoAtaxk [sage] 2011/11/06(日) 22:32:37.41 ID:+A7uxjdP あれこれ書き直している内にラインアウトの判定がいつの間にか直っていた。 ボールの軌跡がプログラムの意図と無関係な動きをする問題でつまづく。 左マウスをクリックしたときにボールの速度初期値に変更を加える方式だけど、 変更を単純にしてみたり、ボールの状態を一定にしてみてもダメ。 ふと、マウスの状態を決める箇所のプログラムを目で追っていると、 マウスを左クリックした場合、他のマウス操作をするまでずっとその状態がクリックしたままで プログラム内で保持されている事に気づく。 そこを直したら、ボールの軌跡が直った。 前バージョンのプログラムでは何故問題なかったのか不思議だが、時間も無いのでこのまますすめることにした。 ボールの動きをバグ探しの為にかなり単純化してしまったので、 これを戻す過程でまた別のバグが出るかもしれない。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/329
330: SGGK ◆6pZCoAtaxk [sage] 2011/11/07(月) 23:05:47.86 ID:Ci/pCY6w 次に出た問題はボールを例えば傾斜60度で動かそうとしても動かない問題。 やり方はボールからマウスに向かうベクトルをY軸中心で90度回転する行列で回転させて、 そのベクトルを軸にしてボールからマウスに向かうベクトル(大きさは速度と一致させておく)を60度回転させる。 −60度にしてみたら放物線のように動いた。 なので、上記のやり方の中で、Y軸中心で−90度回転させてから、 そのベクトルを軸にして60度回転させるようにして解決。 マウスクリックでボールを動かせるようになったので、やっと選手で蹴れるかどうかというところまで戻った。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/330
331: 名前は開発中のものです。 [sage] 2011/11/08(火) 02:48:47.25 ID:x9yT+23z 原因がジンバルロックなら一旦クォータニオンを経由させれば回避できるよ http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/331
332: SGGK ◆6pZCoAtaxk [sage] 2011/11/08(火) 23:40:07.79 ID:3rFIMhjp 見てくれてありがとうございます! プログラムの方はたぶんその可能性は無さそうな感じです。 プログラムはワールド座標系だけで書いてあり、選手から見た座標系をフィールド基準の座標系に行列一回で変換するような書き方はまだ出来てません。 ジンバルロックとクォータニオンについては難解なので、キーワードとして覚え、プログラムのレベルが上がってきたら挑戦してみたいと思います。 昨日の動作の件は、DXライブラリでの回転の正負方向が分からず、 60度で空中に向かってると思ったら、地中に60度で向かっているようで、 何故かボールが地面で反射せず、地面上を這うような動きになっていたのが原因です。 次の予定はドリブル実装に挑戦! http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/332
333: SGGK ◆6pZCoAtaxk [sage] 2011/12/31(土) 22:10:55.60 ID:OIfdTnQa 気付けば今年ももう終わり…。 実はまた転勤の話が出て、その準備の所為で>>332から進んでないけど、それは言い訳だと思い反省…。 本当に無理だと思う状況にならない限りは諦めないでゆっくり細々でも続けるつもり! http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/333
334: 名前は開発中のものです。 [sage] 2012/01/18(水) 00:32:02.30 ID:JkO8yqpq 見てるぞ、がんばれ〜。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/334
335: SGGK ◆6pZCoAtaxk [sage] 2012/01/21(土) 00:43:07.08 ID:GhL59l/a ありがとうございます! まだドリブル実装で止まってますが諦めずに頑張ります。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/335
336: SGGK ◆6pZCoAtaxk [sage] 2012/01/21(土) 01:10:41.85 ID:GhL59l/a >>65のキー割り当てと異なってくるかもしれないけど、 マウスカーソルに向かって歩く Zキー押し続ける マウスカーソルに向かって走る Xキー押し続ける 選手の進行方向固定 Shiftキー押し続ける ドリブル(選手はボールに向かって移動し、ボールに近づくと ボールをマウスカーソルに向かって蹴る。 これを繰り返す) Dキーを押し続ける ロングパス ドリブル中にマウス左クリック これだと、選手の進行方向を固定して進行方向以外に向けて ノールックっぽくロングパスを出そうとすると、 Z、Dを押しながらマウスを操作しなければならず、操作性が良くないような気がしてきた…。 深夜になってしまった。(汗; http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/336
337: SGGK ◆6pZCoAtaxk [sage] 2012/01/29(日) 23:10:06.09 ID:IMaOAms7 しばらくプログラムから離れててソースの中身を忘れてるかもしれないのでリハビリ的に短時間作業。 選手の移動関数内には選手がボールを蹴れる当たり判定範囲を円で示す処理があるんだけど、 その処理部分を別の関数を作ってそちらに移して、選手の移動関数内には その別に作った関数を書けばいいようにした。 これから先、選手の移動関数内にはいろいろな状態を表すフラグが増えてきて ソースが見づらくなる事が予想されるので、ちょっと整理してみようと思った。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/337
338: SGGK ◆6pZCoAtaxk [sage] 2012/01/30(月) 23:23:48.35 ID:9k8tvKVu 次は>>116を参考にした処理がプログラム内に散らばっているので、これも整理しようと思う。 昨日と違い面倒なところがあるので時間かかるかもしれない。 昨日のはひとつのクラス内での話なので、一部分の処理を関数として書き直したい場合、 そのクラス内のメンバ関数として定義して使えば動くけど、 今回やろうとしているのは、処理がいろいろなクラスで使われているので、 今考えられるやり方としては、その処理を行う関数をメンバ関数にもつ新しいクラスを作って、 その新しいクラスのオブジェクトを>>116の処理を使っているいろいろなクラス内で定義する。 あとはその新しいクラスのオブジェクト経由?で>>116の処理を行うメンバ関数を呼び出せばなんとかできるのではと期待。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/338
339: SGGK ◆6pZCoAtaxk [sage] 2012/01/30(月) 23:29:08.24 ID:9k8tvKVu 下から2行目は、「定義する」ではなくて「実体化する」と書いた方が良かったかもしれない。 自信ないけど、なんとなく気になったので訂正。(汗;) http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/339
340: SGGK ◆6pZCoAtaxk [sage] 2012/02/01(水) 22:32:47.56 ID:3gp/rYmv >>338で言った関数を作成。 プログラムの一か所を試しにこの関数で置き換えたところ動いた。 他のところの置き換えはその都度やることにして、>>336に戻る。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/340
341: SGGK ◆6pZCoAtaxk [sage] 2012/02/02(木) 22:41:13.33 ID:Y5t1e3wS あれこれ考えたけど良いのが思い浮かばない。 ドリブルの移動関数を別に用意して、選手がボールに当たったらその選手がドリブル権を持っていることにして、 その間はドリブル関数で動くようにして、他の選手がボールに触れたらドリブル権がその選手に移り、 以下同様に繰り返す…というのを考えたが、なんだか以前に失敗したときと同じことになりそうな感じがした。 そこで別の案を偶然思いついた。 22人の選手が一つの変数を共有して、ボールに当たった選手はその変数を自分のIDに書き換えて 移動処理にきたときにその共有変数を見て、自分のIDと一致した場合、移動関数をドリブル関数にする。 そんな変数できるかと思ったがこれも偶然思い出した。 自信は無いけど、静的メンバ変数を宣言して、この変数を外部定義すればよいというところまで調べて思い出した。 なので、今日は 選手クラスにID(←いままで無かった)と静的メンバ変数とそのメンバ変数に読み書きできるように get、set関数を用意した(メンバ変数がstaticだからこれらの関数が必要だった。)。 上手くいくかどうかは全く未知な状態。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/341
メモ帳
(0/65535文字)
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
あと 146 レスあります
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.018s