1人でゲームが作れるように修行します。2 (487レス)
1人でゲームが作れるように修行します。2 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
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
342: SGGK ◆6pZCoAtaxk [sage] 2012/02/06(月) 23:22:29.56 ID:fDWM60Br 上の文の下から2行目のは「staticでprivateだから」の間違いのような気がしてきたけど自信なし。 今は作業を続ける前にボール関係のクラスをプリントアウトして 寝る時にこれを見ながらプログラムの中身を思い出そうとしている最中。 何故、そんな事してるかというと単純に中身を忘れたので思い出す必要があるというのと、 現在マウス左クリックでボールを蹴りだせるようにしている箇所を関数として ボールのクラスに移して残しておきたいと思ったから。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/342
343: SGGK ◆6pZCoAtaxk [sage] 2012/02/13(月) 23:48:23.39 ID:Z7ePs7lw ボールクラスの宣言内にボールを蹴ったときの処理をするメンバ関数の名前だけ書き、 その定義をcppファイルに書いた。でも、中身はまだ空の状態。 >>342の「現在マウス左クリックでボールを蹴りだせるようにしている箇所を関数」にしようとすると、 ボールを蹴る関数が、マウスと選手の位置情報を持つ必要があり、ボールを蹴る関数が複雑になるので、 現在マウス左クリックでボールを蹴りだせるようにしている箇所でボールを蹴ろうとする方向とその大きさを計算して、 それをボールを蹴る関数に引数として渡すようにしようと思ったところで終了。 いろいろあってなかなか進まない…orz http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/343
344: SGGK ◆6pZCoAtaxk [sage] 2012/02/27(月) 23:06:42.46 ID:7NsJmhpt >>341の >22人の選手が一つの変数を共有して、ボールに当たった選手はその変数を自分のIDに書き換えて のプログラムを書き、コンパイラが通るところまで出来た。 ドリブルの関数をどうするかについてまだちょっとはっきりしてない感じ。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/344
345: SGGK ◆6pZCoAtaxk [sage] 2012/02/28(火) 23:55:54.65 ID:3O5AYFZZ >>341の >移動処理にきたときにその共有変数を見て、自分のIDと一致した場合、移動関数をドリブル関数にする。 のプログラムを書いた。 選手の移動関数の目標座標がいままではマウスカーソルだったのを選手がボールにタッチした時に目標をボール座標に切り替わるようにしただけ。 ある程度の距離分ボールを蹴りだす処理を書いていないので、ボールにタッチすると同時に選手の動きがその位置で止まってしまう。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/345
346: SGGK ◆6pZCoAtaxk [sage] 2012/03/03(土) 22:58:58.76 ID:7buMobyS しかし、良く見ると自分の選手がボールにタッチする前から選手全員がボールに向かおうとしてることに気付く。 移動出来る選手は自分が動かす1人だけだけで他選手は足元から移動方向に短い線を引くようにしていたので気付いた。 原因はボールにタッチした場合にボールに向かい、タッチしてない場にマウスカーソルに向かうのを 反対にプログラムしていたから。 次は、それでもボールが蹴れない問題。 it=(*listfp).begin(); while(it!=(*listfp).end()){ 押してるキーで移動関数(歩く・走る)を切り替える } ++it; } この1行を忘れてた → it=(*listfp).begin(); while(it!=(*listfp).end()){ ボールにタッチすると判定用変数を選手IDに上書きして、選手の移動目標をボールにして、ボールを蹴る。 } ++it; } しかし、ボールの動きが良くない。 最初は選手がボールを押してるような感じでずるずる動いたかと思うと 次の瞬間、勢いよく蹴ってしまう。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/346
347: SGGK ◆6pZCoAtaxk [sage] 2012/03/11(日) 13:42:44.02 ID:Ow6aUl7a ボールが当たり判定に入り、計算されたボール速度がまだ遅いために当たり判定からボールが出ないことによって 速度がどんどん加算されてしまい、当たり判定から出れる速度になる時には大きな速度になっている…などという想像をしてみたが、 確かめる方法が思いつかなかった。 今のプログラムはボールをキックやドリブルするときには、その瞬間のボールの速度に キックやドリブルの速度を合計するやり方だが、これをやめて、キックやドリブルの瞬間、 つまり当たり判定に触れた時にボールの速度を0にしてからキックやドリブルで設定していた速度で 蹴るようにしたら上手く動いた。 これだと神がかりなトラップになるけど、ゲームなのでとりあえず今はこれでよしとした。 でも、選手にボールがぶつかった時のはねかえり表現ができなくなるので、いつかプログラムを書き直す可能性もある。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/347
348: SGGK ◆6pZCoAtaxk [sage] 2012/03/11(日) 14:04:38.88 ID:Ow6aUl7a しばらくの間、進まなくなるかもしれないので、UP。 ttp://ux.getuploader.com/sggk/ のsggk028です。 例えば、shiftキーを押すと選手の移動方向が一定になるようにしてあるけど、 これをドリブル中にやるとドリブルを放棄して選手が一定方向に進んでしまう。 何か新要素をプログラムに加えるたびにあちこち不具合が出てしまい、直すのにものすごく時間がかかってしまう。 あちこちにif文を使ってるので難しい。 まだどちらかといえば初期の段階なのにこれだけ難しくなるということは 何かテクニックが必要なのかもしれないので、ちょっと調べてみるつもり。 以前このスレで紹介してもらったゲームAIプログラミングの最初の方だけ読んでみようと思うけど、 前読んだ時もあまりよくわからなかったので、もし駄目だったら、このUPがラストの可能性あり…orz http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/348
349: SGGK ◆6pZCoAtaxk [sage] 2012/04/15(日) 23:49:55.88 ID:vuiViXZE 一ヶ月少々経過。時間過ぎるの早すぎる。 読んでいる本の最初の方というのは、第2章だけの44ページ程度のこと。 たぶん8回ぐらいは読んだと思うが、前半がぼんやりと解ったような気持ちになるだけで、後半はまだまだだな〜という感じ。 サンプルソースをダウンロードしておかないと分からない個所がところどころにあり、幸いダウンロードは出来た。 趣味なので諦めずできるときに少しずつゆっくりと…orz http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/349
350: SGGK ◆6pZCoAtaxk [sage] 2012/05/07(月) 22:02:50.51 ID:Q0zXyG9A http://ux.getuploader.com/sggk/index/1/date/desc に>>348でUPしたSGGK028のクラス図をUP。(正確さに自信は無いけど、ソースを読む参考用) また1カ月経過しようとしている。 >>349の後、同じ個所を2回読み、合計10回程度は読んだはずなのに駄目そうな感じ。 でも、そう言いつつもさらにもう少し頑張れば分かるかもという気も何故かしている。 ここは気持ちを切り替えて、いったん今やれそうな範囲で進めてみようと思う。 クラス図のUPはその気持ちの表れ。 今、改めてソースを見ると、soccergame.cppの中の処理で 選手のメンバ変数 m_MouseTargetが shiftキーを押したらfalse 、 押さなければ true になるようにし、選手移動関数では、m_MouseTargetを見て、 falseならば、その時点の選手移動方向をマウスカーソルに向かって更新しないことで一定方向に進み、 その間はフリーになったマウスカーソルに向かってボールを蹴れるようにしてある。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/350
351: SGGK ◆6pZCoAtaxk [sage] 2012/05/07(月) 22:11:35.39 ID:Q0zXyG9A そこで考えたのは、 1.ボールの移動目標、 2.選手の移動目標 という2つの変数を用意し、これを状態を表す変数だと考える。 ボールや選手の移動関数はこの2つの中身を見て移動先を知るようにプログラムをもっとわかりやすく書けるのではと思った。 そのための次の作業は、ボールの移動目標、選手の移動目標の状態遷移図を書くこと。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/351
352: SGGK ◆6pZCoAtaxk [sage] 2012/05/07(月) 22:32:50.84 ID:Q0zXyG9A 説明不足だったかもしれないので…、 >>350のプログラムの場合、ある場所でフラグをセットして、 そのフラグを別な場所のif文で利用して処理を進めるやり方になり、 これは後々ソースが分かりにくくなるような気がしたので、>>351のようにしてみようと思ったという事。 >>350のリンクで最初のhを取り忘れてしまった。 もしかすると直接クリックしてもアプロダのページにいかないかもしれないので、 アドレスをコピペすればページが見れると思います。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/352
353: SGGK ◆6pZCoAtaxk [sage] 2012/06/12(火) 23:21:21.15 ID:LaJwmlYj 生存報告。なかなか作業進まず。 選手の移動目標の状態遷移図は書いてみた。 この遷移を本で見たステートデザインパターンを使ってFieldPlayerクラスの中に実装できないかを思い、 FieldPlayerクラスがPlayerDataクラスを継承しているところにPlayerDataクラスがBaseGameEntityクラスを継承、 つまり継承の継承のように3段階にしたら、 「 クラス、構造体、共用体に既定のコンストラクタがありません 」というエラーが出た。 とりあえず、デフォルトコンストラクタを書いてないクラスがあったので書いてみたらコンパイラを通ったけど、 選手が真っ直ぐ動くだけでマウスについて行かなくなった。そろそろ限界かもしれない…。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/353
354: 名前は開発中のものです。 [sage] 2012/06/15(金) 22:27:24.54 ID:PTxBNQ6c ちょっと難しくやろうとしすぎてるのでは? BetterCな感じで関数型な組み方してとりあえず完成に持っていった方がモチベ維持できるかも 見たところオブジェクト指向に移行しきれてないみたいな感じもあるから継承とか使ってても余計ややこしくなってるだけかも http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/354
355: 名前は開発中のものです。 [sage] 2012/06/16(土) 18:28:14.57 ID:44+Yj3Br 影ながら応援していたけど 初めから難しい物を作りすぎてるって感じがするなぁ 今までの経験を生かして新たに1から出来るだけシンプルに ファミコンレベルのサッカーとして動くものを作ってみて それを改造していく方がいいんじゃないかなと http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/355
356: SGGK ◆6pZCoAtaxk [sage] 2012/06/16(土) 20:50:48.24 ID:281LS4tC >>354,>>355 アドバイス、ありがとうございます! 1人でやってると気付かなくて、言われてみると確かにそうだな〜と思える…、ような感じです。 数年やってもこんな状況なんだから、きっとこの先も完成は難しい。 まずは第一段階として、今までの経験上作業に詰まる原因になりやすかったところ、 例えば、継承やコンテナ、デザインパターンを無くすか減らす事を考え、 クラスの組み方も見直して、選手の可能な操作も減らして、それでも先に進めそうになかったら、 第二段階として、さらに簡略化して1から組み直していこうと思います。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/356
357: SGGK ◆6pZCoAtaxk [sage] 2012/06/16(土) 23:58:57.88 ID:281LS4tC >>353でやろうとしていたステートパターンを中止。 FieldPlayerクラスがPlayerDataクラスを継承していたのをやめて、FieldPlayerクラスに一体化した。 そして選手移動関数の切り替えに使っていたストラテジーパターンの処理も外して、速度一定で歩く関数ひとつにした。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/357
358: SGGK ◆6pZCoAtaxk [sage] 2012/06/18(月) 23:32:07.93 ID:kpasVy0J Application基底クラスとSoccerGame継承クラスの継承関係もなくして、 SoccerGameクラスに統一。基底クラスの変数があちこちで使われてて、直すのに苦労した。 SoccerGameクラスは印刷するとA4、10ページの分量なので、頭の中を整理中。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/358
359: SGGK ◆6pZCoAtaxk [sage] 2012/06/19(火) 23:44:58.47 ID:M4sPlsXK SoccerGameクラスのソースが長すぎるので、GameTitleクラス、GamePlayクラス、GameOverクラスを作り、 SoccerGameクラスのソースをこの3つのクラスに振り分けてみた。 この3つのクラスをSoccerGameクラスの中でオブジェクト化すればなんとか出来るかもしれないので、試すつもり。 失敗してもこの直前まではバックアップあるので戻れるから大丈夫w http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/359
360: 名前は開発中のものです。 [sage] 2012/06/20(水) 21:56:07.67 ID:trY5wmki 最初から作り直した方が早いかもね http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/360
361: SGGK ◆6pZCoAtaxk [sage] 2012/06/20(水) 23:15:46.22 ID:/B/K6MdL >>360 >>356では2段階でやるような気持ちでいたけど、いざやってみると、 クラスのつながりの一番根っこを分解したので結局全部書き直し同然の状態です。(汗) とりあえず、スタート画面を出す為に、関係ないヘッダファイルやcppファイルはコンパイラから外して作業中…orz http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/361
362: SGGK ◆6pZCoAtaxk [sage] 2012/06/21(木) 23:49:12.39 ID:ArXkgTjY デザインパターン使わないと言ったけど、ちょっとだけ試してみたかった。 本に書いてたステートパターンの中で最初の1番簡単な例を使ってスタート画面を出せた。 でも実はバグの行を//付けて注釈行化して強引に表示させただけなのでまだなんとも言えない。 残りのゲームプレイとゲーム終了画面表示の遷移が出来なければswitch文使った方法に戻る。 あまり時間が無いのでゆっくり作業…。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/362
363: SGGK ◆6pZCoAtaxk [sage] 2012/06/26(火) 23:26:56.00 ID:qwjvXfmc スタート画面とゲームオーバー画面をキー押しで表示切り替えできた。 ステートパターンの1番簡単な例と言いながらも苦戦した。 以前苦しんだ相互参照、前方宣言が関係してくるパターンだった。 本はその部分は知ってる前提で書いてあるので説明が無かった…orz ネットも調べて知識を得てから考えた実装が動かず、結局試行錯誤で インクルードと前方宣言を入れたり消したりして奇跡的に運よく動いた感じ。 せっかく書いたので、もし問題なく動くならこの部分だけはそのままにしておいて、 またバグ出たら、ifかswitchでやるしかない…orz これ以降、遷移をさせたい処理が出てきたら、それはもちろんifかswitchでやるつもり(苦笑) 数年続けてきて自分には無理だという事がやっとわかった感じ。 やらないで諦めるよりは、やってみて気付いたんだから、よしとしよう! とりあえずはファミコンサッカーを目標にしよう!(これすら出来るか怪しいかもしれない…) 空き時間ができたら作業を少しでも続ける気はあるので、がんばろう〜!…orz http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/363
364: SGGK ◆6pZCoAtaxk [sage] 2012/06/27(水) 22:59:33.76 ID:1q/ptGIo 昨日のプログラムを少し変えた。 1つの状態について1ヘッダーファイル、1cppファイルというのはファイル数が多すぎて分かりずらいのでやめて、 複数の状態を1ヘッダーファイル、1cppファイルにまとめた。 ステートパターンの参考にした本、オライリーのゲームAIプログラミングもそうなっていたし…。 一応、インクルードファイルや前方宣言も本に合わせてみた。 しかし、1か所だけSoccerGameクラスのヘッダーファイルのコンストラクタの行でエラーが出た。 コンストラクタだけ実装(というか定義?)がヘッダーに書いてあったので、 この定義部分だけをcppファイルに移したらコンパイル出来た。 とりあえず、この書き方で進めよう。 タイトル、ゲームオーバー画面が出せたので、次はメインのゲーム部分を書く予定。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/364
365: 名前は開発中のものです。 [sage] 2012/06/28(木) 21:49:03.02 ID:ckB52e4z SGGK氏には「まとめサイト」を作ることを提案します。 これまでに考えて行ってきたことと、それに対するコメントを対応付けると、 現在のご自身のポテンシャルが見えてくると思います。 また、まとめサイトを持っていたほうが、建設的なコメントが得られるように なると思いますよ。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/365
366: SGGK ◆6pZCoAtaxk [sage] 2012/06/29(金) 00:19:39.71 ID:0PUJkiiN >>365 な…なるほど!、ありがとうございます。 ゲームが完成するか自信がないため、まとめサイトについては考えてませんでした。 去年9月頃に受けたアドバイスの後半から追いつけなくなってしまってたので、 そういうのもまとめられたらと思います。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/366
367: SGGK ◆6pZCoAtaxk [sage] 2012/06/29(金) 00:20:46.65 ID:0PUJkiiN ホームページは初めてだけど、頑張ってみます。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/367
368: SGGK ◆6pZCoAtaxk [sage] 2012/07/09(月) 00:12:38.91 ID:wFKWfjV1 できるだけ簡略化した状態で作ろうと思い、 今まで使っていたフリー素材はやめて(ラインの座標が正確にわかっていたわけでは無かったから)、 フィールドは緑の板一枚にして、ゴールの絵は無し、ラインを毎ループプログラムで書き、 そのラインも外枠だけにすることを考えた。 緑色のポリゴンの板をとりあえず作成したが、メタセコイアの使い方をすっかり忘れてて苦労した。 今度はこれを画面に表示しようとしたら画面が真っ黒。 フィールドを原点(0,0,0)において、カメラは(0,100、0)で(0,0,0)注視にしたから見えるはずなのに…。 ふと、カメラ座標を(100、100、0)にしてみたら一部が見えた。一応データは読めてるようだ。 メタセコイアで作った時の座標系やDXライブラリの座標系についていろいろ忘れてしまってるようだ…orz ホームページは作業始めるまでにはかなり時間かかりそうだけど、あきらめずにやるつもり。 FC2で練習する計画。一応グーグルにホームページの登録はしてみた。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/368
369: SGGK ◆6pZCoAtaxk [sage] 2012/07/09(月) 23:59:59.89 ID:1ssCdaiG 3Dで真上から見れば2Dになるかなという考えがあったから昨日のような事をしてたんだけど、 いろいろ悩んだ結果、2Dに戻ってやり直してみようと思った。 3Dについては、今までいろいろアドバイスもらっているのに止めるのはなんだか申し訳ない気持ちもあるけど、 今年の8月末で5年経つはずだし、まずは形に出来る可能性が少しでも高い方法を選ぼうと思う。 3Dでいろいろ学んだり考えたりした経験もきっと役立つだろうし…。 当時作った2Dスクロールはがくがく振動してたけど、それでも良しとするつもり。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/369
370: SGGK ◆6pZCoAtaxk [sage] 2012/07/15(日) 22:56:50.87 ID:UGezkUv1 フィールドの画像データ作成に時間がかかってしまった。 最初はファミコンサッカーのフィールドを意識して奥行を考慮したフィールドにしようと思ったが、これはやめた。 真上から見たフィールドにしたが、ドット絵なので、例えばある点と点を結ぶ直線の太さを4ドットにした時、 どのように書けば良いのかといった事にまで悩んでしまい、一度書きあげたが、なんとなく1〜2ドットずれてるような気がした。 そこで思いついたのが、真上からの絵なのだから1/4だけ書いて、これを3枚コピーして上下左右反転してから結合するというやり方。 幸いそのような機能がついていたので、ようやくフィールドの絵が完成した。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/370
メモ帳
(0/65535文字)
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
あと 117 レスあります
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.015s