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}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/03/29 03:06