1人でゲームが作れるように修行します。2 (487レス)
1人でゲームが作れるように修行します。2 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
240: SGGK ◆6pZCoAtaxk [sage] 2011/05/09(月) 23:53:46.13 ID:7TJ8pACL >>234〜>>239 多くのアドバイス、ありがとうございます。全部活用していきます。 >>234,>>235,>>236,>>237 なんとなく分かってきました。 昨日考えていた時は、等加速度αのt秒後の位置xの式が物理の本にあったとして、 これをゲームに応用するには、移動を始めた初期位置と初期速度に対してframetime後、2*frametime後、3*frametime後、…n*frametime後の位置を計算しなくてはと思い悩んでいたけど、 毎フレーム単位毎に常にその時の数値が初期値であると考えてframetime後の数値を計算するならば、公式がそのまま使えそうな感じ。 アドバイスのと同じ内容ですけど、たぶん、 frametime後の位置=現在位置+(現在速度 x frametime)+ ((加速度xframetime)x frametime/2 ) (注:加速度は実際の動きを見ながらマイナスの小さい値を設定) を毎ループ繰り返していけば出来そうな予感。 >>238 前のプログラムが矩形当たり判定で他に判定方法を知らなかったのが理由ですが、 矩形だと斜め45度からボールに近づくと水平に近づくより有利になってしまうし、 円(球)形方式ならその問題もなくて良さそうなのでこれに挑戦してみます。 >>239 今回のプログラムでは、 ・重力、・跳ね返りによるロス、・ころがり摩擦抵抗までを簡易な方法で実装していきたいと思ってます。 いずれは、スピンも表現できるようにして、レベルが上がると2回曲がるシュートが出せるようになる等やってみたいです! http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/240
241: SGGK ◆6pZCoAtaxk [sage] 2011/05/11(水) 23:28:32.89 ID:dXE++lT+ すぐには進まないけど、当たり判定用関数の実装終了。 宣言と定義しただけで、まだ実際には使っていないので、バグが出るかもしれない。 選手がボールを蹴れるようにする実装を検討中。 >>233で言ってた >ボールをけるボタンを押したときに選手とボールのあたりが真なら、ボールが一定の速度で移動するようにするつもり。 を実装するにはキック用キーを押した時に選手とボールの座標を取得して当たり判定をして、 当たりなら、例えばボールの状態の変数をセットしてそれに応じてボールの挙動が変化するみたいにすればよさそうだけど、 それをどこに書くかが悩むところで、選手のクラス内にも書けるし、ボールのクラス内でも書けそうな気がする。 でも、今回は選手やボールに関係するオブジェクト、その他のオブジェクトをメンバ変数に持っているSoccerGameクラスの中に メンバ関数calVariousState()を定義して、その中でやってみるつもり。 SoccerGameクラス内のメンバ関数からなら他のメンバになってる選手やボールのオブジェクトとも情報のやりとりが しやすそうだし、既に書いてあるcalMatchState()や calTimeResetState()と似た役割の関数になると思うので書きやすいかもしれない。 calVariousState()の中でいろいろなオブジェクトの状態を表す変数を更新して、その結果が他のオブジェクトに反映されるイメージ。 できるかどうか自信無し…。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/241
242: SGGK ◆6pZCoAtaxk [sage] 2011/05/17(火) 22:44:39.91 ID:s8XxjuX7 時間の流れが速すぎて生存報告のみな感じ。 ボールを蹴れるようにするにはあれが必要これが必要と考えていたら 何故かソートのプログラムで悩む。 ソートについては名前は聞いたことある位の認識なのでちょっと調べる必要があって時間かかった。 全部調べるのは無理なので最初に見たバブルソートを使う事にした。 これは時間のかかるソートだという事は調べているときに知ったけど、とりあえずこれでやることにした。 選手とボールの距離を計算してその数値が小さいものから順に並べ替えるんだけど、 選手の情報を格納しているリスト構造のコンテナクラス?の並びは変えないで、 もしソートしたらこの要素は何番目になるという情報を全ての選手のデータに格納できるようにしたかったので、てこずった。 今はやっと方法を思いついたところで、それで上手くいくかどうかによって今後の作業の進み具合も変わりそうな感じ。 やり方は22人分のデータを3つの数値a,b,cを持つ構造体型配列にもたせる。 aには、1、2、3、…、22の数値、bにはボールjとの距離、cの初期値は0にしておく。 bの値で構造体型配列をバブルソートして、隣同士の配列の順番入れ替えが起きたら、それぞれのcの値をプラス1したら一方はマイナス1する。 aの値は入れ替えを何度やってもソート終了まで変更なしのそのまま。 ソートが終わったら、例えばa=1の構造体配列のcが5なら、1+5=6 なので、リスト構造1番目の選手データはボールとの距離でソートしたら、6番目になるというこの6だけを リスト構造の1番目の選手のメンバ変数に保持させておくイメージ。 まだ上手くいくかわからないうちに書いてしまった…(汗; http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/242
243: 名前は開発中のものです。 [sage] 2011/05/17(火) 23:03:28.52 ID:z1f8XmMA そんなに難しいことしないで、「選手の情報を格納しているクラス」の”ポインタの配列”をソートすればいいんじゃない? http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/243
244: 179 ◆SLG//siTD6 [sage] 2011/05/18(水) 12:20:58.07 ID:5rb+12nD 難しすぎて理解できないぜ・・・w というか、最後3行あたりの用途ならソートしなくても 単純に自分よりボールに近い選手の数を数えればいいんじゃ..? チラ裏: ここ2週間ほど忙しくてプログラムから離れてたらクソースが読めなくなってしまったんだぜ・・・ 誰だこんな汚いソース書いたのは。。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/244
245: SGGK ◆6pZCoAtaxk [sage] 2011/05/18(水) 23:50:48.43 ID:SMykIXyq >>243 アドバイス、ありがとうございます。 242での説明が不足していたせいもあり、実は自分のプログラムは「選手の情報を格納しているクラス」のオブジェクト22個(選手22人分)を 配列に入れているやり方でなくて、例えば、list<FieldPlayer>m_FieldPlayerList のようにFieldPlayer型のオブジェクトをpush_back関数で次々に入れていけるメンバ、m_FieldPlayerListを定義して、 それらの要素にはイテレータ、list<FieldPlayer>::iterator it;のような命令を書いて、このitを++したり、−−したりする方法でアクセスする感じの実装なので、ポインタでのアクセスが出来なさそうです。 でも、「ポインタの配列をソートする」でネット検索すると、「検索結果ロベールのC++教室 - 第28章 たのしいソート5」というページがヒットしたので、これの1から5までを読んで、実装はまだ理解できないけど考え方がなんとなくわかりました。 これと243氏の”ポインタの配列”をソートするやり方を合わせて 「選手の情報を格納しているクラス」内のメンバ変数で順番を知りたいデータ(距離とか)を構造体配列に移して、それにアクセスするポインタ配列を用意し、そのポインタ配列がソートされるといった仕組みを内部に持っている関数、 つまり、選手の番号を入れたらボールの近さが22人中何番目かがリターンされる関数を作ってみようと思います。 >>244 実はまだ考えてないのですが、今わかってる距離の利用法として、ボールに近い選手を両チームから1人ずつ選び頭付近にマークを出すとか、 ボールから7番目以降の距離にいる選手は守りの動きをするなど、1ループで何度かボールとの距離情報が必要になると思われるので、 その都度同じソートをすると時間がかかりそうなので、一度計算したソート結果を選手のオブジェクトのメンバ変数に保持させておこうかなと思ったため>>242のようになってしまってます。 自分も作業からしばらく離れてて、あれッ?と思うほどに読めなくなった事がよくありましたので気持ちがよくわかります。(汗; http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/245
246: 179 ◆SLG//siTD6 [sage] 2011/05/25(水) 02:34:04.49 ID:XYH4jaxx チョイ調べたらイテレータからポインターにぶち込めるみたいだったけど p = &*it みたいな感じで。 >>244 のは、選手数えて保持すればいいんじゃって事・・・w やってる事は選択ソートとあまり変わらないし、保持したところでアクセスにもループいるから微妙っちゃ微妙。 ポインタ配列ソートならp[7] で7番目にアクセスできるから便利だね チラ裏: 何をやろうとしてたか忘れたので とりあえず資源関係を追加してみた。 TOPバーに数個のボタンと資源の残量表示するようにした。 次は資源基地の占領とか作ってみるかなぁ あーでもユニットクラスの再設計もいるような・・・アニメーションクラスも作ってないし・・・orz http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/246
247: SGGK ◆6pZCoAtaxk [sage] 2011/05/25(水) 23:02:14.26 ID:WTP3xbuq >>246 ありがとうございます。今思うと自分のソースでも (*it).メンバ関数 のように書いてるところもあり、 *it がオブジェクトのような感じなので、それを考えれば p = &*it でやれそうなのにこれは全然思いつかなかった。 ノートに書いて忘れないようにしておきます。 ソートが今丁度出来たところなので、イテレータへのポインタ方式のソースへの適用は次回かそれ以降のソース改良のときに挑戦してみたいと思います。 ソート書くのに時間が掛かってしまい、途中で作業ペースも落ち気味になる。 ゲームスタート直後は選手とボールの距離が同じデータが複数あるので、 例えば1,1,1,1,5,6,7…になるはずのが、4,4,4,4,5,6,7…になってしまい悩んだけど、 番号付けるループ内にbreak文を入れたら直った。 これだけだと説明不足だけど、今回のはものすごく長いので、ソースの次回UPで見てもらえると助かります。 これで>>241まで戻ってボールを蹴る処理の実装に取り組めそうな予感。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/247
248: SGGK ◆6pZCoAtaxk [sage] 2011/05/25(水) 23:16:38.45 ID:WTP3xbuq 次回ソースUPの時に同じソースが残ってる自信がないので、簡単に説明。 d[i]がソート後の距離を指すポインタ配列 例えばd[1]には1番ボールと選手の距離が近い値へのポインタが入っていて、 *d[1]で距離を呼び出して、この距離と同じメンバ変数m_DistanceFromBallを持つ選手のオブジェクトがit++を繰り返して見つかったら、 その選手オブジェクトのソートした場合の順番を保持してるメンバ変数m_NumberFromBallにiを入力するアルゴリズム。 breakが無かったら、4,4,4,4,5,6,7…みたいな感じになるけど、以下のソースのようにbreak入れたら 1,1,1,1,5,6,7…みたいになり直った。 なんとか説明できた! it=(*fp).begin(); while(it!=(*fp).end()){ for(i=0;i<=21;i++){ if(*(d[i])==(*it).m_DistanceFromBall){ (*it).m_NumberFromBall=i+1; break; } } it++; } http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/248
249: SGGK ◆6pZCoAtaxk [sage] 2011/05/31(火) 23:13:10.10 ID:45bt856E 1週間が早すぎるけどやっぱり進まず。(なかなか早く帰れないし、帰り遅いと疲れてしまって…と言い訳。) 選手がボールを蹴るキーを押したときに選手とボールのあたり判定が真ならボールの状態をKICKEDにして、(←ここまでは書けた。コンパイルは通るようになったけど、動かすと問題でるかもしれない。) ボールの移動関数の方では、ボールの状態がKICKEDになったループの時だけ初速を計算し、状態をMOVINGにして、それ以降は速度0になるまで位置計算を繰り返すにしたいけど、この初速をプログラムのどこで計算するかに迷って時間かかってしまった。 ボールのクラスのメンバ関数でやろうとすると選手のデータを引数にしなければならず面倒に思ったから。 なぜなら初速を変える要因は選手だけでなく地面や壁やゴールバーなどもあるし、そのつどこれらを引数にすると処理が増えて複雑になりそう。 そこでボールデータクラスに初速をメンバ変数として持たせて、選手もボールも扱えるsoccergameクラス内で初速を計算してボールデータのメンバにセットして ボール関数内ではその初速メンバにアクセスして位置を計算してみるようにしようと考えて今日は終了。 たしか今年の8月で4年が経つはずだけどなかなか進まない…。 いっそのことあと1年で完成させる! という無理な目標でも立てて頑張った方がずるずるいかなくていいのかもしれないと変な事考えてしまったりして…。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/249
250: 179 ◆SLG//siTD6 [sage] 2011/06/02(木) 04:01:33.97 ID:bbIJXBAa ずるずるでも続いてるならいつか出来上がるさ〜 自分はあきっぽいからずるずる続けられないんだよなぁ すでにちょっと2Dスクロールアクションみたいなの作ってみたいなとか思ったり。 が、とりあえずSLGをそれっぽく完成させてるまで我慢。 段々コードが荒っぽくなってるけどw チラ裏: 中立資源地の占領実装した。敵の資源地とかはまだ。 けど占領しても何も変わらないので自分のものになったか分からない、っていう。 ついでにユニットクラスの再設計?ちょっとコード読みやすくした。 ら、FPSが200→100まで落ち込んだ、HAHAHAワロス・・・ http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/250
251: SGGK ◆6pZCoAtaxk [sage] 2011/06/02(木) 23:58:31.42 ID:y33r2mcB 1年での完成はやっぱり無理だとしても諦める事だけは無いようにしたいな〜と思ってます。 自分もコードが早くも分かりにくくなってきてるので、危険な状態かもしれない(汗 選手がボールを蹴れる処理を書き終えてコンパイルしてみたが、 コンパイルは通るようになったものの、選手もボールも画面に表示されずで今日は終了。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/251
252: 名前は開発中のものです。 [sage] 2011/06/07(火) 00:00:23.92 ID:OJpa3qNa 一気にゲームを完成させるのが難しいなら、要素ごとにマイルストーンを設定するのがいいですよ。 3D見下ろし型サッカーゲームだったら、 1.グラウンドとゴールを描画する。カメラを動かしたいのならその動かし方も決めて調整しておく。 2.ボールを配置し、試験的にマウスでクリックすると蹴ったように動くようにする(物理運動シミュレーション)。 3.ラインを割った状態(スローイン、コーナーキック、ゴールキック、得点)を判定し、復帰処理をつくる。 4.選手をまず1人表示し、動かせるようにする。 5.選手とボールの接触判定をし、マウスクリックの代わりに選手が蹴るようにする。 6.CPU選手をまずは1人登場させ、動くようにする。 7.ポジション別にCPU選手のAIを調整する。 8.タイム、スコア、勝敗、タイトル画面などの装飾要素を実装する。 の順番がおすすめです。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/252
253: SGGK ◆6pZCoAtaxk [sage] 2011/06/07(火) 23:23:39.99 ID:iMg7vpsC >>252 ありがとうございます。このように全体を先にイメージした方がいろいろ良さそうですね。 今出来てるのは1の一部、4、8の一部ぐらいなので、あまり進んでいない様です。 どのくらい遅れているのかということに気付けるのも大事なので、完成までにやることをイメージしておくことは有効だと思います。 先は長いけれど、ここから頑張ってみます。 ボールを蹴る実装が上手くいかず。 ボール移動関数実行直後にブレーク入れてボールの座標を見ると、(-1.#IND00、-1.#IND00、-1.#IND00)になってた。 ネットで調べたらどこかで0で割ってるところがあるという意味らしい。 最初は気付かなかったが、速度ベクトルの大きさを1にする必要があるためVNorm(速度ベクトル)という関数を使ってた箇所があり、 初期化したときの速度ベクトルは(0,0,0)にしてたので、VNorm(速度ベクトル)の中でたぶん、大きさを1にするためにベクトルをベクトルの大きさで割ってるはずで、 そのベクトルの大きさが0なので、ここが怪しいと思い、VNorm(速度ベクトル)の直後でブレークして、 ボールの座標を見たら、(-1.#IND00、-1.#IND00、-1.#IND00)だった。 ここを直そうと思ったところで終了。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/253
254: 名前は開発中のものです。 [sage] 2011/06/08(水) 00:39:22.18 ID:j4NqkXuU >>253 >完成までにやることをイメージしておくことは有効だと思います。 全体の把握というか、パーツ毎に分けて作業化するという意味合いが強いと思う 簡単にいうと段階毎に締め切りを設けて、そのスケジュール通りにこなしていけばいつの間にか完成している、という方法 いつか完成すれば(あるいは完成しなくても)いいという人にはあまり効果はない http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/254
255: SGGK ◆6pZCoAtaxk [sage] 2011/06/09(木) 00:10:01.09 ID:HLDcGlpq >>254 自信が無くても締め切りを設けた方が良さそうな気がしてきました。 ありがとうございます。 >>252氏のマイルストーンを参考にして6月23日を目標にしてみます。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/255
256: 179 ◆SLG//siTD6 [sage] 2011/06/09(木) 02:18:24.59 ID:n5JLQBEP たしかに段階的学習スレのお題のはやりやすかった気がする・・・。 あの時は一週間くらいで一段階って自分ルール決めてたなぁ 今でも大体1週間くらいでなんか一つって感じだけど。 チラ裏:次の目標? 資源地とユニットに■マークに色つけて敵と見方分かるようにした。 敵の資源地に攻撃→HP0になったら→中立化→占領で自分の物になるようにした。 次は、弾が当たっても残りHPとか分からないのでそこらへんをなんとか 他ユニットのダメージ判定とか。プチAIとか。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/256
257: SGGK ◆6pZCoAtaxk [sage] 2011/06/09(木) 23:56:56.45 ID:k3OGT/+I 翌日になって確かに23日は厳しすぎかもしれないと思えてきました。 一週間でひとつが丁度良さそうな感じ。 とりあえずは23日目標で頑張ってみて、その結果を見て次の行動を考えてみようと思います。 AIは難しそうですね。 自分も7番でやろうとしてるけど、選手中心半径何ドットにボールが入ったらボールに向かうような処理を書いて とりあえずAIということにしてみる予定です。 カメラを動かすとフィールド上でマウスが示す座標が変わり、 これによるプログラム全体への影響箇所を短期間で直すのは無理なので、 今回はカメラ固定として、とりあえず1番は完了にする。 今は2番で、マウスがクリックされた瞬間のフィールド上でマウスが示す座標を取得する関数を どうするか考えているところ。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/257
258: 名前は開発中のものです。 [sage] 2011/06/10(金) 19:38:35.81 ID:HbOQx0Jb 期限を守ることよりも確実に仕上げていくことが大事ですよ。 それと、安易に妥協しないことも終盤でのモチベーション維持につながると思います。 1番2番に関係しますが、>>116 は理解できましたか? http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/258
259: SGGK ◆6pZCoAtaxk [sage] 2011/06/11(土) 00:17:49.91 ID:TMzi+Wx3 >>258 アドバイス、ありがとうございます。 そうですね。確かにそのような気もしてきました。(>>116の理解は一応大丈夫かなと思ってます。) もう少し1番を頑張ってみてカメラを動かせるようになってから、>>257をやってみます。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/259
260: 名前は開発中のものです。 [sage] 2011/06/17(金) 23:39:19.78 ID:qmzwBamB イラストだけフリー素材を使うのはスレチかな? http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/260
261: 名前は開発中のものです。 [sage] 2011/06/18(土) 11:32:10.91 ID:j8vO9QDT 良いと思うよ http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/261
262: SGGK ◆6pZCoAtaxk [sage] 2011/06/19(日) 00:21:13.27 ID:Zcvt1Nsn こ…これは誤爆レスなのでしょうか? こちらは全然進まずで、マウスでカメラ動かす為の前準備としてマウスのクリックとドラッグの判定をする関数を書こうとしているところ。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/262
263: 179 ◆SLG//siTD6 [sage] 2011/06/19(日) 03:44:59.57 ID:EkbDCXyb スレ名が「1人で〜」だから・・・? いいんじゃないの? ダメだったら俺もスレチだぜorz テクスチャは○とか×とかで済ませてるけど、効果音とか無理だしなぁ・・・まだそこまでいってないケド。 チラ裏: HPバーととかユニットの死亡処理(HP0で消す)とか作った。 次はユニット生産?とか。とりあえずボタン押したら基地からユニット出すように作ろう。。。 どっかにSLGの段階的LV表みたいなもの無いもんかな http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/263
264: SGGK ◆6pZCoAtaxk [sage] 2011/06/19(日) 12:39:30.15 ID:Zcvt1Nsn >>263 そう言われてみると、これは参加のレスですね。 昨日はうっかりして気が付きませんでした。ありがとうございます。 >>260 こちらの勘違いすみません。 自分も今使ってるサッカーフィールドはフリー素材。 参加者いつでもお待ちしてます! http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/264
265: 名前は開発中のものです。 [sage] 2011/06/19(日) 14:11:27.41 ID:lmGZwizg 260です。書きっぱで申し訳ないです。 私は恋愛ADVを作ろうとしています。 まだ企画段階で、吉里吉里もインストールしてない状態ですが、修行してがんばります。 イラストだけは描けません。 そういえば、効果音やボイスも1人だと厳しいですね。やろうとしてやれないことはないですが。。。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/265
266: 名前は開発中のものです。 [sage] 2011/06/19(日) 16:19:10.42 ID:n6GuNgkN 恋愛ADVを作るなら、ゲーム中のどんな要素(画像、テキストや台詞、イベント類…)を 重要視したいかポイントを定めて、まずその部分を徹底的に作りこむといいんじゃないかな? 仮にそれがもしイラストなのだとすれば、 他人の素材を借りて作ったのでは自分で作ったことにはならないので(つまりスレ違いなので)、 ゲームを作りながらでなくてもいいから、普通にイラストの修行をするといいと思う。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/266
267: 名前は開発中のものです。 [sage] 2011/06/19(日) 16:50:25.41 ID:n6GuNgkN 179氏のSLGに関しては、どのような内容か不明だけれど、 氏の発言を読み返した限りでは実装技術で困っている様子はなさそう。 しかし要素技術から行き当たりばったりにボトムアップで作ろうとしているらしい。 アクションゲーム向きな作り方だと思うけれど、SLGやRPGには不向きだと思う。 コーディングに入る前に、ゲームに登場させる要素 (キャラクター、ユーザインタフェース、状態遷移図、判定式…)の一覧表を作り、 個別の設計図と全体の工程表を作ってから作業するのがいいと思う。 あと、規模によっては要素設計用のエディタを先に作ったほうが効率的。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/267
268: 名前は開発中のものです。 [sage] 2011/06/19(日) 17:47:09.16 ID:lmGZwizg >>266 今のところ、一番こだわりたいのは、テキストです。 台詞とト書きだけみたいなテキストだとすごくさびしく感じていたので、 うざったくならない程度に、もうちょっと描写を入れてみたいと思っています。 現在、メインシナリオのプロット中。 がんばる。がんばる。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/268
269: 名前は開発中のものです。 [sage] 2011/06/19(日) 19:54:58.72 ID:n6GuNgkN まだプロットが上がっていない段階ではアドバイスにならないかもしれないけれど、 テキストで勝負するなら次の2タイプのいずれかを目指すといいと思う。 (A) テキスト中に巧妙に謎解き要素を含ませたフラグ立て謎解き形式 (B) テキスト自体が文学作品として成立するレベルのデジタルノベル形式 それによって、「こだわる」べき目標が見えてくるかも。 もちろん他のシステムでもいいと思うけれど、たとえば育成系ゲームだと ゲームパラメータに直接関係しないテキストは追々読み飛ばされてしまうので、 こだわりの方向性が大きく違ってくる気がする。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/269
270: SGGK ◆6pZCoAtaxk [sage] 2011/06/19(日) 23:33:27.48 ID:Zcvt1Nsn なんだかスレが伸びてる。 >>265 自分は、やる気の出たときに少しずつ続けるような感じでやっています。 お互い気楽にいきましょう。 今日は、マウス3ボタンについてクリックとドラッグの判定できるところまで進んだ。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/270
271: 名前は開発中のものです。 [sage] 2011/06/20(月) 12:39:53.64 ID:loZm5s9w >269 Bの方向を目指して頑張ります。 >270 はい。頑張りましょう! メインシナリオのプロットが粗方できたのですが、全ルート作っちゃっといたほうがいいでしょうかね。 あんまり長いとダレるので、そこそこの長さに留めてみました。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/271
272: SGGK ◆6pZCoAtaxk [sage] 2011/06/20(月) 23:46:54.40 ID:fqQ6mSJs 完成できる事を一度確認して、次から好みで長さを決めるというのもありな様な気がします。 こちらは、ホイール回転によるフィールドの拡大縮小機能の実装がうまくいかない状態…。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/272
273: 名前は開発中のものです。 [sage] 2011/06/21(火) 00:46:16.91 ID:fioCutCs 最初からあまり風呂敷広げすぎてもってやつですね。 とりあえずメインシナリオのテキスト作ってみて、早々にスクリプトの勉強はじめます。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/273
274: 179 ◆SLG//siTD6 [sage] 2011/06/21(火) 03:13:54.94 ID:Nb3jaiP+ >>267 ttp://gmdev.xrea.jp/st/up/356.png 今こんな感じSLGってかRTSぽい・・・w 提督の艦隊の宇宙版? ホームワールド?みたな感じにできたらいいなぁと。 ターン製はあんまり好きじゃないんでリアルタイムで。 シカシ、自分でもアクション作るほうが向いてる気はする・・・。 設計図とか書いてないけど・・・やっぱいる?(x`; >>273 風呂敷広げすぎてヤバイのがここに! あ、やべ、全然すすんでない/(^o http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/274
275: 名前は開発中のものです。 [sage] 2011/06/21(火) 04:50:18.50 ID:MHP6wZYB >>271 過去に短編小説などを執筆し、他人に読んでもらった上で、 とりあえず作品としては成立しているレベル以上の評価を受けた経験があるなら、 バリエーションルートを含めて考えるのも自由じゃないかな。 そうでないなら、まず、メインシナリオだけに集中したほうがいいと思います。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/275
276: 名前は開発中のものです。 [sage] 2011/06/21(火) 05:07:11.26 ID:MHP6wZYB >>272 マウスホイールの回転検出はできてる? 方法はいろいろあるけど、たとえばWM_MOUSEWHEELメッセージを処理する方法があるよ。 3Dゲームでパースペクティブビューを使用しているのであれば、 フィールドを拡大縮小するのではなく、カメラの座標を注視点に接近または離脱させればいい。 なお、その際には視点-注視点間の距離を一定値で増減するのではなく、一定率で乗算、除算してやると良い。 (カメラ位置をE、注視点をFとしたとき、E'= F+(E-F)*k or E'=F+(E-F)/k。 kは1.0前後の定数) http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/276
277: 名前は開発中のものです。 [sage] 2011/06/21(火) 05:30:44.83 ID:MHP6wZYB >>274 設計図については、他人に見せる必要はないので、しっかりしたものを作る必要はないけれど、 手書きメモ程度のもので良いのでノート上で整理してからコーディングに入ったほうが効率的だと思う。 全体的な工程の順序としては、 1.内部設計(ルール、パラメータ、バランスの調整) 2.各要素の実装 3.ユーザインタフェースの実装 4.システム統合 5.各種エフェクトの充実 のような感じ。 まあ179氏の場合、今の進め方でも、特に詰まっている様子はなさそうですが。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/277
278: 260 [sage] 2011/06/21(火) 13:01:25.60 ID:fioCutCs とりあえずオープニングにあたるシナリオは出来ているので、 いったん吉里吉里/KAGで組んでみます。 いろいろアドバイスありがとうございますm(__)m http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/278
279: SGGK ◆6pZCoAtaxk [sage] 2011/06/22(水) 00:06:09.17 ID:TfzO15yA >>274 既に色々な要素が画面に出てて進んでそうな感じ。期待してます! >>278 UPお待ちしてます。自分もUPできるように頑張ります! >>276 自分はDirectXが理解出来なくてDXライブラリで頑張ってます。 回転検出は出来てるようで、昨日はGetMouseWheelRotVol()とSetupCamera_Perspective()を使い、視錐台の視野角を変更して拡大縮小するやり方を試みて悩んでました。(ホイール止めても限界まで拡大してしまう) もう少し考えて無理な場合、カメラを移動する方法で頑張ってみます。ありがとうございます! http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/279
280: 260 [sage] 2011/06/22(水) 00:08:48.05 ID:TgbTdqkQ スクリプトいきなりつまずきましたが、なんとかやってます。 演出も考えながらだと、スクリプト組むだけで、相当時間がかかりますね。 くじけず頑張ります。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/280
281: 名前は開発中のものです。 [sage] 2011/06/22(水) 12:00:12.23 ID:fBrDYNiX 吉里吉里か、あれは扱いが難しいよね ちなみにデフォだとNスクリプタの方が高機能というのは知ってる? だからNスクじゃ表現できないようなら吉里吉里に乗り換えるという順番の方が良いと思うけど http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/281
282: 名前は開発中のものです。 [sage] 2011/06/22(水) 12:04:04.89 ID:9GezxZuR >>281 Nスクはライセンスがめんどい http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/282
283: 名前は開発中のものです。 [sage] 2011/06/22(水) 12:11:30.60 ID:fBrDYNiX >>282 ・無料配布であれば企業/個人の区別や配布方法を問わず無料でお使いいただけます。 ・雑誌付録にフリーウェア/シェアウェアとして収録する場合は無料でお使いいただけます。 ・商業流通作品の販売の際には、使用料を一作につき40万円いただきます。 ・同人流通作品の販売に関しては無料とさせていただきます。 特に作者(高橋直樹)への報告の義務はございません。 まとめると「商業以外なら無料で勝手に使える」 めんどいか? http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/283
284: 名前は開発中のものです。 [sage] 2011/06/22(水) 12:28:18.65 ID:9GezxZuR >>283 使用条件.txt よく読んでみた 結論:めんどい http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/284
285: 260 [sage] 2011/06/26(日) 23:51:24.50 ID:xFrZRsWs 吉里吉里やりはじめた状態でNスクに手を出すと、 いろいろごっちゃになりそうなので、とりあえず吉里吉里で進めてみます。 前回の書き込みから、実はあまり進んでいません。 よくわからないところは飛ばして、全体をとりあえず作ってみることにします。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/285
286: SGGK ◆6pZCoAtaxk [sage] 2011/06/27(月) 23:20:47.45 ID:DnwEKUYt 自分もどちらかといえば、全体を先につくってみたい方です。 拡大縮小の件、ホイール回した時のGetMouseWheelRotVol()の値をマウスのメンバ変数に保持して、 その保持した値を今度はカメラの移動関数でループ毎に足していたので、限界まで拡大縮小してしまっていた。 ホイールを回しているときだけ、足すようにしたら、上手く動いた。 次は、ホイールドラッグで画面を上下左右に動かせるようにしたいけど、最近なかなか作業時間が確保できない感じ。 確保できても動くプログラムが書けるかどうかわからないのが悩むところ。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/286
287: SGGK ◆6pZCoAtaxk [sage] 2011/06/28(火) 23:10:23.97 ID:/iwsRyTC ホイールドラッグで画面を上下左右に動かせるようにする方法を考えるところまでで今日は終わり。 残り時間が少ないので、実装を後回しにして次の目標のマウス右ボタンドラッグでの回転の方法を考えてた。 ちなみに参考はメタセコイアの操作方法。右ボタンでぐるぐる回して、どういう法則で回してるのか考えてた。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/287
288: SGGK ◆6pZCoAtaxk [sage] 2011/06/28(火) 23:20:58.79 ID:/iwsRyTC 時間無い…と書くのはやめようとなんとなく思った。 もっとこう楽しくやるイメージでいかねば…(汗w 回す法則もなんとなく見えてきた感じ。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/288
289: 179 ◆SLG//siTD6 [sage] 2011/06/29(水) 01:42:07.29 ID:bFO62WPj こっちは全体ってかとりあえず実行出来るもの(最初なら真っ黒のウインドウ表示)作って後はひたすら追加ってな感じかなぁ やっぱ、動いてる物あると分かりやすいし。 そして良く分からんところはコピペでいいんだy(ぇ 初期化とか物理式とか・・・ >>277 なんというか、まさに1を練ってないせいで詰まった、みたいな?w 生産用のウインドウ作ってボタン押したら自分の基地にユニット出すってのはできたんだけど 1 SLGみたいに 生産→プール→編成(グループ?)→出撃 にするべきか 2 このままRTSみたいにユニット選択→生産=出撃 で1ユニットごとに動かすようにするべきか・・・ たぶん1のが作りたい。しかし、すんげぇ大掛かりになりそうな気がする/(^ http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/289
290: 名前は開発中のものです。 [sage] 2011/06/29(水) 03:32:24.30 ID:HlRn2WRH >>289 1の実装 class unit; //ユニット vector<unit*> pool_list; //プール class group{ //編成(グループ) vector<unit*> group_list; }; 生産する時はpush_backして pool_list.push_back(new unit()); 編成画面でpool_listの内容を表示する どういうゲームか知らずにレスしてるので的外れだったらすまんけど 単純に考えてこんな感じじゃいかんのかな? プールは1つあれば充分、グループは何隊も作るというイメージ http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/290
291: SGGK ◆6pZCoAtaxk [sage] 2011/06/29(水) 23:51:37.47 ID:pI8KOKmf 今思えば自分の場合、全体を先に作りたいと言っていたのは、自分自身未知の作業なので作れる自信が無かった為、 作れそうか見極めたいといった目的もあったと思っています。ちなみに全体と言ってるのは、最低限の処理の流れの実装みたいなものです。 全体とか関係なく作れる場合は、好み優先で進んだ方がモチベーションが続くかも。 ホイールドラッグで画面を上下左右に動かせるようになったけど、 メタセコイアみたいにマウスで画面をつかんで動くような感じになってないので、原因調査中。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/291
292: SGGK ◆6pZCoAtaxk [sage] 2011/07/02(土) 01:37:53.85 ID:Yr95b2iZ なんとか上下左右に動かせるようになった。(今日はたまたまこんな時間) >291では、画面のフィールドが突然ロケットのような勢いで画面外に出て行ってしまったりして、 もうこれが自分の限界かと思った。 ディスプレイ画面上でマウスの示す位置がaからbまで移動すれば、3D座標系内のフィールド上の投影位置も AからBに動くとして、そのベクトルABを算出して、カメラの位置ベクトルと注視点ベクトルに−ABしてやればうまくいくのではと思ってた。 これらの計算を始めた時の最初のカメラの位置をずっと初期値としてベクトルABを計算してループすればOKと思っていたのが間違いだったようだ。 毎ループ毎に計算した新しいカメラの位置および注視点ベクトルを次のループでの初期値にするよう書き直したら、 フィールドが飛んでいく不具合が解決! http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/292
293: 179 ◆SLG//siTD6 [sage] 2011/07/05(火) 05:05:11.63 ID:oJBQ1HG/ >>290 単純だと・・・よろしいならば実装だ ttp://gmdev.xrea.jp/st/up/380.png って、勢いでプールだけ作ったけど、 グループクラス(&編成画面)実装にはやっぱ色々変更しないとだめぽ。。 あ、VECTORとかよくわからんので適当に配列(POOL[X][Y][PAGE])で実装してます(x`; 強引にやりすぎて中身がかなり汚い・・・w どういうゲームか?自分でも良く分かってない/(^ >>292 ま、まぁカメラ周りは一回作ればそんなに弄ることないから 出来てしまえばこっちのモノサ 行列計算とかもうやりたくないです。ハイ http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/293
294: SGGK ◆6pZCoAtaxk [sage] 2011/07/05(火) 23:43:42.69 ID:Bc+Kj7b6 >>293 カメラ周りはまだ時間かかりそうな感じだけど頑張ります。 実はまだメタセコイアを眺めてて回転の法則が見いだせない状態(汗 横の回転はたぶんこうプログラムすればいいだろうというイメージ出来たけど、 縦の回転はあともう少しで思いつきそうな感じ。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/294
295: 名前は開発中のものです。 [sage] 2011/07/07(木) 04:17:05.86 ID:ATCSo0JT メタセコイアの視点操作って、注視点関係なしにワーク原点を基準に ヨー角ピッチ角の回転と距離だけじゃないかな? CADには適しているけれど、ゲーム用のカメラとしては参考にならないよ。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/295
296: SGGK ◆6pZCoAtaxk [sage] 2011/07/07(木) 23:37:42.40 ID:RwXcD4/0 >>295 ゲームに不向とは気付かずに作業してました。ありがとうございます。 早目にこの段階を終わらせて次いきたいと思ってます。 今日は何も出来なかったけど、いちおう回転だけは土日になんとかしたい気持ち。 縦の回転方法も考えてみたので、今度こそプログラムを書いてみます。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/296
297: 179 ◆SLG//siTD6 [sage] 2011/07/08(金) 00:03:46.32 ID:eIT69sd4 1、原点(0,0,0)でカメラの向き(角度X,角度Y,0)の回転行列を作る 2、1のマトリックスから カメラから原点までの距離(0,0, - 距離)をトランスフォーム 3、マウスでのミドルボタン平行移動は(移動量X ,移動量 Y , 移動量Z(0))で1のマトリックスからトランスフォーム 4、2と3を足す 5、カメラに各要素をセット(4のposition、角度X,角度Y,0) 3、の 移動量Zの部分はメタセコアではズーム代わりになってると思う。 多分メタセコアのはこんな感じだと思(・x・`) 色々違ってたらゴメンナサイ、と・・・。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/297
298: SGGK ◆6pZCoAtaxk [sage] 2011/07/09(土) 00:04:38.56 ID:HknH7n3m >>297 ありがとうございます。昨年末頃3Dの本を途中まで読んでて、 それに載っていた座標変換のことを忘れてました。 なのですぐにこれをコードに落とすのはまだ難しいけど、 プログラムのどこかでまた座標変換が必要になる頃には出来るように本を読み直してみます。 座標変換でやる場合、移動量Zを変えた時に注視点をどう変えるとズームになるかがまだ自信ないけど、 本読み直す時に解決出来ればと思ってます。 今日は、マウスの右ボタンドラッグ移動量から画面で回転させたい角度を計算するとこまで出来た。 あとは横回転はY軸に対して行い、縦回転は、注視点位置ベクトル(x、y、0)から カメラ位置ベクトルのZ成分を0にしたベクトルをマイナスして出来たベクトルを90度回転してできたベクトルに対して 回転すればいけるかもしれないというあやしい方法を考えてました。(汗 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/298
299: SGGK ◆6pZCoAtaxk [sage] 2011/07/10(日) 22:33:55.13 ID:fCX0gGeR 昨日の書き込みで間違いがあった。 縦回転は、注視点位置ベクトル(x、0、z)から カメラ位置ベクトルのY成分を0にした (略) が正解。自分のプログラムは垂直方向がY方向になってるのが理由。 メタセコイア風に画面内のフィールドを動かせるようになったような感じがする。 直接これをゲームに使う事はないかもしれないけど、いろいろ動かして、カメラの位置を検討するのに使えそう。 >>279でやった拡大方法だと、カメラの座標が変わらずに拡大縮小してしまうので、>>276氏の方法に変更。 次からはボールの動きに挑戦。179氏の>>297も意識して作業の予定。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/299
300: SGGK ◆6pZCoAtaxk [sage] 2011/07/17(日) 22:29:42.21 ID:3PbrHQAt あまりの暑さなので今日はもう休もうみたいな感じ。 ボールの動きは、ゲーム開始直後に斜め45°で動きだすようにしてみたら動いた。 次は数値は適当だが重力方向の加速度を考慮した式にしてみたところボールは45°の角度で天井に向かってくだけで放物線にならず。 合計数時間は悩んだと思うけど、ループ毎にボール位置しか更新してなかったのが原因とわかる。 速度も加速度の影響で毎ループ変化してるので、速度も毎ループ毎に更新するようにしたら放物線のように動いた。 次は地面やフィールドの端でボールが跳ね返るようにすることに挑戦。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/300
301: SGGK ◆6pZCoAtaxk [sage] 2011/08/01(月) 00:12:25.80 ID:MQtVPARw 時間かかってしまったけど、ボールの跳ね返り実装完了。 ボールの動きは月面歩行みたいなゆったりな動きだけど、これで良しとする。(数値の調整でなんとかできるかも) 179氏>>297のマトリックスを掛けていく方式を意識しつつも、今回も長文プログラムで対応。 (マトリックス作成がまだ自分には理解できてない様なので、勉強しないと無理そうだと今回実感した感じ。) 指定範囲外にボールが出そうになった時に跳ね返らずに壁に沿ってボールが動いたけど、 速度だけ反転して、位置を反転して範囲内に戻してなかったのが原因。 ボールが跳ね返り、跳ね返りの高さが少しずつ小さくなり、最後は転がって止まるようにするのに苦労。 はねてる時の加速度は下向きで、転がってる時の加速(摩擦による逆向きを表現したかった)は速度と逆向きにするというような 加速度の切り替えをどうするかに時間がかかった。 ボールの位置が低い時で判定しようとするとプログラム開始時点で条件を満たして止まってしまう。 放物線の最高点での速度は水平だと思うので、水平になった時のボールの高さがある低い数値より下の場合に、 ボール位置のy成分を0にして加速度を切り替えてみた。 水平になった時を知る方法は、速度ベクトル1と速度のy成分を0にしたベクトル2の角度がプラスマイナス1度以内ならほぼ水平と判断。 角度はベクトル1と2の内積というものからcosを計算して判定。 加速度が切り替わって速度が少しずつ小さくなるので、一定値より小さくなったら停止。 …という流れで実装出来て動いてるけど、今後も問題なく動作するかは未知な感じ。 次は>>252 >3.ラインを割った状態(スローイン、コーナーキック、ゴールキック、得点)を判定し、復帰処理をつくる。 に挑戦の予定 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/301
302: SGGK ◆6pZCoAtaxk [sage] 2011/08/06(土) 23:29:11.60 ID:p7p2W50E やっぱり、簡単にはいかない予感。問題は時間の管理。 ボールがサイドラインを割ったらスローインする場合、 割った瞬間にスローイン位置にボールを復帰させるのは超反応すぎる感じがするので、 スローイン判定が出て、ちょっとボールが転がって、その後スローイン位置にボールが出現するようにしてみたいと思った。 すると、ボールがラインを割ってから、復帰までのわずかな時間をカウントして、その中断時間中はプレイ時間をカウントしないようにするにはどうすればいいんだという悩みが残る。 対象別に専用の時間を用意しなければならないのかと考えてみたが、それは時間測定対象が増えると大変な作業になる。 結構悩んだけど、時間の処理関数をメンバ関数に持つクラスを作って、必要な関数の数だけそのクラスのオブジェクトを作ればいいかもしれないと思った。 実は3D座標系でやってる今のプログラムは上記とは異なる理由から運よく時間関係をクラス化してたのでなんとかなるかもしれない。 2Dの時はこのクラスが無かった…というか思いつかなくて、3Dにするときに色々考えて、ソースを短くしたいという理由から時間関係をクラスにしていた。 時間のクラスには、 void countGameTime();//時間をカウントする。 void resetGameTime();//カウントを0にリセットする void displayGameTime();//時間を画面表示 のメンバ関数があるけど、新たに void tempStopGameTime();//カウントを一時停止する void restartGameTime();//一時停止からカウント再開 を書き加える予定。 上手くいくか確認してから書いた方がいいかもしれないけど、書いてみた。(後で作業を振り返れるし。) http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/302
303: SGGK ◆6pZCoAtaxk [sage] 2011/08/17(水) 00:37:25.52 ID:gcbpVhmx >>252 >3.ラインを割った状態(スローイン、コーナーキック、ゴールキック、得点)を判定し、復帰処理をつくる。 1週間位で出来ないかなと思ったけど無理だった。 テクニックを持っていないので、if文と状態を表す変数で対応しようとしたらソースがぐちゃぐちゃになってしまった。 ノートに手書きで処理の流れを書いてからプログラムを書いてみたけど、多数の問題が発生。 一つずつ直していき、直してしまったらどんな問題だったのか思い出せないのもあったりする。 覚えている問題は、 (1)テキスト文字が表示されない。 (2)スローイン位置に復帰させたボールをけっても動かない。 (3)ボールを蹴れるようになったけど、その後再度ボールがラインを割っても何故か今度はスローインの処理に移らない。 原因と解決法 (1)原因:「ThrowIn!」のテキストがグラフィックの裏に表示されていた。(フィールドを回転できるようにしていなかったら気付かなかったかもしれない。) 解決法:フィールドを書いてからテキストを表示すればいいけど、やり方を変えて、drawText()というメンバ関数を作り、これをメインループの最後の方に置く、 元々テキスト描画命令を書いていたところではフラグをセットして、drawText()内に移したテキスト描画命令はフラグがセットなら命令実行するようにした。 (2)原因:3秒経過した?→YES→ボールをライン際にセット → ボール状態をSTOP → ボール状態がKICKKEDか? →YES → ボール移動 という処理にしていたが、これだと、マウスクリックでボールの状態がKICKKEDになっても直前でSTOPに状態が変わるので、ボール状態がKICKKEDか? → NO となって動かない。 解決法:かなり悩んだけど、3秒経過した?→YES→m_Set01==falseか?→YES→ボールをライン際にセット → ボール状態をSTOP →m_Set01=true;→ ボール状態がKICKKEDか? →YES → ボール移動 にしたら動いた。 (3)←まだ原因不明。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/303
304: SGGK ◆6pZCoAtaxk [sage] 2011/08/17(水) 23:01:09.88 ID:umYfMU6K (3)については、ボールの移動はそもそもボールクラスのメンバ関数moveの方で計算されるので、 状態がKICKKEDなら動くようになっていて、状態がKICKKEDになってその時の速度を再計算して直後にMOVINGという状態に移ってしまうように書いていた。 つまり、昨日の「ボール状態がKICKKEDか? →YES → ボール移動」とう処理にはいいつまでたっても進まない。 正解は、 ボール状態がMOVINGか? →YES → ライン判定の状態をリセットする だった。 コーナーキック、ゴールキックもスローインを参考にして実装した。 これで、 >3.ラインを割った状態(スローイン、コーナーキック、ゴールキック、得点)を判定し、復帰処理をつくる。 得点以外は実装完了。 次は、 4.選手をまず1人表示し、動かせるようにする。 5.選手とボールの接触判定をし、マウスクリックの代わりに選手が蹴るようにする。 を一緒にやる時に得点実装する予定。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/304
305: SGGK ◆6pZCoAtaxk [sage] 2011/08/19(金) 23:52:19.80 ID:UUBFLar3 選手を1人だけ移動できるようにした。 今までプログラム内で処理を飛ばしていた部分を飛ばさないようにしただけだけど、 その頃は固定カメラだったので、カメラ座標が変わっても対応できるように修正。 ボールの移動関数のソースをほぼ流用できたので、なんとか出来た。 マウスを選手1人が追いかけ続けるだけだけど、とりあえずはこれで 4番は終了! http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/305
306: SGGK ◆6pZCoAtaxk [sage] 2011/09/03(土) 23:32:25.11 ID:+c0ztxSK たまにしか作業してなかったけど、問題があって進まずの状態。 選手とボールの当たり判定があった時にマウスクリックすればボール蹴れるはずが出来ない。 ボールは選手にくっついた状態で選手と一緒に動く。 しかし、なんどもクリックすればボールも少しずつ動く(これも原因不明)。 選手の移動を止めてクリックし続け、当たり判定ゾーンからボールが出ても 何故かボールが選手と同じ速度と方向で動き続ける。 ソースを読んでも原因全く不明。幸いこのボールを蹴る処理を書く前のところまで 戻れたので、もう一度書き直してみる予定。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/306
307: SGGK ◆6pZCoAtaxk [sage] 2011/09/11(日) 22:22:25.77 ID:T1L+oLn6 自分は作り始めて先月末で4年が経過してしまった…。 スレタイ通りの状況だけど、きっと何処かで作ってると思いながら、 自分も作業継続! >306を何とかするために実際は8月30日頃から設計図を書くことにした。 大げさなものではなくてノートに手書きの状態遷移図もどき。 これにより、ボールの状態を enum BALLSTATE{STOP=1,KICKKED,MOVING}; から、 enum MOVE_STATE{STOP=1,FREE,PRE_KEEP,KEEP};に変更してみた。 kickは選手のメンバ関数にした。 なんとなくだけど、当たり判定関数の引数を増やして、そこにフラグ値を入れて 当たり判定の有効無効を切り替えるようにした。 ボールの移動関数はほとんど書き直しになってしまい、試行錯誤の結果、 ボールが選手に付いていくようにはなった。 まだキック関数はうまく動作してくれない。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/307
308: SGGK ◆6pZCoAtaxk [sage] 2011/09/11(日) 22:33:24.95 ID:T1L+oLn6 実はボールの動きはかなり不自然な動きになってしまった。 選手の周りを衛星のようになって動く感じ。 Youtu●eでいろんなゲームを参考にしたけど、早すぎて動きのパターンがつかめなかったけど、 最終的にZEROC●Pというゲームを参考にしてみた。 >307で継続と言ったものの、4年でこの進み具合だとあと何年かかるのだろうか? それ以前に完成出来るのだろうかという不安もあるので、この先どうなるかはやっぱりわかりません!(汗; http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/308
309: SGGK ◆6pZCoAtaxk [sage] 2011/09/11(日) 23:00:52.21 ID:T1L+oLn6 今日はこれでラスト。 別に伏字にする事もないような気がしてきたので、Youtube、ZEROCUP が正解。 寝ようとしたけど、もう少しだけ作業したらボールをキックできた。 しかし、新しい問題が発生した。 ボールが一度しか蹴れない。 蹴ったボールを拾いにいってもボールが付いてこなくなった。 ボールがラインをはみ出したら試合経過時間が停止し、 ボールをフィールドに投げ込むまでの経過時間表示はされるが、 ボールが復帰位置に表示されない。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/309
310: 名前は開発中のものです。 [sage] 2011/09/12(月) 22:39:19.48 ID:Im+6OdM9 失礼ながら、無駄に複雑にしすぎてるような気がするね。 基本的にボールの状態変数は、(x,y,z)、(vx,vy,vz)だけあればいい。 それと便宜的に(接地 or浮いている)フラグをつけてもいい。 初期値はそれぞれ、ボールの初期位置、速度は0、フラグは'接地'状態。 ボールのループごとの処理はこんな感じ。 if(浮いている){ 垂直方向の重力加速度を速度に加算 速度を位置に加算 if(速度が下向きで垂直座標が地面より下){ 位置を地表に補正 垂直方向の速度に -0.9とか反発係数を配慮した値を掛ける 垂直速度が小さくなったら、'接地'状態とする } }else{ 水平方向の速度に0.99など転がり摩擦係数を意識した値を掛ける } 水平方向の速度を水平位置に加算 蹴った瞬間、(vx,vy,vz)に初速度を与え、'浮いている'状態にするだけ。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/310
311: SGGK ◆6pZCoAtaxk [sage] 2011/09/12(月) 22:48:41.39 ID:I4CSS3jX 直観的に勢いでなんとか運よく直せた感じ。 1.ボールが一度しか蹴れない。 ボールと選手が当たってPRE_KEEP→KEEPの間は、その選手とボールのあたり判定をキャンセルするフラグを立てていたが、 ボールを蹴った後、そのフラグを戻していなかったので、当たり判定が無効になり、ボールに触れても 状態を変更する命令を実行しなかったから。 2.蹴ったボールを拾いにいってもボールが付いてこなくなった。 1.の理由と同じ。 3.ボールがラインをはみ出したら試合経過時間が停止し、ボールをフィールドに投げ込むまでの経過時間表示はされるが、ボールが復帰位置に表示されない。 ラインのはみ出し判定処理の内部でボールの復帰位置をセットしていたが、 セットするだけではその位置に表示されるわけではない。 enum MOVE_STATE{STOP=1,FREE,PRE_KEEP,KEEP};という4つの状態をボールに設定していたけど、 これらは同時には存在しない状態なのでswitch〜case文にしておいて、 それぞれのcaseの最後でその時点のボール位置を確定して、switch文を抜けてから 描画関数にボール位置を渡していた。ちなみに変数はstaticにしたらswitchを抜けても保持されているみたいな感じ。(自信なし) ところが何故かcase STOPのところだけ、位置を確定する命令を書き忘れていたので、 case FREEの時の確定位置が変数に残っていて、こちらの位置で表示されてしまったのが理由。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/311
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
メモ帳
(0/65535文字)
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
あと 167 レスあります
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.011s