質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

DXライブラリ

DXライブラリとは、DirectXを使ったWindowsソフトの開発に必ず付いて回るDirectXやWindows関連のプログラムを使い易くまとめた形で利用できるようにしたC++言語用のゲームライブラリです。

Q&A

解決済

1回答

1776閲覧

シューティングゲームの斜め移動の移動量を修正プログラムで正しく修正されているかどうか知りたい。

退会済みユーザー

退会済みユーザー

総合スコア0

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

DXライブラリ

DXライブラリとは、DirectXを使ったWindowsソフトの開発に必ず付いて回るDirectXやWindows関連のプログラムを使い易くまとめた形で利用できるようにしたC++言語用のゲームライブラリです。

0グッド

0クリップ

投稿2021/04/15 12:40

編集2021/04/15 12:41

参考サイトより提示コードのコメント内部のようにルート2分の1倍した数値を掛け算しているのですがこれは正しいのでしょうか?実際斜め移動しているときとそうじゃない時を実装してみましたがちょっと速度が違いすぎる気がします。これは間違えているのでしょうか?

参考サイト: https://bituse.info/game/19
イメージ説明

cpp

1#include "Game.hpp" 2#include "Entry.hpp" 3#include "Input.hpp" 4 5#include <iostream> 6 7#include "DxLib.h" 8 9 10Game::Game(Entry* entry) 11{ 12 owner = entry; //Entry クラス 13 14 15 16 m_handlePlayer_ = LoadGraph("Assets/Player.png"); //プレイヤー 17 playerPosition = glm::ivec2(100,100); 18} 19 20 21//計算 22void Game::Update() 23{ 24#define SPEED 10 25 26 bool rl = false; 27 bool ud = false; 28 glm::ivec2 speed = glm::ivec2(0, 0); 29 if (owner->input->getKeyDownHold(KEY_INPUT_RIGHT) > 0) 30 { 31 speed.x = +SPEED; 32 rl = true; 33 } 34 else if (owner->input->getKeyDownHold(KEY_INPUT_LEFT) > 0) 35 { 36 speed.x = -SPEED; 37 rl = true; 38 } 39 else { 40 rl = false; 41 speed.x = 0; 42 43 } 44 45 if (owner->input->getKeyDownHold(KEY_INPUT_UP) > 0) 46 { 47 speed.y = -SPEED; 48 ud = true; 49 } 50 else if (owner->input->getKeyDownHold(KEY_INPUT_DOWN) > 0) 51 { 52 speed.y = +SPEED; 53 ud = true; 54 } 55 else { 56 speed.y = 0; 57 58 ud = false; 59 } 60 61//////////////////////////////////////////////////////////////////////////////////////// 62 //斜め移動 63 if (ud == true && rl == true) 64 { 65 playerPosition.x += speed.x * 0.70710678118; 66 playerPosition.y += speed.y * 0.70710678118; 67 } 68 else { 69 //そうじゃないとき 70 playerPosition.x += speed.x; 71 playerPosition.y += speed.y; 72 } 73//////////////////////////////////////////////////////////////////////////////////////// 74 75 76} 77 78//描画 79void Game::Draw() 80{ 81 DrawGraph(playerPosition.x, playerPosition.y, m_handlePlayer_, TRUE); 82} 83 84 85Game::~Game() 86{ 87 88} 89

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

1T2R3M4

2021/04/15 13:58

仕様を考えた人が仕様に従ってご自身で書いたんだったら正しいのではないでしょうか。 仕様ではどうなっているのですか。
txty

2021/05/03 03:59 編集

削除
退会済みユーザー

退会済みユーザー

2021/04/16 02:59

数学を勉強しましょう。 結果だけ貰ってコピペしてるから何も身に付かないのです。
退会済みユーザー

退会済みユーザー

2021/04/16 03:17

いやちゃんと考えて自分で記述しました。
退会済みユーザー

退会済みユーザー

2021/04/16 04:14

自分でロジック考えてデバッグもしてるなら、そもそもこんな質問出てこないでしょう。
m.ts10806

2021/04/16 06:22

このコードを考えられる頭があるなら出てこない質問がたくさん。1考えて9誰かに埋めてもらう行為は「考えた」とは言いません。
fana

2021/04/16 07:12

> ちょっと速度が違いすぎる気がします ふわっとした感想で言われても,何も伝わらない.あなたにしか動作は見れないのだし. 問題を定量的に示せないのか? 例えば,斜め移動時と斜めじゃない移動時のplayerPositionの時系列の値を示すとか.
Serbonis

2021/04/16 08:39

キーの入力と速度の算出と状態の更新が入り混じっているため、見通しが悪くバグが入りやすい作りだと思います。まずはこれらを別々に処理するように構成を見直す事をお奨めします。
guest

回答1

0

ベストアンサー

これは間違えているのでしょうか?

物理的な挙動としては、無重力かつ真空であっても、慣性が考慮されていないので、間違っています。

ゲームとしての挙動としては、仕様という「正しい挙動」も、実際の移動ログデータも提示されておらず、回答不能で、質問になっていません。

過去の質問も確認していましたが、同様に、質問になっていません。
作成(ないしは複製)したコードだけ提示し、判断基準である仕様も一切提示せず(もしくは提示できず)、ログなどの挙動結果すら提示せず(作成されたかすら疑問)、無意味に質問数を重ねているだけです。

この投稿の場合なら、仕様としては「移動する際の移動量はSPEEDとする」と明記し、フレームと検出キーと座標の、以下のようなログの提示が必要です。
000:--:100,100
001:上-:100,90
002:上-:100,80
003:--:100,80
004:-右:110,80
005:-右:120,80
006:上右:127,73

以後の質問投稿に関しては、最低限この程度はご提示くださいますよう、お願いいたします。

投稿2021/04/17 08:19

YT0014

総合スコア1750

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問