🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
C++

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

Q&A

解決済

1回答

1321閲覧

SinとCosを使って円状に〇を並べて回転させると半径に応じて速度が変わる

BRAK

総合スコア98

C++

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

0グッド

0クリップ

投稿2021/03/29 02:48

SinとCosを使って円状に〇を並べて回転させると半径に応じて速度が変わる

使用ライブラリ OpenSiv3D

現在シューティングゲームを作っており、敵中心にして回転する弾を作りました。
ですが、敵と弾の半径が大きくなればなるほど速度が上がってしまうので一定にするにはどのような計算をすればよいでしょうか

C++

1コード 2void EnemyShot::Update() { 3 4 for (int i = 0; i < enemyShotMax; i++) 5 { 6 if (flag[i] == 1) { 7 8 if (!a) {//通常の扇型の動き 9 10 posX[i] += cos(angle[i]); 11 posY[i] += sin(angle[i]); 12 } 13 else {//敵を中心に回転 14 15 //angleを常に周回させます 16 angle[i] += frameTime; 17 18 //位置 = cos * 主人との現在の半径 19 float x = cos(angle[i]) * radius[i]; 20 float y = sin(angle[i]) * radius[i]; 21 22 //敵番号 23 int no = enemyNo[i]; 24 25 // 位置 = cos + 主人の現在の位置X - 自分のサイズ / 2 26 posX[i] = x + enemyPos[no].x - 12 / 2; 27 // 位置 = sin + 主人の現在に位置Y - 自分のサイズ / 2 28 posY[i] = y + enemyPos[no].y - 12 / 2; 29 } 30 } 31 } 32 33 if (MouseM.down() && !a) { //クリックしたら回転させます 34 a = true; 35 } 36 else if (MouseM.down() && a) { 37 a =false; 38 } 39} 40 41//敵側で処理します 42 43//弾を出す敵との半径を求めます 44void EnemyShot::RadiusFormEnemy(int no,Vec2 pos,Vec2 size) { 45 46 //敵の現在の位置 47 Vec2 posE(pos.x + size.x / 2, pos.y + size.y / 2); 48 49 //敵番号に現在の敵の位置を入れます 50 enemyPos[no] = posE; 51 52 for (int i = 0; i < enemyShotMax; i++) 53 { 54 //管理されている弾なら処理します 55 if (enemyNo[i] == no) { 56 57 //弾のposXと弾を出した敵との距離を求めます 58 float lenX = Abs((posX[i] + 12 / 2) - posE.x); 59 //弾のposY 60 float lenY = Abs((posY[i] + 12 / 2) - posE.y); 61 62 //二点間の距離を求めます ----> 半径 63 float lenD = sqrt(lenX * lenX + lenY * lenY); 64 65 radius[i] = lenD; 66 } 67 } 68}

イメージ説明

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

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

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

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

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

guest

回答1

0

ベストアンサー

angle[i] += frameTime/radius[i];

投稿2021/03/29 02:55

ozwk

総合スコア13551

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

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

BRAK

2021/03/29 03:06

ありがとうございます。 frameTime = 1 / 60 でさっきやって速度が小さすぎて動かないように見えて、 20に変えたら距離が離れるほど速度が遅くなって、 1にしたらなんとなく速度が一定になりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問