1人でゲームが作れるように修行します。2 (487レス)
1人でゲームが作れるように修行します。2 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
60: 名前は開発中のものです。 [sage] 2010/07/25(日) 20:13:54 ID:bN26srjK >>59 >>52 インクルードガード関係ない可能性が高い http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/60
61: SGGK ◆6pZCoAtaxk [sage] 2010/07/26(月) 22:44:04 ID:HmEvw+7E >>57>>58>>59>>60 たぶんまだ正解ではないんだろうなという雰囲気が伝わってきたので、再考。 まず、>>58氏の#pragma onceを試して、もう一度soccergame.hをfieldplayercontrol.hにインクルードしてみたがやはり同じバグが発生。 でも、#pragma onceなら1行で、しかも同じ書き方でインクルードガードできるから便利。(感謝!、絞り込みも活用します。) 次に昨日書いた循環参照について。 soccergame.hをfieldplayercontrol.hにインクルードした
時、soccergame.hの中では、FieldPlayerControlクラス型の実体を定義してるけど、 fieldplayercontrol.hの中でSoccerGameクラス型の実体を定義してはいないから、循環参照ではなかったかもしれないという気がしてきた。 お互いをインクルードしあってるだけでは循環参照に必ずしもなるとはいえないかもしれない。自信はないけど。 そこで、soccergame.hをfieldplayercontrol.hにインクルードした時のfieldplayercontrol.hの中身はどうなっているのかソースにして追いかけてみようとふと思った。 ひとつ気になった。 soccergame.hはその中で#include"fi
eldplayercontrol.h" してるので、soccergame.hをfieldplayercontrol.hにインクルードしたら、 fieldplayercontrol.h の中で #include"fieldplayercontrol.h"されるのだろうか? なぜなら、もともとのfieldplayercontrol.hは、#include"fieldplayercontrol.h"なんてしてないから、インクルードガードされないんじゃないかなと思ったので。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/61
62: SGGK ◆6pZCoAtaxk [sage] 2010/07/26(月) 23:01:02 ID:HmEvw+7E そこで、「ヘッダファイルに同じヘッダファイルをインクルードできるか」のようなキーワードで何度か検索。 「ヘッダファイルは、自分とは別のヘッダファイルを #include でインクルードできるので、(略)」 という記述があったので、 それ前提でソースをエクセルに張って考えてみたら、自分としては今までで一番正解に近そうな答えが出た。 soccergame.hをfieldplayercontrol.hにインクルードしたときにsoccergame.hの中にある#include"fieldplayercontrol.h"がキャンセルさ
れていたら、 soccergame.hからインクルードした部分の処理を進めているときは、まだFieldPlayerControlクラス型が宣言されてないから、 soccergame.hからインクルードした部分にFieldPlayerControl fieldplayercnt; と書いても、 「error C2146: 構文エラー : ';' が、識別子 'fieldplayercnt' の前に必要です。」 というエラーが出る…というのが答えかもしれない。 一応、エクセル→jpgでうp ttp://gamdev4.hp.infoseek.co.jp/cgi-bin/up/No_0129.jpg http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/62
63: STG [sage] 2010/07/28(水) 04:37:11 ID:ttdS5Bl4 3Dの勉強が楽しい 忘れていたわくわく感があふれてくるっ 知らない用語がどんどん出てくるこの冒険感っ 練習ソフトクリーム http://www.dotup.org/uploda/www.dotup.org1057678.jpg http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/63
64: SGGK ◆6pZCoAtaxk [sage] 2010/07/28(水) 23:06:54 ID:6+SmVQnU 3D、色々な事が出来そうですね。 自分もサッカーゲームの3D化を目指して開発を急ぎたいです。 >>51の課題に挑戦。 ソースはまだ書いてないけど、選手クラスにライフ値を記録するためのメンバ変数を追加して、 選手の描画関数を実行するときに選手の座標を基準にDXライブラリの四角形描画関数を2回使重ね書きして実現できないかなと脳内設計。 ライフ値をソースのどこでどのくらい減らせばいいのかを検討中。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901
469/64
65: SGGK ◆6pZCoAtaxk [sage] 2010/08/03(火) 22:32:31 ID:nPEW7e3n >>51の課題が終了。 ライフ値は、各選手が移動関数を実行した直後に少しずつ減らすようにしておき、 「 現時点のライフ値/最大ライフ値xライフゲージ最大長さ 」を計算して長方形をその長さで描画する。 減り具合は完全ではないけど、今は調整する予定なし。 次の目標 ●共通(ゴールキーパー以外) (実装済)歩く Z+マウス操作 1 走る X+マウス操作 2 進行方向固定 Shiftキー 3 特殊技術(ボールが頭上ならヘディング、足元ならダイ
ビングヘッド) Spaceバー ●ボールキープ時 4 ジャンプ(タックル避けにもなる) C 5 ロングパス 左クリック 6 ショートパス 右クリック 7 シュート 左右同時クリック 8 パス/シュートは,押す長さで強さを調整 ●非ボールキープ時 9 タックル 左クリック 10 カット 右クリック これらの内6個でも実装できれば上出来と考えて挑戦する予定。 期限を決めてやるのは無理そうな感じ…orz http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/65
66: STG [sage] 2010/08/28(土) 03:50:26 ID:gP4FgSvi そして誰もいなくなった Blenderの仕様でいろいろ不都合が出てきたのでメタセコイアにのりかえ中 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/66
67: SGGK ◆6pZCoAtaxk [sage] 2010/08/29(日) 22:43:31 ID:HGm0TpTI >>66 アクセス規制が続いていて、実は現在も書き込めない状態でご無沙汰してました。 メタセコイアはフリー版あるらしいので、ドットが不得意な自分もいつかは触ってみたいソフトです。 3〜4週間の2chアクセス規制が頻繁にあり過ぎて製作活動ペースが落ちてくるので(言い訳)、 運営の思う壷かもしれないけど、試しにp2とやらで今日から1年間だけ書き込めるようにしてみた。 肝心の進捗の方は思わしくなく、>65の目標をみると、今のゲーム画面は視点がお
かしいので悩む。 フィールドは真上から見てるのに、選手は真横から見た絵になっている。 蹴ったボールをいずれは曲線を描くようにしたいけど、この画面ではそれを表現するのが難しい事に気づく。 そしてボールの座標は(x,y)だけでは足りなくて(x、y、z)にしておかなければな後々不便な事になるような気がしてきた。 これはベクトルの表現を取り入れたプログラムに書き直しておいた方がいいかなと思い始めたところ、 偶然手元に「14歳からはじめるわくわくC言語プログラミング教室VS2008編」という本があり、 運よくこれの第3章
がベクトルの説明をしていたので、読んでみることにした。 もう少しで読み終わるけど、解り辛い…。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/67
68: SGGK ◆6pZCoAtaxk [sage] 2010/08/30(月) 23:32:27 ID:0WWGfdkP 昨日の書き込みを見て、思う壺という言い方が紛らわしい表現になりそうなので消したくなってきた。(赤面) 書き込み規制の原因は荒らしをする人にあるわけだから。 とりあえず3章だけを読み終えた。 明日も時間が出来ればベクトルを取り入れたプログラムに書きなおしてみる予定。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/68
69: SGGK ◆6pZCoAtaxk [sage] 2010/08/31(火) 23:49:31 ID:5x9cPfBx ソースをコピーして数字を一個上げた名前に変更してから作業を始めようとしたけど早速悩む。 参考にした本はCで書いてるので、C++でオブジェクトを複数種類作っているようなプログラムにどうすれば使えるか思いつかない。 とりあえず、「C++、移動、クラス、ベクトル」で検索してみたけど、いまひとつ。 C++には、例えば ベクトル+ベクトルの結果がベクトルになるような意味を持てるように + の意味を定義しなおす機能があるようなので、これかなと思ったけど、
あまりにも内容が難しいので、諦める。 次に考えたのは、例えば vector3.h のような名前でヘッダーファイルを作り、その中に struct Vector3{ float x,y; //とりあえずz無し }; と書いておいて、ベクトルの必要なクラスの定義があるヘッダーファイルに #include "vector3.h" すれば外部の関数扱いになってすべてのクラスから使えるんじゃないかなと思った。 確認のために#include "vector3.h"したあるクラスの定義の中で、 Vector3 POSITION_XY={1,1}; としてみたらエラーになるので真っ青になる。(他にもう方法が思いつかないから) しかし、
Vector3 POSITION_XY; と書き直したら、コンパイラが通った。 クラスの定義の中では初期値を書けないのをすっかり忘れていた。 思い出せたのは運が良かった。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/69
70: SGGK ◆6pZCoAtaxk [sage] 2010/09/02(木) 23:42:53 ID:N3a4x6pe とりあえずベクトル関係の変数と関数を宣言したヘッダーファイル、vector3.hと それらの変数や関数を定義したファイル、vector3.cppを作成してみた。 とは言うものの、中身は変数を3つ持つ構造体とその構造体の型を持つ変数を引数にもつ関数で 関数は、 ベクトル=ベクトル+ベクトル 微小時間後の位置を示すベクトル=現在の位置を示すベクトル+微小時間xその時点での速度を表すベクトル の2式だけ。 この微小時間がいわゆるフレームタイムであり、今までのプログラムだと
メインループ関数の中で、DXライブラリのScreenFlip()関数を30回ループしてその平均を フレームタイムとしてる。ScreenFlip()関数は画面のリフレッシュレートとやらと同期して動くらしいので そういうやり方でフレームタイムが計算できるらしい。 でも、これだとメインループ関数の外側で宣言・定義されてる微小時間後の位置を示すベクトルを計算するための 関数に必要な微小時間(フレームタイム)が読み取れないと予想。 とりあえず、30回ループする部分を関数にして、vector3.h、vector3.cppで宣言・定義して、 その30回ループする部分を
関数にしたのをメインループで呼び出してなんとかできないかと思ったところで終了。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/70
71: 名前は開発中のものです。 [sage] 2010/09/04(土) 10:45:00 ID:BWH+wHQ4 >>69 > + の意味を定義しなおす機能があるようなので、これかなと思ったけど、あまりにも内容が難しいので、諦める。 class Vector3{ public: float x; Vector3(){} Vector3(float x_) : x(x_){} Vector3 operator+(Vector3 &obj){ return Vector3(x + obj.x); } }; class A{ public: A(float x) : vec(x){} Vector3 vec; }; void main(){ A a(1),b(2); a.vec = a.vec + b.vec; cout << a.vec.x << endl; } こういう事? operator+はその性質
上、returnで新しいクラスを作る必要があるから処理速度の面で微妙 俺だったら使わない http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/71
72: SGGK ◆6pZCoAtaxk [sage] 2010/09/05(日) 00:15:21 ID:t7yjfHHg >>71 す…凄いです。そうです!そのoperatorがなんとかというそれでした。 まだ自分は答えを見ても何がわからないかもわからない初心レベルですが感謝します。 処理速度が微妙であるとのコメントを参考にして、なんとか>70のやり方(C言語風?)でやれるよう頑張ってみます。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/72
73: SGGK ◆6pZCoAtaxk [sage] 2010/09/05(日) 23:38:53 ID:glSoiJ6G >>70の下から4行に書いたやり方は諦める事にした。 vector3.hにfloat frametime=0;と書いてコンパイルすると frametimeは既に定義されてると言う内容のエラーが続々発生。 これは、vector3.hがいろんなcppファイルのヘッダーファイルにインクルードされてるからだろうと予想。 float frametime;と書き直しても同じ結果。初期化の有無は関係なかった様子。 vector3.hの中でfloat frametime;と書いておき、他のcppファイルでframetimeを使いたい場合には、 そのcppファイル
のヘッダーファイルでなく、cppファイルの上の方の行でextern float frametime;と書いたら直った。 たぶんこれでframetimeは外部変数扱いになってどこからでも使える変数になったかなと思うけど、 ベクトル計算の関数定義の中で使おうと考えているframetimeの値が外部変数として渡すやり方だと なんとなく後々の問題になりそうなので、ベクトル計算用関数の引数を増やして、その引数に値経由でframetimeを渡せないかと考えて終了。 そして、frametimeの外部変数化も中止。(あまり進まず。) http://mevius.5ch.net/test/read.cgi/gamedev/1272901469
/73
74: 名前は開発中のものです。 [sage] 2010/09/06(月) 06:18:19 ID:WWj0DWld ・Vector3.hのクラス定義内にて、 static float frametime; ・適当なcppにて、float Vector3::frametime=初期値; ということがしたいのかな? http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/74
75: SGGK ◆6pZCoAtaxk [sage] 2010/09/06(月) 23:10:19 ID:5jVgy4R8 >>74 その通りです。 ただVector3.hでは、クラスの宣言や定義はしていなくて、ベクトルを表す構造体などを引数にしてベクトルを表す構造体をreturnする関数を宣言するのみ。 そうすればベクトル関係の関数は外部関数になってどのcppファイルからでも使えるかなというのを期待して書いてます。 そしてVector3.cppでその関数の定義をしようとすると関数内のframetimeという変数がメインループで計算するframetimeと名前を同じにしても このままでは中身が別物なはずなので、V
ector3.hかframetimeを使うcppファイルのどこかで1度だけ frametimeを定義して、他の残りについては、extern float frametime;とすれば動きそうだと思ったわけです。 externにしたのは、cppファイルが複数あるからstaticよりこちらがいいかなと思っただけであまり自信無し。 「extern static 違い C言語」で検索するとろいろ出てきて読むと自信無くなってきたけど なんとかトライしてみます。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/75
76: SGGK ◆6pZCoAtaxk [sage] 2010/09/07(火) 23:20:38 ID:qyxrqbqY いままでのプログラムをベクトルを表す構造体で表現する変更作業の開始。 とりえあず先にヘッダーファイルだけを変更する予定。 しかし、ヘッダーファイルを変えただけでコンパイルすればcppファイルの方でエラーが出るはずなので、 ヘッダーファイルを全部コピーしてファイル名の前の方にv_を付けてファイル名を変えた方で変更作業する。 そうすれば、cppファイルと矛盾してエラーが出るという状態を避けられるはず。 そしてヘッダーファイルの変更が終われば、古いヘッダーファ
イルを削除して、新しいヘッダーファイルのファイル名からv_を取り除いて、 今度はcppファイルを直す。 変なやり方かもしれないけど、やってみる。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/76
77: SGGK ◆6pZCoAtaxk [sage] 2010/09/08(水) 23:42:12 ID:2FQaVedh ヘッダファイルを4個書き直した。 あと12個残ってる。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/77
78: SGGK ◆6pZCoAtaxk [sage] 2010/09/09(木) 23:34:11 ID:u4JUxGaq 今日も4個しか出来なかった。 cppファイルを直す時に泥沼状態になる事を予想して、 変更箇所を表計算ソフト(エクセルのこと)にメモしながら進めてるから作業が遅いのかもしれない。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/78
79: SGGK ◆6pZCoAtaxk [sage] 2010/09/12(日) 23:34:04 ID:zuikLtmE ヘッダファイルあと残り1つ。 これは選手の移動関数を定義してるファイルだけど、気になる箇所があった。 今のプログラムは、どのような速度のパソコンでも60Hzで1フレーム時間あたりの移動量を1〜20ドットにしたい場合の移動量を 20個の配列を用意して入れてるんだけど、これが外部の移動関数から読めてる。 …というのは知ってたけどそういえばextern使ってないのに何故だろうと思い、14歳わくわくC++を調べてみると、 メンバ関数やメンバ変数にstaticを
付けるとグローバルな関数、変数扱いに出来るとのこと。 そして呼び出すときには、クラス名::変数または関数とすればよいらしい。 さらに変数の場合は、外部に実体の定義が必要。 忘れてた…。 これは>>74氏のそのままでOKではないか〜!ということでextern無しで書くことにした。 よって>>73で言ってた >ベクトル計算用関数の引数を増やして、その引数に値経由でframetimeを渡せないかと も中止。 とりあえず、最後に残ったヘッダファイルにある移動関数の一つを書き直してコンパイルしてみたら通った。 移動関数はあと3つ残
ってる。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/79
メモ帳
(0/65535文字)
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
あと 408 レスあります
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.018s