1人でゲームが作れるように修行します。2 (487レス)
1-

120
(2): SGGK ◆6pZCoAtaxk 2010/11/01(月)00:11 ID:IY/H8hBE(1) AAS
>>119
こ…、これは気付きませんでした。ありがとうございます。
試しにサンプルで使えそうな部分をコピーしてプログラムソースに貼り付けてまさかのコンパイル。
これではおそらくバグが山積みだろうと思ったら、予想外に通った。画像の文字の意味についてはまだ理解出来てません。
サンプルでは、スクリーン上のマウス座標から直線が延びているイメージで、ワールド座標内のポリゴンに当たったらそこが黄色になるという内容だろうと解釈。
マウスを左上に持っていくとフィールドの左上が黄色、右下にもっていくと右下が黄色、フィールド外だと変化なし。
とにかく反応していることが確かめられたので、このサンプルコードを自分がやろうとしていることを実現できるように
省4
121
(1): 2010/11/04(木)00:20 ID:DIpes90k(1) AAS
カキコがなくて心配してたよー
122: SGGK ◆6pZCoAtaxk 2010/11/04(木)22:06 ID:vVAyUmeW(1) AAS
>>121
>118の本の学習がなかなか進まなかったため、ご無沙汰してしまいました。(汗;
ときどき停止するかもしれませんが頑張ります。

本の方は8章(〜144ページ)で一区切り。とりあえず8章まで読めればなんとかなりそうなので9章までの予定は中止。
14章も一部分だけ読んでみた。残りは必要なときが来たら挑戦するつもり。
>>116氏のをもう一度読んでみたところあともう少しでわかりそうな気がしてきたので、
あとはネット検索で投影変換行列を調べてみる予定。
123: SGGK ◆6pZCoAtaxk 2010/11/11(木)00:10 ID:OH7eCgI8(1) AAS
>>116氏のアドバイスについて今の自分に出来るところまで図示で理解しようとしてみたのでUP。
視野錘台がうまく斜めに書けていないとかいろいろあるけど、
この状態からさらに理解が進めばDXライブラリを使って自分なりの関数をどのように作ればよいのかがわかるかも…、
そんな時が来るかもしれないと期待してここでいったん区切ることにしてみます。(感謝!)

いつも使わせてもらってたアップローダがサービス停止のようなので、いろいろ探して以下のところにしてみた。
(アップローダを使ってるスレを探してたらNE○Tスレを偶然見てこのアップローダの存在を知った。)
他にお勧めのアップローダがあれば、柔軟に対応します。
省2
124
(2): 2010/11/11(木)00:28 ID:Jw3X6bp+(1) AAS
>>116 の Lは、
GetMousePoint( &Mx, &My ) ;
ConvScreenPosToWorldPos( VGet( Mx, My, 0.0f ) ) - E ;
で求まるんじゃないだろうか。

そこで詰まったんじゃないの?
125: SGGK ◆6pZCoAtaxk 2010/11/11(木)23:34 ID:jPJR3Unn(1) AAS
>>124
アドバイス、ありがとうございます。
今度は練習プログラムの修正で確認してみようと思っています。
>>119>>124の両方でやってみるつもり。
マウスが指し示すフィールド上の位置に何かオブジェクト(球体とか)を
表示出来れば上手くいったと考え、この前ベクトル化したプログラムの続きに入る予定。
126: SGGK ◆6pZCoAtaxk 2010/11/13(土)00:09 ID:2/KX1c8L(1) AAS
作業時間10分なので何も出来ず…。
とりあえず半径10の球体を(100,0,0)、(0,100,0)、(0,0,100)の順番に表示させてみた。
これによれば、X軸は左方向がプラス、Y軸は上方向がプラス、Z軸は手前方向がプラスになっていたので、
DXライブラリは左手座標系なんだな〜と思ったところで終了。
127
(1): 2010/11/13(土)16:02 ID:V7u6UtpM(1/2) AAS
カメラの向きによるでしょ
128
(1): 2010/11/13(土)16:11 ID:V7u6UtpM(2/2) AAS
あ、座標系か。ゴメン
129
(1): SGGK ◆6pZCoAtaxk 2010/11/15(月)06:53 ID:vSKd6IqB(1) AAS
>>127,128
X軸は右方向がプラスの方が確かに分かりやすいのでカメラの位置と向きは変えようと思います。
いろいろ理由があり作業が止まったりしていますが、まだ諦めてはいません。(仮眠しようとしたら朝になってしまったとか…)
今のモデルは、フィールドが511x341(何故この数字にしたか忘れてしまった…)でその中心が原点(0,0,0)、
カメラの位置は(0,340,340)でカメラの注視点が原点(0,0,0)になっています。
作業の前にやっぱり簡単な例を用意して自分で(手作業で)変換行列を考えてみるところまで
やってみた方がいいかもしれないと思い始めてきたので、その作業分だけ進捗が遅れる可能性ありです。
130: SGGK ◆6pZCoAtaxk 2010/11/16(火)00:25 ID:MqJY7qc7(1) AAS
今日はエクセルで準備的な作図を途中まで進めて終了。
書いた図が結局役に立たずに時間を無駄にする可能性もあるけどやってみる。
131
(1): SGGK ◆6pZCoAtaxk 2010/12/13(月)23:37 ID:X8dPGQWF(1) AAS
む…無駄になってしまった感じ。
図は書いてみたけど、座標変換について結局あまり理解出来てない事がわかった。
悩んだ結果、恥ずかしいほどに簡単な例を用意し、それを図にして考えてみた。
オブジェクト座標からワールド座標への変換はなんとなく分かったような気がしてきた。
カメラ座標への変換(ビュー変換?)については、オブジェクト座標からワールド座標への変換と同じやり方でたぶん出来るだろうということにして省略し、
今は透視変換について考えているところ。
132: SGGK ◆6pZCoAtaxk 2010/12/15(水)00:31 ID:KxIpLRHt(1) AAS
やっぱりやめることにした。
わずか一日で目標変更…。
昨日の続きをやるとなれば、また数週間経過しそうでそれでいいのだろうかという不安が急に出てきた。
透視変換についても>108の頃の自分よりは理解してるつもりなので、とりあえずプログラムに戻り、それでダメならまた別の方法を考えよう。
133: SGGK ◆6pZCoAtaxk 2010/12/21(火)22:35 ID:Uo1lQ495(1) AAS
変換についてやっぱりやめないで最後まで調べてUpするに方針変更。(葛藤し過ぎ)
できなければ出来たところまでをUpするつもり。
仕事じゃないんだし…、もう少し調べてみても無駄にはならないはず…。
趣味なんだからあまり無駄とか気にしないようにしよう!

今日は>>119氏のアドバイスのテストプログラムの動きの問題について考えてた。
>>120でプログラムが動いていたのは間違いないけど、画面左上に表示される
マウスでポイントした点が画面中のポリゴンと交差したところの点座標や他の情報を
省7
134: SGGK ◆6pZCoAtaxk 2010/12/30(木)01:05 ID:8R77hh/I(1) AAS
年末休みだからとはいえさすがにもう寝なくては…。
>>131のカメラ座標への変換がなんとなくやっと理解出来たような感じ。
次は透視変換に挑戦。
ライブラリが無ければ自分は何も出来ないんだから座標変換勉強しても時間の無駄じゃないのか?
…という迷いはあるけど、あともう少しなのでこのまま進めてみるつもり…orz
135: SGGK ◆6pZCoAtaxk 2010/12/30(木)16:53 ID:4FkYuEBu(1) AAS
やっと出来た。
間違いや内容不足はあるかもしれないけど、>>129の11月15日頃からの作業がやっと終了…。
1ページ目は結局使わなかった図。
2ページ目以降の8枚が勉強メモ。

外部リンク:ux.getuploader.com

オブジェクト座標系からスクリーン座標系まで勉強.zip
省1
136: 2011/01/01(土)02:34 ID:iSY3aMmJ(1) AAS
P2_page001〜004を見た。

そもそも何をしたいのか読み取れなかったけれども、
最初の赤枠の大前提については、ボールの位置はワールド座標系で管理して、
必要に応じて選手目線の相対座標(オブジェクト座標)を求める方が簡単じゃないかな。
137: SGGK ◆6pZCoAtaxk 2011/01/01(土)22:31 ID:85GGaF9K(1) AAS
見てくれてありがとうございます。

自分はDXライブラリが無ければ何もプログラムできないので、
プログラムに直接影響しない事を調べてもあまり意味が無いのではないかと思う一方で
座標変換には3D入門の基本のような印象を持っていたので、
もし出来るならちょっと調べてみたいと思ったのが原因で1か月以上経過してしまいました…。

赤枠については今見ると自分もそう思います。
ボールに一番近い選手を知りたいなら選手の座標とボールの座標を
省6
138: SGGK ◆6pZCoAtaxk 2011/01/13(木)23:49 ID:XHIcVK/b(1) AAS
データはなんとか用意出来た。32ドット四方の面に選手移動アニメの一コマを貼り、
左歩行に2枚、右歩行に2枚、赤選手と青選手があるから(2+2)x2=8個のテクスチャ付き面モデルを作成。
上と下の歩行描写は省くことにした。
テクスチャの貼り方はなんとか分かったけど、今まで使っていた16コマを1枚にしていた2Dデータから
1コマずつ切り出すのに手間取った。
EDGEというソフトを使ってみたが、マウスできちんと32x32で選べない。
なんとなく「edge グリッド表示」でネット検索してみると、「ツクールの素材を作る」という名前で以下がヒット。
省5
139
(1): SGGK ◆6pZCoAtaxk 2011/01/17(月)23:51 ID:Px2vRAS2(1) AAS
>>115で言った
>とりあえず次にやろうとしているのは、マウスでフィールド上の一点を指定できるようにすること。
については、どうやら出来そうな感じ。

それを表す図やテストプログラムの実行ファイルをUPしようかと思ったけど、
テストプログラムでは、試したいDXライブラリの関数をメインループにそのまま書き込んだだけなので、
今までのクラスを使ったやり方に比べ単純な例で試して上手くいったと自分が思っているだけなのかもしれないので、
今度は、今までの2Dで動かしていたプログラムの中身を少しずつ3Dのライブラリ関数に置き換えて
省10
140
(1): SGGK ◆6pZCoAtaxk 2011/01/18(火)23:06 ID:IAGIcn+p(1) AAS
いざソースを書き直そうとするもののどこから手を付ければ良いのか見当がつかない。(いまさら何を言ってるのかと思われそうだけど…)
今出てる問題は、今までのプログラムにベクトルが使えるようにするために追加したクラス、関数(ベクトル同士の加算、減算とか)が
既にDXライブラリに用意されていて、当然DXライブラリの方が関数の種類も多い。
かといって今まで書いた自分のベクトル用関数もソースのあちこちに散っているので、
これをいますぐDXライブラリの関数に置き換えるのは数カ月単位の時間を要するのは確実。

とりあえず、
自分の書いたクラスVector3 ←中身はx,y,zだけ
省19
141: SGGK ◆6pZCoAtaxk 2011/01/19(水)23:11 ID:VXY/IGc8(1) AAS
念の為もうひとつ確認しておこうと思い、テストプログラムでメインループの中に
Zキーを押したら選手のx座標を少しずつ増やしていく処理を追加してみた。
コンパイルして実行してみたら選手の絵がx方向に動いた。
3Dのビルボードの命令で描画した選手でもいままでの2D命令でやったとき同様に動く事が確認できた。

これで多少は安心してソースの書き直しに着手できる…と思う。
142: 2011/01/20(木)00:55 ID:yl8ufdN1(1) AAS
C#囓った俺だったら、Vecrot3にToVECTOR()関数を追加するかな
Vector3 a;
VECTOR b = a.ToVECTOR();
って書けるようにする

普段はVector3を使って、必要に応じてVECTORを吐き出すというイメージ
VECTORからVector3への変換はしない、という仕様にした方が多分デバッグは楽になると思う
143: SGGK ◆6pZCoAtaxk 2011/01/20(木)23:35 ID:hnrlJRek(1) AAS
アドバイス、ありがとうございます。
確かに変数の型はどちらかに統一しておいた方が良さそうなので注意します。
変数はVector3に統一し、DXライブラリの関数の引数と出力の型がVECTORだった場合には、
引数に関しては、Vector3型をVECTOR型に変換した値を入力して、
VECTOR型出力に関しては、そのつど出力のx,y,z値をVector3型変数に入力すれば、>>140で言った
VECTOR型変数をVector3型に変換する関数は使わなくて済むので、これでやってみます。

今日のプログラム修正は、データのロード部分のみ。少しずつ進めていく予定。
144: SGGK ◆6pZCoAtaxk 2011/02/09(水)21:46 ID:iFm8dF3D(1) AAS
修正が思い通りに進まないので悩む。
また以前のようにクラス図の様な図を書いて整理してからソースを修正した方がいいのだろうかと思ったが、
エクセルで書こうとするととても時間が掛かるので、クラス図を書くためのフリーソフトが無いか探してみた。

UMLdraw フリー版とシェア版があり、フリーでは印刷できないので不可。
UMLmemo  フリー、印刷無し、ビットマップ出力ありだけど、書いたテキストの空白が改行マークで埋め尽くされて見づらいので不可。
astah* community 無償版、印刷あるけど大きさの調整不可、使い方が難しいので不可。

無理してastah* communityでクラス図もどきを途中まで書いてなんとなく思い始める。
省6
145
(1): SGGK ◆6pZCoAtaxk 2011/02/11(金)22:55 ID:83OV5fAw(1) AAS
テキストファイルからの読み込みをやると言ってすぐ壁に突き当たる。
選手のポジション(FWなど)を列挙型定数にしているけど、これは読み込めないらしい。
全てのデータをテキストファイルから読み込む方法に変える必要はないと思うので、
これについては、選手のゲームスタート直後の座標だけをテキストから読み込めるようにすればいいかなと考えた。

選手のデータ関係の修正作業は途中だけど、ちょっと中止。(方針変更しすぎ・・・)

クラス図を途中まで書いたときに感じた事だけど、状態を表す定数の追加やそれを使った分岐が
ソースを見づらくしており、他にも理由がいろいろあって、このまま気になったところから直してコンパイルしてもたぶん地獄の修正作業になると思った。
省6
146: SGGK ◆6pZCoAtaxk 2011/02/14(月)00:35 ID:hwQDV7I3(1) AAS
11,12,13日の3連休では無理だった。(作業時間もすごく短いので・・・)
エラーの数は、20個→8個→30個と変わり、結局増えてしまった。
ゲームのループとそこから呼び出す関数はそんなに変更ないけど、
そこから先は思った以上に作り直しに近い感じなってしまった。
まだ先だけど、状態管理の定数を使った分岐処理もできればメインループの外に出したい。

一つの値があったとして、その値が自作のVector3型だったり、
ある時はDXライブラリのVECTOR型だったりするため、変換の方向を
省4
147: SGGK ◆6pZCoAtaxk 2011/02/15(火)23:25 ID:mNvxRe1H(1) AAS
やっとフィールドの表示が出来た。
今まではソースを書きかえる時に元のソースの先頭に//を付けてコメント化して、
いざという時に前の状態に戻しやすくできるようにしていたけど、これをやめて
コメントを減らしてソースを見やすくするようにした。
戻りたいときにはバックアップのソースを見ればいいのだから。
バックアップはコンパイルした時に出来るファイルを含め全部保存していたが、
考えてみるとプログラムソース(ヘッダファイルとCPPファイル)だけを保存しておけばよかった。
省1
148
(1): 2011/02/17(木)01:19 ID:s7Rh9Whn(1) AAS
パージョン管理ツールを使うと躊躇なく修正できるよ
subversionがおすすめ
149: SGGK ◆6pZCoAtaxk 2011/02/18(金)00:25 ID:0vaBqQnH(1) AAS
>>148
パージョン管理ツールの存在を知りませんでしたので勉強になりました。
「subversion ゲームプログラム」で検索してみるとかなり難しいツールのようです。
難しくてもインストールして触るところまではネットで調べて試してみようと思います。
ありがとうございました。

現在の進捗は、選手関係のファイルをコンパイル対象の場所に戻して、
>145でやりかけてた選手の初期化関係を修正中。
150
(1): 2011/02/24(木)13:41 ID:UHwXurlZ(1) AAS
ふと、このスレのこと思い出して帰ってきたけど
まだSGGK氏が頑張っててちょっと感動した
151
(1): STG 2011/02/24(木)23:36 ID:x+thpv+K(1) AAS
当分書き込んでないけど俺もいるぜー。3Dモデル全般の勉強でなかなか進まない
SGGK氏がんばってるなー
152: SGGK ◆6pZCoAtaxk 2011/02/25(金)23:02 ID:uikGAaqm(1) AAS
>>150
思い出して戻ってきてくれる人がいる事に感動です!
まだまだ頑張ります!
>>151
お久しぶりです!
お互い目標目指して頑張っていきましょう〜!!
153: SGGK ◆6pZCoAtaxk 2011/02/27(日)00:13 ID:wy4sbNmV(1/3) AAS
subversionの件、自分には難しすぎた感じ・・・。
でも、インストールして触るところまではなんとか出来た。

subversionで検索するとapachをPCにインストールして色々と準備設定が必要らしく、
これの設定の意味が全くわからず断念しかける。apachはサーバーのプログラムらしい。
VisualSVN-Serverというのも出てきて試そうとしたらポートの設定を求める項目があり、
理解せずに設定してパソコンを壊してしまうと大変なので断念。
「subversion apadh無し」とか「subversion サーバー無し」で検索するが、自分に分かりそうなページはヒットしない。
省7
154: SGGK ◆6pZCoAtaxk 2011/02/27(日)20:58 ID:wy4sbNmV(2/3) AAS
しかし、このようなツールに即適応出来ないとなると、自分の目標である
オンライン3D対戦サッカーゲームの完成はいつになるのだろうかとふと思った。
バージョン管理ツールはサーバーに関する知識がある程度なければ操作の意味が理解できない感じ。
いまはこういうツールの存在を認識するに留め、出来る範囲で対応するしかなさそう・・・。
でも、ツールの難しさ→サーバーの勉強も早めに始める必要ありそう→急がないと10年頑張っても出来ないかもしれない
という危機感につながったので、とにかく諦めないようにしたい・・・。
155
(3): SGGK ◆6pZCoAtaxk 2011/02/27(日)22:11 ID:wy4sbNmV(3/3) AAS
ソースを修正していて思ったが、C++で書いたプログラムは保守性が良くて再利用性にも優れてるような事を
どこかで聞いた記憶があるけど、そうなっている感じがしない。
たぶん自分の書き方に問題があるので、この機会に少しでも変えてみようと思った。

1.クラスのメンバ変数をpublicにして直接読み書きしていた。(変数毎に関数を書くのが大変だし、いちいち関数を使っていたら、その分処理速度が遅くなるのではと思った。)
  これを次のようにする。
  privateのメンバ変数にして変数毎にget関数、set関数を作ってこの関数を経由してアクセスする方法にする。
  そうすれば、例えば、座標系をx,y,zで管理していたのをVECTOR構造体に変更した場合でも
省14
156
(1): 2011/02/28(月)22:34 ID:g0je8oOR(1) AAS
メンバ変数をクラス外から頻繁にアクセスしなければいけないというのなら、
クラスの設計自体を見直すべきかもしれないよ。
もちろんケースバイケースだけど。
157: SGGK ◆6pZCoAtaxk 2011/02/28(月)22:47 ID:ard6obcB(1/2) AAS
今回のプログラム修正は前回と違って、warningが出ないようにしたい。(前回あまりにもたくさん出てきたので諦めてしまった。)

warning C4290: C++ の例外の指定は無視されます。関数が __declspec(nothrow) でないことのみ表示されます。

上記のwarningメッセージは、プログラムソースの例えば、void loadFiles()throw(int);と書いた行のような場所で多数出た。
エラー処理の命令でtry{この中でエラー出たら何かをthrowする。}catch(){左の()内とthrowされた値が同じ時に処理する内容をここに書く}というのがあって、
その最初の{}の中には関数を入れる事も出来て、その関数の中からエラー時にthrowすることも出来る。
つまり外に向けてthrow出来る関数を宣言するときにthrow(int);(注:この例ではthrowされる値の型はint型になる)を横に付けるらしい。
でも、VS2008では、この仕様をフォローしてないので、throwされる型は指定できない。
省5
158: SGGK ◆6pZCoAtaxk 2011/02/28(月)22:54 ID:ard6obcB(2/2) AAS
>>156
偶然同じ時間帯に書き込みしてた様です。指摘ありがとうございます。
今のプログラムはかなりごちゃごちゃして修正するたびに時間が掛かるようになってきたので、
もう少しクラス分けしてプログラムを見やすくしたいけど、どう分けるかは実はやってみないと分からないという状態ですが頑張ります!
159
(1): 2011/03/01(火)22:55 ID:Ux3/NF8u(1) AAS
なんか切磋琢磨な感じがいいね。
影ながら応援してます(`・ω・´)ノ
160
(1): SGGK ◆6pZCoAtaxk 2011/03/01(火)23:31 ID:huwPkO/S(1) AAS
>>159
しばらくの間は今までのプログラムの書き換え作業のような感じになるけど、
やれるところまでは頑張ってみようと思ってます!

今までは1つのファイルに複数のクラスの宣言を書いていたのを、
1クラスにつき1ファイルに変えようとしたためか、ファイルがどんどん増え、
しかもほぼ全てのメンバ変数にget、set関数を用意するので作業量が膨大になりそうな感じ・・・。
161: SGGK ◆6pZCoAtaxk 2011/03/03(木)22:36 ID:dBNi9i4V(1) AAS
class FieldControl
{
(略)
FieldData m_Field;//クラスFieldDataの型を持つオブジェクトm_Field
AnimDraw m_FieldAnim;//クラスAnimDrawの型を持つオブジェクトm_FieldAnim
(略)
};
省9
162: SGGK ◆6pZCoAtaxk 2011/03/06(日)15:46 ID:CeMkUuli(1) AAS
>>155>>160の変更を同時にやろうとして収拾がつかなくなってきた。
>>160の>1クラスにつき1ファイルに変えようとした・・・のが良くなかったかもしれない。
クラスにあるメンバ関数をcppファイルの中で定義しようとしたときに、そのクラスのヘッダファイルに無い他のクラスのメンバ変数が含まれていたら
その含まれていないクラスのヘッダファイルをインクルードしたり、または前方宣言とかいうのを書いたりするんだけど、いまいちよく理解しないでやってるからなのか
どうもその辺が原因になってるような気がする。
それと移動処理のクラスは外部変数的な感じで外部に実体を定義するんだけど、
これも思い通りに出来ていないような気がする。ちゃんと書いたつもりなのに定義が無いといった意味合いのエラーが出る。
省4
163
(1): SGGK ◆6pZCoAtaxk 2011/03/07(月)22:53 ID:A2V6WI7O(1/2) AAS
エラーメッセージが出なくなった。
問題となっていた部分はいわゆるクラス同士が相互参照していて、どちらかのクラスが宣言や定義されていないと矛盾してしまうんだけど、
先に宣言するべきクラスもその後に宣言されるクラスが宣言されていないと宣言できないという問題。
これがよくわからなくて後宣言のクラスがクラス名くらいの簡単な場合は前方宣言を使い、
後宣言のクラスの関数まで記述されているときは、前に宣言しておくべきクラスのヘッダファイルを置けばいいような感じで理解してみるものの自信無し。
結局、処理を順番に見ていきこの行では何が決まっていないと不具合になるか考えて順番に設定していき、
なんとかクリアできた。(自信無し)
省4
164: SGGK ◆6pZCoAtaxk 2011/03/07(月)23:18 ID:A2V6WI7O(2/2) AAS
今見たら、先頭に//が付いて注釈行になっていた。
画像データロードの注釈化を解除してコンパイルしたらエラー無し。
だからといって安心とは限らないけど次にいく。
選手の初期化でエラー、アサーションとかイテレータがどうのこうのというメッセージ。
明日はここからということで・・・(寝)
165
(1): 2011/03/07(月)23:44 ID:XFYVl8h4(1) AAS
>あのクラスの定義はどのファイルに書いたのか分からなくなるので

クラスビュー(ソリューションエクスプローラのタブを切り替える)を使えば、
関数、変数の宣言箇所もしくは定義箇所が引き出せるよ。
166
(1): SGGK ◆6pZCoAtaxk 2011/03/08(火)23:20 ID:pzJV24Q0(1) AAS
>>165
クラスビュー、使えました。クラスが一覧されて、ソース内の関数名をマウス右クリックメニューで定義を書いた場所に移動してくれるので便利です。
これがあれば、空のcppファイルを用意して定義先を書くような事をしなくて済みます。ありがとうございました!

今日は選手の初期化でエラーの件がまだ上手くいかず、選手22人分のデータ読み込みで
while文を使う時の条件文にファイルリードの成否判定を入れていたのを試しにはずしてみたら
エラーは出なくなったけど、選手の表示は無し。
試しに選手初期化処理直後にブレークポイントを置いて処理を停止させてからデバッガ(使い方自信無し)で見ると、
省1
167
(1): 2011/03/09(水)04:35 ID:WaGJIOge(1) AAS
>>163についてちょっと気になったので質問させて下さい
クラス同士が相互参照という事ですが、なぜそんな構造になってしまったんですか?
168
(1): SGGK ◆6pZCoAtaxk 2011/03/09(水)23:02 ID:u9XYEX3Y(1) AAS
>>167
これは書籍(14歳シリーズ)を参考に書いた処理で、
今も自信ないけど、以下の様な感じで相互参照のクラスが出来てしまってます。

選手22人分の移動関数をループから同じ書き方で呼び出しても、
異なる移動関数を選択できるようにしたいという目的があり、まず移動関数を持つ基底クラスを作成。
その基底クラスの継承クラス内で移動関数をオーバーライドしてその関数を呼び出せれば様々な移動関数を使えるはず。
継承クラスのオブジェクトのポインタを格納するための「 基底クラスのポインタ型を持つメンバ変数を選手のデータ内に持たせ 」て、
省6
169: 2011/03/09(水)23:20 ID:Vm9YGKI1(1) AAS
宣言前のクラスのポインタをメンバ変数として宣言したければ、

class CclassA{
  class CclassB *pB;
};

class CclassB{
;
};
省2
170
(2): 2011/03/10(木)00:29 ID:BwtNGrdz(1/2) AAS
クラスを前方宣言してみては?
171
(1): 2011/03/10(木)01:22 ID:B4bIYd4z(1) AAS
>>168
なるほど意図が分かり納得しました
相互参照は何だか卵が先か鶏が先かみたいで何となく嫌な感じがしたんですが、それが必要な場合もあるんですね
172: 2011/03/10(木)01:39 ID:BwtNGrdz(2/2) AAS
読み間違えていたので>170は無視してください…
173: SGGK ◆6pZCoAtaxk 2011/03/10(木)23:15 ID:m0PXWZxb(1) AAS
このようなやり方があるとは知りませんでした。
自分の技術不足のため直接的な解決には至りませんでしたが、この方法を試す過程でcppファイルもほぼ別々に分ける事が出来るようになりました。
残っているのは、移動関数クラスの継承クラスの実体を選手関係処理を集めたクラスのcppファイルの中で定義しなければ
エラーになってしまうという点だけ(一行しかない処理なので今は問題視しないつもりです。)なのでソースがすっきりしました!
ありがとうございました!
>>170、172
実は前方宣言もちょっと使っています。今回のプログラム修正は自分にはかなり複雑な内容でした…
省3
174: SGGK ◆6pZCoAtaxk 2011/03/20(日)08:59 ID:mbRpLbd0(1) AAS
東北地方太平洋沖地震発生から約一週間。
亡くなられた方々のご冥福を祈ると共に被災地の早期復旧復興を願いながら書き込み再開。

>>166
>while文を使う時の条件文にファイルリードの成否判定を入れていたのを試しにはずしてみたら
>エラーは出なくなったけど、選手の表示は無し。
>試しに選手初期化処理直後にブレークポイントを置いて処理を停止させてからデバッガ(使い方自信無し)で見ると、
>どうやら22人分のデータの読み込みがされていない様子。
省10
175: STG 2011/03/21(月)00:44 ID:TWP+xA6r(1) AAS
おお、ご無事で何より
176: SGGK ◆6pZCoAtaxk 2011/03/22(火)00:28 ID:yLNIaGwb(1) AAS
STG氏もご無事で何よりです。
災害関係で協力できる事をやりつつ、自分はプログラムをいままで通り続けていくつもりです!
177: SGGK ◆6pZCoAtaxk 2011/03/23(水)23:45 ID:0VAAbS39(1) AAS
これから初期化するということはまだデータを入れるコンテナクラス(配列みたいなもの?自信無しで使ってる)が
22人分用意されてないはずなので、
while(it!=m_FieldPlayerList.end()){データ初期値入力}
では、条件が満たされず、データ初期値入力に進まないような気がした。
試しに
if(it==m_FieldPlayerList.end()){printfDx( "リストが最後 \n") ;}

省5
178
(1): SGGK ◆6pZCoAtaxk 2011/03/24(木)22:43 ID:KuIDadu5(1) AAS
forループでどうやら問題無さそうな感じ。
選手の移動処理も最初何も表示されず悩んだが、どうやら直った感じ。
原因は、ビルボードに使うデータをロードする関数にメタセコイアのデータをロードする関数を
使おうとしていたことと、ビルボードに使うデータはBMPデータなのにそれを忘れてて
メタセコイアで作った平面にBMPデータを張り付けたメタセコイアデータをロードさせようとしていたという
2重の間違いをしてしまっていた事。

gh3d[0] = MV1LoadModel("media\\player11.mqo");  ←1回目の間違い
省5
179
(15): 2011/03/29(火)00:57 ID:W5EaQ6/R(1/2) AAS
久々にまたがんばろうかな っと思ったけど
この板すんげぇ過疎ってんのね・・・
このスレにちょいとお邪魔してもいいかな

とりあえず2DでSLGぽいのを目指して。
180
(1): SGGK ◆6pZCoAtaxk 2011/03/29(火)22:55 ID:KAewGcjL(1/2) AAS
>>179
よろしくおねがいします。
お互い頑張りましょ〜!
181: SGGK ◆6pZCoAtaxk 2011/03/29(火)23:05 ID:KAewGcjL(2/2) AAS
>>178の問題は解決。
選手の現在位置を表すベクトルに1ループあたりの移動距離分の大きさを持つベクトルを足すべきところを
間違えて、選手の移動目標となるマウスカーソルの位置を表すベクトルに足していたのが原因。

そして現在の問題点は、フィールドと選手の座標にずれがある事。
カメラの注視点を変えて向きを変えるとフィールドはそれに応じて画像が変化するけど、
何故か選手の出てくる場所はフィールドに関係なく毎回同じで変化していない感じ。
しかもマウスの指し示す位置座標もフィールドの変化と連動していないようで毎回同じ状態。
省2
182: 179 2011/03/29(火)23:53 ID:W5EaQ6/R(2/2) AAS
>>180
いつまで続くか分かりませんがヨロシクお願いします

とりあえずVC++2010Expressインストして
昔の何かのつくりかけのソースをこねくり回してます。。。
183: SGGK ◆6pZCoAtaxk 2011/03/30(水)23:05 ID:oI0LR1GW(1) AAS
このスレは次の書き込みが数か月後になっても全然OKなので自分はマイペースでやってます。
進捗が0になると突然書き込み0になったりしますので、その時はスミマセン・・・。

昨日の問題は解決。
原因は、選手の移動関数の最初の行にカメラ関係の関数、
SetCameraPositionAndTarget_UpVecY( VGet(0,680,340), VGet(0.0f,-100.0f,0.0f));
を書いてあったため、これがループの最初に書いてあったSetCameraPositionAndTarget_UpVecY(略)と重複してしまい、
両関数の注視点が異なっていたのでズレが生じた事。
184: 179 2011/03/31(木)00:56 ID:MmtwFkf5(1) AAS
こっちの場合熱が冷めるとマズイ事になる予感w
なので、その前にある程度作れれば・・・と思ったり。

こねくり回したソースはミートソースになってしまった。
食わせたらウィンドウは一応出た。
これでようやく次の作業へ…。
185
(2): SGGK ◆6pZCoAtaxk 2011/03/31(木)23:16 ID:K/Mu7f7g(1) AAS
こちらは、balldata.h を作成。
2次元でやってた時のヘッダファイルに修正を加えて作成。
メンバ変数をプライベート変数にしてget関数、set関数の宣言まで。
このような修正をボール、ゴール、レーダー関係のファイルに行わなければならず、
残りは全部で8ファイル。
186: 179 2011/04/01(金)00:43 ID:wHWoDhco(1) AAS
なんという手間のかかる作業を。。。
グローバルで適当に書いて放置してる誰かさんとはえらい違いだなぁ
ぃゃ直しますよ…後で…イツカ,タブン。

今日の作業:マウスアイコン作って動かせるようにした。
なんかsprintfとかの警告でまくってるけど気にしない。
ユニットとマップの大きさどうしよかな…。
187: SGGK ◆6pZCoAtaxk 2011/04/02(土)00:05 ID:7Uv0Gp7Y(1) AAS
ファイルを分けているのは14歳シリーズC++本の影響でたまたまこのやり方しか知らないのが理由。
このやり方だとオブジェクトを増やす毎に新しいファイルを増やさなければいけないので大変だけど頑張ってみます。

今日は進捗なし。自信ないけど土日で>>185のファイルを片づけたい。もう4月…。
188: 179 2011/04/02(土)01:41 ID:YKJBI5s3(1/2) AAS
オブジェクト毎に1ファイルというのはこちらも似たような感じなんですが、
その…GET、SET関数書くのがメンドくてそのままパブリックで書いて直接・・・
なんてダメな事をやってる所を放置したままで・・・w

以下日記:中身の何も無い板ポリユニット表示した。
ちょっとソースを綺麗にしようと思ったら
同じようなクラスが2個出来上がって汚くなった。
どうしてこうなったorz
189
(1): 2011/04/02(土)08:01 ID:0qk/4v/F(1) AAS
メンバ変数を読み書きして外で処理するのではなく、
メンバ関数にハンドルを渡して中で処理させる設計に変えるといいんじゃないかな。
190: 179 2011/04/02(土)21:31 ID:YKJBI5s3(2/2) AAS
class HUMAN_UNIT
{
public:
void Damage(int point);
  void Heal(int point);
private:
int hp;
省17
191: STG 2011/04/02(土)21:33 ID:piT73rrN(1) AAS
Get、Setはほとんど使ってないなぁ
大抵>>189の人のようにメンバ関数からのみアクセスするだけで済むようにしてる
クラスが何をしているかと再利用性と扱いと管理が楽になってよい
192: SGGK ◆6pZCoAtaxk 2011/04/03(日)00:07 ID:1D3iDnp3(1) AAS
自分は>>155からget、set関数方式への書き直しを進行中だけど、書き直しにものすごい時間がかかってます。
そして今更ながらそのように直すメリットを見つけられないような気がしてきて不安だけど、
もうほとんど書き直してしまったし、ソースも多少見やすくなったような感じはするので、このまま頑張ってみます!。

今日は、ボール関係をなんとか実装したけど、ボールはフィールド中央に表示され続けるのみとし、まだ蹴れないようにしておく。
レーダー関係は何故かレーダーが表示されないので、原因を調べているところ。
193
(1): SGGK ◆6pZCoAtaxk 2011/04/03(日)22:57 ID:FQAs1SPd(1) AAS
昨日はget、set関数方式のメリットを見つける自信が無いような事を書いてしまったけど、
ネットで検索してみると、異常な数値がセットされないようにset関数の中でチェックしたり、
get、set関数のどちらかをあえて書かない事でプライベート変数を書き込み専用、読み込み専用にすることも可能といったメリットがあるとの話。
自分の場合、今までx、y座標を別々の変数にしてたときは、(オブジェクト).x のようにしてたのが、途中でVECTOR構造体を使おうということになって、
そうなると今までのソースを(オブジェクト).x から(オブジェクト).(構造体変数).x に全部書き変えなければならなくて面倒だったので、
これが、(オブジェクト).getX() にしてあったら、getX()の中身を return x から return(構造体変数).x にするだけで済んだのでは?との思いがあって、
同じような事がそう何度も出てくるとは思わないけど、get、set関数に変えてみたという話。
省10
194
(1): 179 2011/04/04(月)00:25 ID:1C3wAcIh(1) AAS
最近、処理してから数値返したりする場面が出てきたような気がする
が、無駄な関数ががんがん増えてる気がしないでもない。
ソースを綺麗にする作業は挫折しました。。。

>>193
表示したら動かしたくなりませんか…?w
テンション上がって強引に動作実装、
→バグだらけ→バグ取りでテンションダウン→汚いソースの出来上がり
省5
195
(1): 2011/04/04(月)01:24 ID:zaeNjYQd(1) AAS
やっぱりこのスレがいちばん居心地いいなあ
月曜火曜休みなので、この連休は本気出す!
寝て起きたら、もやもやしながらゲームや2chに明け暮れずVisualStudio立ち上げて何か事を起こす!

小難しい本読んでたら、ホントに小難しすぎておもろうてやがて悲し
教科書を超えて念仏レベルで、ただ文字を追いかけてるだけ

すべてのメンバ変数privateにして無条件ゲトセトは俺も馬鹿だなと思う。
そんなことするくらいならpublicでいい
省1
196: SGGK ◆6pZCoAtaxk 2011/04/05(火)00:03 ID:S0hRYVkN(1) AAS
>>194
以前、動くところまで書いたのですが、試合前半後半で選手の向きを入れ替えたりとか
いろいろ条件を加えていくうちにソースがわかりにくくなってきた事があったので、
もしまたそうなっても、今の状態からならやり直しやすいだろうと思い、ここを区切りにして保存しておこうと思ってます。
>>195
ともに頑張りましょう!

get、set関数の件、たしかにそのとおりで、直すときは検索つかえばいいんだし、これから書く部分はpublicにしてみます。
省5
197: 2011/04/05(火)02:28 ID:t5qV24Bh(1/2) AAS
あーそういえばC++は文字列が鬼門だよな
UNICODEかSHIFT-JISかっていうのは、要はwcharかcharかって事だ
だからwchar〜charを変換する関数作っておくといいかもしれない

ちなみに俺は基本的に文字列はstringで扱って
wcharとかcharを要求する関数を使う時にstringから渡せるような作りにしてる
もうしばらく使ってないから、マクロで組んだか関数だったかは忘れたけど
198: 2011/04/05(火)02:29 ID:t5qV24Bh(2/2) AAS
あー
使ってないっていうのは、C++触ってないっていう意味ね
199
(1): SGGK ◆6pZCoAtaxk 2011/04/06(水)00:31 ID:0VHuOF2K(1) AAS
な…なるほど、変換する関数が必要となると、それは自分には難易度の高い対策方法なので、もうしばらく考えてみます。
もしかするとコンパイラがこわれてしまったかもしれない様子。
200
(1): 2011/04/06(水)01:27 ID:T5BENq16(1) AAS
>>199
MultiByteToWideChar とか WideCharToMultiByte とかいう WindowsAPI を呼べば
SJIS ←→ UNICODE 相互変換はできる
1-
あと 287 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.024s