1人でゲームが作れるように修行します。2 (487レス)
1人でゲームが作れるように修行します。2 http://mevius.5ch.net/test/read.cgi/gamedev/1272901469/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
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と名前を同じにしても このままでは中身が別物なはずなので、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
メモ帳
(0/65535文字)
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
あと 398 レスあります
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.022s