このスレッドはロックされています。記事の閲覧のみとなります。
トップページ > 記事閲覧
xとy軸のみを使い3Dの立方体を9マスに移動するようにしたい。
名前:マーク42 日時: 2020/07/20 02:18

xとy軸のみを使い3Dの立方体を9マスに移動するようにしてみたいため z軸を定数0で固定しました。 ですが手前に移動すると立方体が空中に浮いたような感じになります。 どのように工夫すれば浮いたようにではなく出来るでしょうか? こちらはキャラクターの画像と立方体の3Dデータです。 キャラクターの画像と立方体の3Dデータ #include "DxLib.h" int Key[256]; int gpUpdateKey() { char tmpKey[256]; GetHitKeyStateAll(tmpKey); for (int i = 0; i < 256; i++) (tmpKey[i] == 0) ? (Key[i] = 0) : Key[i]++;//キーのフレームの習得 return 0; } int stage[4][7][2]; // 盤上のマス int pos[3][6][2]; // 描画座標 int i = 0; int j = 0; void init_stage() // stage と pos を初期化する { for (j = 0; j < 7; j++) { int w = (j - 3) * 230, h = 280;//ステージの下の位置で決めた左を固定したままここで大きさを変える(左右へ伸びて大きくなる。)、高さは大きさを変える for (i = 4; --i >= 0; ) { stage[i][j][0] = w + 750, stage[i][j][1] = h + 230;//ステージの位置を変える、高さは位置を変える w = w * 8 / 10, h = h * 9 / 10; } } //ステージ上の中心の座標を表している。 for (int i = 0; i < 3; i++) for (int j = 0; j < 6; j++) { pos[i][j][0] = (stage[i][j][0] + stage[i + 1][j + 1][0]) / 2 - 25; pos[i][j][1] = (stage[i][j][1] + stage[i + 1][j + 1][1]) / 2 - 65; } } int WINAPI WinMain(HINSTANCE hi, HINSTANCE hp, LPSTR cl, int cs) { SetGraphMode(780, 680, 32); // ウィンドウの大きさを指定 ChangeWindowMode(TRUE); // 全画面ではなくウインドウを使用 if (DxLib_Init() == -1) return -1; // DXライブラリ初期化処理 SetDrawScreen(DX_SCREEN_BACK); // 裏画面を使用する設定 init_stage(); int enemyX = 4, enemyY = 1; // 敵の位置 int playerX = 1, playerY = 1; // 俺の位置 int enemyMove = 0; // 敵の移動状態 int playerMove = 0; // 俺の移動状態 int enemyGHandle[12]; // 敵のグラフィックハンドル格納用配列 int[12]型の変数を定義(基礎より) int playerGHandle[12]; // 俺のグラフィックハンドル格納用配列 // 5:正面、7:右向き、2:左向き、4:上向き、3:下向き、9:移動不可 int enemyImage = enemyGHandle[11]; int playerImage = playerGHandle[5];//LoadDivGraphよりplayerX = 2, playerY = 2の時のplayerGHandle[5]がDrawGraphのplayerImageに代入される。★最初はここに情報だけ書いておいて、その情報が画面クリア後の関数DrawGrapに渡され描画される。 int ModelHandle = 0; const int MOVE_INTERVAL = 1000; // 何ミリ秒ごとに移動処理をするか int nextMoveTime = GetNowCount() + MOVE_INTERVAL; // 次回移動処理をする時刻 int stopCount = 0; // 動かないのがあと何回か while (ProcessMessage() == 0) { gpUpdateKey(); // キーの入力状態を取得 { // 俺の移動 if (Key[KEY_INPUT_RIGHT] == 1) if (playerX < 2) { playerMove = 1; playerX = playerX + 1; //移動 playerImage = playerGHandle[5]; } if (Key[KEY_INPUT_LEFT] == 1) if (playerX > 0) { playerMove = 1; playerX = playerX - 1; //移動 playerImage = playerGHandle[11]; } if (Key[KEY_INPUT_UP] == 1) if (playerY > 0) { playerMove = 1; playerY = playerY - 1; //移動 playerImage = playerGHandle[2]; } if (Key[KEY_INPUT_DOWN] == 1) if (playerY < 2) { playerMove = 1; playerY = playerY + 1; //移動 playerImage = playerGHandle[8]; } if (playerMove > 0 && ++playerMove > 20) { playerMove = 0; playerImage = playerGHandle[5]; // 右を向く } } ClearDrawScreen(); // 裏画面をクリア // 盤面の描画 int boxColor = GetColor(160, 64, 64); for (int i = 0; i < 4; i++) DrawLine(stage[i][0][0], stage[i][0][1], stage[i][6][0], stage[i][6][1], boxColor); for (int j = 0; j < 7; j++) DrawLine(stage[0][j][0], stage[0][j][1], stage[3][j][0], stage[3][j][1], boxColor); ModelHandle = MV1LoadModel("untitled3.mv1"); // 画面に映る位置に3Dモデルを移動 MV1SetPosition(ModelHandle, VGet(pos[playerY][playerX][0], pos[playerY][playerX][1], 0.f)); //第二引数の回転角度をセット MV1SetRotationXYZ(ModelHandle, VGet(0.5, 0, 00.0f)); // 3Dモデルの描画 MV1DrawModel(ModelHandle); // 敵キャラの描画 DrawGraph(pos[enemyY][enemyX][0], pos[enemyY][enemyX][1], enemyImage, true); // 俺キャラの描画 DrawGraph(pos[playerY][playerX][0], pos[playerY][playerX][1], playerImage, true); ScreenFlip(); // 裏画面を表画面に反映 } DxLib_End(); // DXライブラリ使用の終了処理 return 0; // ソフトの終了 }
メンテ

