1人でゲームが作れるように修行します。2 (487レス)
1人でゲームが作れるように修行します。2 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
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と名前を同じにしても このままでは中身が別物なはずなので、Vector3.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
80: SGGK ◆6pZCoAtaxk [sage] 2010/09/13(月) 22:59:37 ID:621XmSry ヘッダファイルの書き直しが完了。 何もヘッダファイルを読み込んでないヘッダファイルを先に直して、 ヘッダファイルの読み込みの少ないヘッダファイルを先に直すような順番で書き直していったからかどうかはわからないけど、 あまりバグが出なかった。次はcppファイルの書き直しに挑戦。たぶんもっと時間がかかるはず。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/80
81: SGGK ◆6pZCoAtaxk [sage] 2010/09/14(火) 22:23:51 ID:8SPHlgRS とりあえず修正対象にするcppファイルを1つ選び、 そのcppファイルがインクルードしてるヘッダファイルのファイル名の頭に付けてたv_(←修正中のヘッダファイルに付けてたやつ)をはずして、 そのままでは古いヘッダファイルと同じ名前になってしまうので、先に古いヘッダファイルは別のフォルダに移動しておく。 そしてコンパイルしてみる。 一個ずつ直してみたがバグがなかなか減らないし、ヘッダファイルもコンパイルの画面に新旧入り混じっている状態では かえってややこしくなってくる。 cppファイルも一個ずつ順番に直してバグが無くなったら次に…と思っていたが、 うまく説明できないが、そうはならないはずとの考えに至る。 cppファイル単位できれいに独立してるわけではなくて、あるcppファイルのオブジェクトが呼ぶオブジェクトは別のcppファイルで定義されてて そこからまた他のところへ…、するとそのcppファイルでインクルードしてるヘッダファイルも直した方のヘッダファイルに入れ替えなければならない。 結局、全部のヘッダファイルを新しい方だけ残して全部一気にコンパイルしてしまった。 エラーの総数が今現在349個。 ヘッダファイルの修正箇所をエクセルにメモする作業が無駄になってしまったかもしれない。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/81
82: SGGK ◆6pZCoAtaxk [sage] 2010/09/15(水) 22:31:31 ID:/g+buLkb 昨日は一気に全部まとめてコンパイルしたけど、描画関係をまとめたcppファイルはその時点で修正済。 そうした上でのバグ349個。 その後の修正で何故かバグが358個まで増えたけど、なんとかして344個に減ったところで終了。(今日はちょっと疲労気味なので…) http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/82
83: 名前は開発中のものです。 [sage] 2010/09/16(木) 03:09:59 ID:OhUUY93b コツコツ頑張ってて偉いなぁ…本気で尊敬する。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/83
84: STG [sage] 2010/09/16(木) 03:35:20 ID:YtfF1rT+ 俺はずっとモデリング勉強&練習… http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/84
85: 名前は開発中のものです。 [sage] 2010/09/16(木) 03:50:06 ID:OhUUY93b >>84 ガンガレ超ガンガレ 俺もそろそろ頑張ってみるか… http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/85
86: SGGK ◆6pZCoAtaxk [sage] 2010/09/16(木) 23:40:48 ID:62n4CZRN >>83 自分はこの板のおかげでゲーム作りへの挑戦は約3年1ヶ月程続いているけど、あまり進んでいないかもしれません。が…頑張ります!。 >>84>>85 お互い頑張りましょ〜!期待してます。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/86
87: SGGK ◆6pZCoAtaxk [sage] 2010/09/17(金) 00:11:53 ID:iwt7bbkw ベクトルの構造体を宣言・定義したから、ボールや選手などのオブジェクトの 座標その他のメンバ変数を初期化するときには、例えば初期化関数の内部で オブジェクト.x=848; オブジェクト.y=544; オブジェクト.z=0; としていたのを オブジェクト.構造体変数名 = {848、544、0}; にできるのではと期待して書いてみるとエラーになる。 略)\source\ballcontrol.cpp(45) : error C2059: 構文エラー : '{' 略)\source\ballcontrol.cpp(45) : error C2143: 構文エラー : ';' が '{' の前にありません。 略)\source\ballcontrol.cpp(45) : error C2143: 構文エラー : ';' が '}' の前にありません。 これと同じようなエラーをクラスのオブジェクトでやった経験を思い出し、 オブジェクト.構造体変数名.x=848; オブジェクト.構造体変数名.y=544; オブジェクト.構造体変数名.z=0; と書いたらエラーは出なくなった。 これだけならまだしも関数の引数にも構造体を使おうとしているので、 これもエラーになったらどうしようかと思いつつ、動作している事を優先して作業を進め、 現在のバグは274個。 ネットで調べると自分では構造体を書いたつもりでいても、Cの構造体とC++の構造体には違いがあるらしくて、 自分が見たサイトの説明によれば、 実は、構造体はメンバがデフォルトで公開されているクラスである。 つまり、 "stuct X{" = "class X{ public :" となる。クラスと構造体の差異はそれだけである。 との事。 Cで書いたベクトルの記事を本で見て、それを今まで書いてたC++のソースに 使おうとしたから、自分の気付かない理由で上手くいってない感じ。 まずは今のままで進めてみて関数にベクトル構造体を引数にしたところでも 問題が出るようなら、また考え直すつもり。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/87
88: 名前は開発中のものです。 [sage] 2010/09/17(金) 02:15:46 ID:zNJRouQ+ >>87 見方を変えると「Cの構造体に関数も書けるようにしたものがC++の構造体」とも言えると思う Cの構造体で出来ることはC++でもそっくりそのまま書けると思うんだけどね >自分の気付かない理由で上手くいってない感じ。 バグに関して絶対こうだとは言えないが、CとC++の違いが原因ではないような気がするなー http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/88
89: 名前は開発中のものです。 [sage] 2010/09/17(金) 22:28:19 ID:pd/LBTti >>87 x、y、zを初期化するコンストラクタを定義されていれば オブジェクト.構造体変数名 = クラス名(848,544,0); のような代入ができる。 もしくは、構造体変数をセットするメンバ関数を定義してもいいかも。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/89
90: 名前は開発中のものです。 [sage] 2010/09/17(金) 22:40:10 ID:pd/LBTti 上の補足 コンストラクタを定義していなければ、 オブジェクト.構造体変数名 = {848,544,0}; のような代入もできる。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/90
91: 名前は開発中のものです。 [sage] 2010/09/17(金) 23:57:56 ID:iQtTD6+I >>90 それは初期化時のみじゃない? struct vector{ int x,y,z; }; void main(){ vector a = { 1,2,3 }; //ok a = { 4,5,6 }; //エラー } http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/91
92: SGGK ◆6pZCoAtaxk [sage] 2010/09/18(土) 01:00:44 ID:wU0YURT9 ありがとうございます。今日は調べるだけで終了でした…。 >>88 たしかにバグの原因がCとC++の違いだと思い込んでしまうと他の原因の可能性を見落としやすくなりそうなので気をつけます。 >>89 今のソースではベクトル関係がクラスでなく構造体で表現されていてコンストラクタについてはまだ考えてませんでした。 バグが結局取り切れなかった場合、勉強しなおしてベクトル関係もクラス化する最終手段に挑戦してみようと思います。 >>90 コンストラクタの定義はしてないのですが、何故かエラーになってしまうので、 今は以下に書くとりあえず的なやり方でエラーを回避してます。 >>91 「構造体の初期化」で検索したところ、とあるサイトにそのような感じの 「構造体変数の初期化は、変数の宣言時には常に行うことが出来る点に注意しよう。」とあり、これを参考に以下のようにしてます。 ベクトル関係のヘッダファイルで struct Vector3{float x,y,z;}; あるオブジェクトの初期化用関数の内部では昨日のやり方から少し変更して、 Vector3 a1={848,544,0}; fp.xy(←これは昨日書いていたオブジェクト.構造体変数名の事)=a1; と書いてもバグが出ないのでこれでやってみようと思います。 今日は調べただけなので、バグは減ってないけど、全部取れるまで頑張ってみます。 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/92
メモ帳
(0/65535文字)
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
あと 395 レスあります
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.014s