近況報告&教えてください
近況報告&教えてください
インするのを忘れてしまうので久しぶりのトピ立てです
近況報告
取り合えず、何とか他プレイヤーを(ちょっとだけ)画面に表示できるようになりました。こんな感じです
http://video.fc2.com/content/20120911SCEnUAmK
カメラの位置が低い、相手プレイヤーのモーションがないのは気にしないでくださいな
(ここで私信。softya(ソフト屋)さんへ。画面がおかしかったのはVC++2010のせいのようでした。フリーズするようになったので再インストールしたら画面も直りました
ついでに質問させていただきます。というか、VC++2010のバグが原因でないことを祈りたい。今日再インストールしたばっかなので
動画で、
1.VCから起動させたほうはちゃんと相手が見えるにも拘らず、.exeから起動したほうは相手キャラが見えません。
2.プレイヤーが相手プレイヤーから遠ざかると相手プレイヤーが浮かんでいくように見え、近づくと降りてくるように見える。しかし、実際の座標は変わってない
これはどうしてでしょうか
近況報告
取り合えず、何とか他プレイヤーを(ちょっとだけ)画面に表示できるようになりました。こんな感じです
http://video.fc2.com/content/20120911SCEnUAmK
カメラの位置が低い、相手プレイヤーのモーションがないのは気にしないでくださいな
(ここで私信。softya(ソフト屋)さんへ。画面がおかしかったのはVC++2010のせいのようでした。フリーズするようになったので再インストールしたら画面も直りました
ついでに質問させていただきます。というか、VC++2010のバグが原因でないことを祈りたい。今日再インストールしたばっかなので
動画で、
1.VCから起動させたほうはちゃんと相手が見えるにも拘らず、.exeから起動したほうは相手キャラが見えません。
2.プレイヤーが相手プレイヤーから遠ざかると相手プレイヤーが浮かんでいくように見え、近づくと降りてくるように見える。しかし、実際の座標は変わってない
これはどうしてでしょうか
最後に編集したユーザー 史上最悪のデスペナ on 2012年9月17日(月) 21:46 [ 編集 2 回目 ]
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: 近況報告&教えてください
通信で起こる現象と何らかのプログラムバグが混じっている可能性がありますね。
それとVC++2010を入れなおして直ったバグは全コンパイルしたとかライブラリのリンクを間違いていたとか無いですか?
こういうややこしい問題は、原因を切り分けるために通信と同じ内容をファイルから入れた場合とか値を固定した場合などをチェックして見たほうが良いでしょう。
それとサーバーの通信テストも必要です、テスト用のクライアントを作成してクライアント1とクライアント2の相互で狙った値をサーバー経由で受け取っているかチェックする方法を考えてみてください。
なんにしてもサーバー絡みのものは通信データを時系列で取得してチェックするなどが基本です。マメにやりましょう。
【補足】
念の為に確認ですが1ループ中にカメラを何度か座標を変えていたりはしませんか? それをすると変な風に表示されても仕方ないのですが。
それとVC++2010を入れなおして直ったバグは全コンパイルしたとかライブラリのリンクを間違いていたとか無いですか?
こういうややこしい問題は、原因を切り分けるために通信と同じ内容をファイルから入れた場合とか値を固定した場合などをチェックして見たほうが良いでしょう。
それとサーバーの通信テストも必要です、テスト用のクライアントを作成してクライアント1とクライアント2の相互で狙った値をサーバー経由で受け取っているかチェックする方法を考えてみてください。
なんにしてもサーバー絡みのものは通信データを時系列で取得してチェックするなどが基本です。マメにやりましょう。
【補足】
念の為に確認ですが1ループ中にカメラを何度か座標を変えていたりはしませんか? それをすると変な風に表示されても仕方ないのですが。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: 近況報告&教えてください
ライブラリのリンク自体は、バグが起こる直前までちゃんと動いていたので、それは大丈夫じゃないかと思います。softya(ソフト屋) さんが書きました:通信で起こる現象と何らかのプログラムバグが混じっている可能性がありますね。
それとVC++2010を入れなおして直ったバグは全コンパイルしたとかライブラリのリンクを間違いていたとか無いですか?
バグが起こる場合、大抵は
プログラムを編集→デバッグ→再度編集→バグ
もしくは
プログラムを編集→デバッグ→一旦終了→ほかのことをやった後再度起動→バグ
といった感じです
デフラグツールとかPCメンテナンス系を使った後もなったりするようです
1ループ中でプレイヤーの位置が完全に確定した時点でカメラ座標を決定しているので、何度も変えたりはしていませんsoftya(ソフト屋) さんが書きました:【補足】
念の為に確認ですが1ループ中にカメラを何度か座標を変えていたりはしませんか? それをすると変な風に表示されても仕方ないのですが。
単純に、コマンドプロンプトのような画面になるプログラムでsoftya(ソフト屋) さんが書きました:それとサーバーの通信テストも必要です、テスト用のクライアントを作成してクライアント1とクライアント2の相互で狙った値をサーバー経由で受け取っているかチェックする方法を考えてみてください。
クライアント1は1、クライアント2は2を送信させて受信データを表示させる
クライアント1はHello, Client2、クライアント2はHello, Client1を送信させて受信データを表示させる
intとfloat混合型構造体に数値を代入(クライアント1と2で値は別)し、受信データを表示させる←実際のゲームで使用するのと同じ構造体
というのをこちらで質問する前にやってみましたが、大丈夫でした
なので、今度はゲーム画面に相手のデータ・自分のデータを表示させるようにしてみようと思います
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: 近況報告&教えてください
比較しやすいように送信・受信をテキストログファイルに書きだすというのもやってみてくだださい。
その場合に送信データに連番を付加すると抜けとか順番の乱れなども検知できます。
その場合に送信データに連番を付加すると抜けとか順番の乱れなども検知できます。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: 近況報告&教えてください
1ループに一回表示させると比較が無理なので、60ループに一回更新するようにしたところ、同じデータを送受信していると思われました。史上最悪のデスペナ さんが書きました:なので、今度はゲーム画面に相手のデータ・自分のデータを表示させるようにしてみようと思います
ちなみに、.exeのほうで表示されなかった件は解決しました。 というオチでした
了解です。softya(ソフト屋) さんが書きました:比較しやすいように送信・受信をテキストログファイルに書きだすというのもやってみてくだださい。
その場合に送信データに連番を付加すると抜けとか順番の乱れなども検知できます。
追伸
構造体を直接送信したほうが楽であり、
取り合えず「プログラムの最適化を一切考えずとにかくプログラムを完成させること」
を目標に作っているのでBYTE配列での送受信は現在はしておりません
Re: 近況報告&教えてください
連番自体はまだやっていませんが、データの比較の仕方が分かりません・・・・・・・softya(ソフト屋) さんが書きました:比較しやすいように送信・受信をテキストログファイルに書きだすというのもやってみてくだださい。
送信・・・・・・自身のデータ 88バイト
受信・・・・・・自身のデータ(サーバー側で計算した結果)+自身の周りのプレイヤーデータ 88×Aバイト
という風であり、
クライアントAとBの場合、受信したデータが毎回
クライアントA・・・・・・Aのデータ・Bのデータ
クライアントB・・・・・・Bのデータ・Aのデータ
の上、
同じPC上で手動で動かしているのでどちらか一方が最初のほうと最後のほうで地震のデータしか受信して無い部分があるため
どのように比較すればいいのか分かりませんでした
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: 近況報告&教えてください
連番を付けないと比較で困ると思います。
それとsprintfなどしてテキストに変換してテキストログにしないとテキスト比較ソフトのwinMergeが等が使え無いですから困まると言う訳です。
それとsprintfなどしてテキストに変換してテキストログにしないとテキスト比較ソフトのwinMergeが等が使え無いですから困まると言う訳です。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: 近況報告&教えてください
何とかできました。sprintf部分で思ったように行かずに時間かかりましたが・・・・・
結果としては、チラッと見た限りでは大丈夫そうでした
結果はこちらです。今回必要な、
何回目の送信か、X座標、Y座標、Z座標
となっています。受信側は
自分の何回目の送信か、X座標、Y座標、Z座標、相手の(ry
となっています
Client1で受信側のデータで最初の60個近くの相手のデータで
すべて0なのは、
相手がゲームにインしてからキャラ作成をし・・・・・・
にかかった時間分、
プレイヤー自体はプレイしてないけどサーバー上はインしたことになっているためそのようなことになっています。
結果としては、チラッと見た限りでは大丈夫そうでした
結果はこちらです。今回必要な、
何回目の送信か、X座標、Y座標、Z座標
となっています。受信側は
自分の何回目の送信か、X座標、Y座標、Z座標、相手の(ry
となっています
Client1で受信側のデータで最初の60個近くの相手のデータで
すべて0なのは、
相手がゲームにインしてからキャラ作成をし・・・・・・
にかかった時間分、
プレイヤー自体はプレイしてないけどサーバー上はインしたことになっているためそのようなことになっています。
- 添付ファイル
-
- 結果.zip
- (13.71 KiB) ダウンロード数: 155 回
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: 近況報告&教えてください
1)自分のデータを自分に送り返しているのが意味不明ですが、これの理由を教えて下さい。
2)相手のデータの座標系に異常は生じていないんでしょうか?空中に浮くんですよね?
3)あと相手と自分の送信通番は違うのではと言う疑問が生じました。これは表示していないんでしょうか?
2)相手のデータの座標系に異常は生じていないんでしょうか?空中に浮くんですよね?
3)あと相手と自分の送信通番は違うのではと言う疑問が生じました。これは表示していないんでしょうか?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: 近況報告&教えてください
例えば、HPとかはサーバーにあるキャラデータなどから計算して値を返したいのですが、そういうのが入っている構造体中に位置情報も含まれているからです。softya(ソフト屋) さんが書きました:1)自分のデータを自分に送り返しているのが意味不明ですが、これの理由を教えて下さい。
また、サーバーでキャラを強制移動とかさせることも視野に入れています
今回、他のプレイヤーキャラの位置がおかしいということで、受信データログには構造体中の位置座標のみを記録しました
この送受信している値を、描画前にMV1SetPositionに代入しているため、同じように表示されるはずなんですが・・・・・・・・softya(ソフト屋) さんが書きました:2)相手のデータの座標系に異常は生じていないんでしょうか?空中に浮くんですよね?
ごめんなさい。どういうことでしょう?softya(ソフト屋) さんが書きました:3)あと相手と自分の送信通番は違うのではと言う疑問が生じました。これは表示していないんでしょうか?
例えば、Client2のRecvData.txtの1行目で
1,0.000000,-0.081667,0.000000,63,0.000000,-0.540000,0.000000
これは、
Client2が1回目に送信した(X,Y,Z)=(0.000000,-0.081667,0.000000)
鯖に保存されたClient1が63回目に送信した(X,Y,Z)=(0.000000,-0.540000,0.000000)
という風になっています。
クライアント⇔サーバー間のやり取りとしては
クライアント→構造体送信→サーバーで何らかの処理(未実装)→サーバー内のクライアントデータを上書き→vectorで動的にプレイヤーの構造体、付近のほかのプレイヤーの構造体を入れる配列作成→配列の要素数送信→配列送信→クライアント
としています
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: 近況報告&教えてください
>> 3)あと相手と自分の送信通番は違うのではと言う疑問が生じました。これは表示していないんでしょうか?
すいません勘違いでした。
2) 第三者視点で client1 と client2 を表示させて見ること。このテキストをサーバーの受信代わりに入力してみる。
あたりでしょうか。
すいません勘違いでした。
1) MV1SetPositionで本当に代入されているかを確認すること。史上最悪のデスペナ さんが書きました: この送受信している値を、描画前にMV1SetPositionに代入しているため、同じように表示されるはずなんですが・・・・・・・・
2) 第三者視点で client1 と client2 を表示させて見ること。このテキストをサーバーの受信代わりに入力してみる。
あたりでしょうか。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: 近況報告&教えてください(トピ保守中)
ネットの調子が悪いのと、自作プログラムの通信部分の不具合により、全然手がつけれていません。
どれだけかかるか分からないので、下のほうに埋もれないよう保守するために時々報告できたらと思います
どれだけかかるか分からないので、下のほうに埋もれないよう保守するために時々報告できたらと思います
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: 近況報告&教えてください(トピ保守中)
通信をしないでログのファイル入力でプレーヤー1と2を移動表示させるのをぜひ試してみてください。史上最悪のデスペナ さんが書きました:ネットの調子が悪いのと、自作プログラムの通信部分の不具合により、全然手がつけれていません。
どれだけかかるか分からないので、下のほうに埋もれないよう保守するために時々報告できたらと思います
通信側に問題があるのか、他に問題があるのかを切り分けできます。
訳の分からない問題はデータに問題があるのか、あるいはプログラムに問題があるのかをまず区別する必要があると思います。
なので簡易なプログラムを作成して同じデータを動かした時に問題が出ればデータの可能性が高いでしょう。
簡易なプログラムで問題が出なければ大きくなった既存のゲームプログラムに問題があるのでしょう。
簡易なプログラムを作る手間のほうが今のプログラムをあれこれひねくり回している時間よりも少なくて済みます。
それと簡易なテストプログラムは動いている実績のあるサンプルコードなどから構築してください(自分のコードを出来るだけ使わない)。
これはデータ構造の問題やメモリ破壊バグを引き継がないための措置です。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: 近況報告&教えてください
遅くなりました
自キャラ動かす
DataA.txtに保存
DataB.txtから読み込み
相手キャラ位置設定
という風にしたところ
問題なく動きました
ということは
頑張って探してみます
自キャラ動かす
DataA.txtに保存
DataB.txtから読み込み
相手キャラ位置設定
という風にしたところ
問題なく動きました
ということは
ですね・・・・・・・・softya(ソフト屋) さんが書きました:簡易なプログラムで問題が出なければ大きくなった既存のゲームプログラムに問題があるのでしょう。
頑張って探してみます
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: 近況報告&教えてください
次はデータの破壊ポイントを探すことです。
1) 受信後に変化しないデータであれば、受信後にコピーを作成してモデルに設定される直前にコピーされているデータと比較して見る方法があります。
2) とりあえずのテストの中で起こりえるデータの値の範囲を想定してプログラムの動作中にデータが値の範囲を外れたら警告を表示するという手もあります。
チェック関数を作成してプログラムのあちこちから呼び出します。
この時、プログラムのどこで外れたか__LINE__で行番号とか__FUNCTION__で関数名なども表示すると分かりやすいでしょう。__LINE__や__FUNCTION__はチェック関数の呼び出し時に引数とします。
【補足】
デバッグ力というかバグを発見する能力はプログラミングする上で重要です。
完成するかどうかはバグが取れるかに掛かっているわけですから。
なのでテストは重要で、データの検証方法は常に考える必要があります。
まぁ、バグを出さないプログラムとバグを発見しやすいプログラムを組むのが一番重要なんですけどね。
1) 受信後に変化しないデータであれば、受信後にコピーを作成してモデルに設定される直前にコピーされているデータと比較して見る方法があります。
2) とりあえずのテストの中で起こりえるデータの値の範囲を想定してプログラムの動作中にデータが値の範囲を外れたら警告を表示するという手もあります。
チェック関数を作成してプログラムのあちこちから呼び出します。
この時、プログラムのどこで外れたか__LINE__で行番号とか__FUNCTION__で関数名なども表示すると分かりやすいでしょう。__LINE__や__FUNCTION__はチェック関数の呼び出し時に引数とします。
【補足】
デバッグ力というかバグを発見する能力はプログラミングする上で重要です。
完成するかどうかはバグが取れるかに掛かっているわけですから。
なのでテストは重要で、データの検証方法は常に考える必要があります。
まぁ、バグを出さないプログラムとバグを発見しやすいプログラムを組むのが一番重要なんですけどね。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: 近況報告&教えてください
最近リアルが忙しいので全然プログラミングができていませんが
ふと思ったことがあるので保守もかねて投下
自キャラが離れたときに
他プレイヤーが
地面を基準にしてみると・・・・・浮き上がって見える
ですが、
画面中心を基準にしてみると・・・・・・消失点に向かっていくように見える
という風なので、
もしかしたら自分のカメラの設定がおかしいということはないでしょうか。
ふと思ったことがあるので保守もかねて投下
自キャラが離れたときに
他プレイヤーが
地面を基準にしてみると・・・・・浮き上がって見える
ですが、
画面中心を基準にしてみると・・・・・・消失点に向かっていくように見える
という風なので、
もしかしたら自分のカメラの設定がおかしいということはないでしょうか。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: 近況報告&教えてください
わざと聞きますが、それを確認する方法は何かアイデアはありますか?史上最悪のデスペナ さんが書きました:最近リアルが忙しいので全然プログラミングができていませんが
ふと思ったことがあるので保守もかねて投下
自キャラが離れたときに
他プレイヤーが
地面を基準にしてみると・・・・・浮き上がって見える
ですが、
画面中心を基準にしてみると・・・・・・消失点に向かっていくように見える
という風なので、
もしかしたら自分のカメラの設定がおかしいということはないでしょうか。
考えて幾つかアイデアを出してみてください。
ちょっと時間の合間に考えてメモっておけば良いです。
※ デバッグとは発想力が勝負である。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: 近況報告&教えてください
申し訳ありませんが、リアルでの都合によりゲーム作成は一旦停止となりそうです。
少しずつでも空いた時間にやっていく予定です。
おそらく、ですが代わりのプログラミングをすることになります。
分からないことがまたたくさん出てくると思うのでその時はよろしくお願いします
少しずつでも空いた時間にやっていく予定です。
おそらく、ですが代わりのプログラミングをすることになります。
分からないことがまたたくさん出てくると思うのでその時はよろしくお願いします
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: 近況報告&教えてください
分かりました。
こちらはとりあえず解決にしておいてください。
ところで代わりのプログラムとは同様にゲームなのでしょうか?
こちらはとりあえず解決にしておいてください。
ところで代わりのプログラムとは同様にゲームなのでしょうか?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: 近況報告&教えてください
いえ、ちょっと訳ありで完全に別物です。
シミュレーションプログラム、もしくは機械を動かすプログラムとなりそうです。
同時並行になりそうな予感が・・・・・・
ゲームプログラムをしたいのに。。。。。。。
シミュレーションプログラム、もしくは機械を動かすプログラムとなりそうです。
同時並行になりそうな予感が・・・・・・
ゲームプログラムをしたいのに。。。。。。。