Page: 1 |

Re: xとy軸のみを使い3Dの立方体を9マスに移動するようにしたい。 ( No.1 )
名前:イッシー 日時:2020/07/20 06:54

X軸Y軸Z軸の向きはきちんと把握できてますか? あと3D描画にはカメラの設定も重要です。 (カメラの向きによって画面上(2D)でのX軸Y軸Z軸の向きが変わります。) まず、カメラの設定しないとDXライブラリでは初期状態は 視点の位置が x = 320.0f, y = 240.0f, z = ( 画面のサイズによって変化 )、 注視点の位置は x = 320.0f, y = 240.0f, z = 1.0f、 カメラの上方向は x = 0.0f, y = 1.0f, z = 0.0f、 つまり画面のXY平面上の中心に居てZ軸のプラス方向を見るようにっています。 SetCameraPositionAndTarget_UpVecY()等を使ってカメラの位置と注視点を設定してください。 あと、DrawLineで2Dでマスを書いてますけど、3D空間に描画したいのなら、あれでは意味が無いです。 DrawLine3Dを使って3D座標をしていして描画してください。 あともう一つ致命的な間違いがあります。 毎フレーム3Dモデルを読み込んでますが、ループを開始する前に一回読み込んでおけば大丈夫です。 (毎フレーム読み込み続けるとすぐにメモリがたりなくなります。) ソース見るに2D描画と3D描画の区別がついていないように思われます。 3Dと2Dの座標の違いを理解してください。 まずは、3D空間のX・Y・Z軸、カメラの視点、カメラの注視点、カメラの上方向を理解できるようにしましょう。 3D空間の座標がやカメラの存在がわからないと3Dゲームは作れないと思うので、まずはそこを把握してしてください。 あと、こちら↓もマーク42さんの質問ですか? ttps://teratail.com/questions/278015 (前の質問で「通りすがりん」さんが貼ったリンク先の方がしてる質問なのですが、同じ質問内容なので…) こちらで、もう的確な答えが出ているようですが、理解できなかったという事でしょうか?
メンテ
Re: xとy軸のみを使い3Dの立方体を9マスに移動するようにしたい。 ( No.3 )
名前:NNN 日時:2020/07/20 08:39

〉イッシーさん 質問者は過去何度もマルチポストの指摘や他色々な指摘を無視している方です イッシーさんが回答をくれる故にそのあたり放置しているようですので せめて相互リンクと各質問をちゃんと締めるまでは回答を控えた方が良いかと思います
メンテ
Re: xとy軸のみを使い3Dの立方体を9マスに移動するようにしたい。 ( No.4 )
名前:イッシー 日時:2020/07/20 09:14

>NNNさん 分かりました。 とりあえず、サンプルコードは消しておきました。
メンテ
Re: xとy軸のみを使い3Dの立方体を9マスに移動するようにしたい。 ( No.5 )
名前:マーク42 日時:2020/07/21 07:17

イッシ―さん、回答ありがとうございます。 >>質問者は過去何度もマルチポストの指摘や他色々な指摘を無視している方です 今回の質問はタイトルがてらていると似ているだけで若干内容は違うのでマルチポストという認識がなかったです。 無視しているかのようにとらえさせてしまいすいません。 Z軸でのカメラ操作はなかなか難しいですね。
メンテ
Re: xとy軸のみを使い3Dの立方体を9マスに移動するようにしたい。 ( No.6 )
名前:相田 日時:2020/07/21 09:38

teratail: ttps://teratail.com/questions/278015 > xとy軸のみを使い3Dの立方体を9マスに移動するようにしてみたいため > z軸を定数0で固定しました。 > ですが手前に移動すると立方体が空中に浮いたような感じになります。 > どのように工夫すれば浮いたようにではなく出来るでしょうか? 完全に一致。 「マルチポストという認識がなかった」...常識と良識を疑う。
メンテ
Re: xとy軸のみを使い3Dの立方体を9マスに移動するようにしたい。 ( No.7 )
名前:ロッキー 日時:2020/07/21 12:00

マーク42さんのteratailのアカウントと違いますね。以前の質問が全て消えていますが、BANでもされましたか?
メンテ
Re: xとy軸のみを使い3Dの立方体を9マスに移動するようにしたい。 ( No.8 )
名前:マーク42 日時:2020/07/21 13:12

BANされてません。今後は質問の内容に関係ないことは答えないのでご了承ください。
メンテ
Re: xとy軸のみを使い3Dの立方体を9マスに移動するようにしたい。 ( No.9 )
名前:ロッキー 日時:2020/07/21 13:38

いわゆる複垢というやつですか。悪質ですね。
メンテ
Re: xとy軸のみを使い3Dの立方体を9マスに移動するようにしたい。 ( No.10 )
名前:ロッキー 日時:2020/07/21 13:42

先ほどの件ですが、「余計な口を聞かず質問に答えろ」と言われた気がしました。なぜこんな人が入り浸っていられるのか、とても不思議です。
メンテ
Re: xとy軸のみを使い3Dの立方体を9マスに移動するようにしたい。 ( No.11 )
名前:低糖質 日時:2020/07/21 19:05

>今後は質問の内容に関係ないことは答えないので 「質問以前に投稿者本人の犯している過ち、問題が大きすぎて答えようと思えない」 と言われてるのに気づきませんか。 そうやってどんどん答えてくれる人を自らはね飛ばしてきているわけです 成長できない根本原因です。 口だけだと指摘されたことがあるのでは?
メンテ
Re: xとy軸のみを使い3Dの立方体を9マスに移動するようにしたい。 ( No.12 )
名前:マーク42 日時:2020/07/21 19:56

>>余計な口を聞かず質問に答えろ ロッキーさん、あなた人聞きが悪いなあ、そんなふうに受け取るってなんだか荒んでますよ? そんなつもりではなくて質問外のことは混乱を招くのでできれば書きたくないというだけです。 >>「質問以前に投稿者本人の犯している過ち、問題が大きすぎて答えようと思えない」 と言われてるのに気づきませんか。 まるで気が付かなかったです。そんなに大きな過ちだとはこれっぽっちも思ってません。 >>そうやってどんどん答えてくれる人を自らはね飛ばしてきているわけです あなた方みたいに解答でない返事をしてくる方を跳ね飛ばせるなら嬉しいです!
メンテ
Re: xとy軸のみを使い3Dの立方体を9マスに移動するようにしたい。 ( No.13 )
名前:相田 日時:2020/07/21 20:40

質問外のことを書かせてるのはおまえだぞ。
メンテ
Re: xとy軸のみを使い3Dの立方体を9マスに移動するようにしたい。 ( No.14 )
名前:マーク42 日時:2020/07/21 22:14

>>質問外のことを書かせてるのはおまえだぞ。 そうなんですか?ですが、「わざわざ質問外のこと」を書いているのは相田さん、あなたじゃないですか。 質問外のことを書くという選択肢しか考えられないほどの頭ではないでしょう?もう少しは賢いでしょ? 急に相手を「おまえ」呼ばわりとはいかんですね。 怒るのはいいけど、文面に感情むき出すのは如何なものかと。 感情を制御できない、すなわち、大人の対応ができないのは恥ずかしいぞ。
メンテ
Re: xとy軸のみを使い3Dの立方体を9マスに移動するようにしたい。 ( No.15 )
名前:管理人 日時:2020/07/21 23:17

> マーク42さん この掲示板は特にマルチポストを禁止していませんでしたが、マルチポストと知らずに回答された方が マルチポスト先で既に解決していたり有効な回答を得ていたりするのを発見して徒労感を感じてしまう という事態は避けたいので、申し訳ありませんが本掲示板もマルチポストを禁止としたいと思います なので、今後マルチポストだと判明した場合( 若しくは私がマルチポストだと判断した場合 )は スレッドをロックさせていただきますのでご了承ください m(_ _)m あと、このスレッドはマルチポスト禁止前に作られたスレッドなのでロックしないつもりでしたが、 言い争いの場となってしまっているようですのでロックします
メンテ

Page: 1 |