1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【ゲーム制作】「先生!2DSTGで弾を好きな方向に飛ばすにはどうすればいいんですか?」

Last updated at Posted at 2022-06-13

弾幕シューティングなどは一体どうやって弾を動かしているのか?
大半の人が「こんなのどこで使うんだ」と高校の時に挫折した三角関数を使用する。
そう、誰もが嫌がる「Sin」「Cos」だ。動く点P並に嫌がられてるはずだ。
ついにこいつらが日の目を浴びる時が来たのだ。

例として、真下に飛ばす弾の移動方法を載せておく。

90度(多分真下、違っていたら真上)の方向に弾を飛ばす
using System;

double angle = 90.0; // 角度を90°にする
double speed = 3.0; // 弾の速度(好きな数字を入れる)
double x = 0.0; // 弾のX座標
double y = 0.0; // 弾のY座標

// 弾を移動させる
x += speed * Math.Cos(angle * (Math.PI / 180));
y += speed * Math.Sin(angle * (Math.PI / 180));

// x, yを使って弾を表示する

難しいことは考えなくてよい。この通りに書けばそちらに飛んでいく。
三角関数の中身を考えるのは、弾を飛ばして喜んだ後でいい。

角度を変えるとそちらの方向に飛んでいくので、0~360の好きな数字を入れてみて欲しい。
x,yの初期値をキャラの座標とかにするとキャラから飛んでいるように見える。

次に全人類憧れの360°方位弾を作ってみる。
これはforを使って弾を360個同時に飛ばす。

360°の方向に弾を飛ばす
// 弾の座標を入れる変数を360個分作る
double[] x = new double[360];
double[] y = new double[360];

for(int i=0;i<360;i++) {
    // 弾を移動させる(ループカウンタiを角度にする)
    x[i] += speed * Math.Cos((double)i * (Math.PI / 180));
    y[i] += speed * Math.Sin((double)i * (Math.PI / 180));

    // x[i], y[i]を使って弾を表示する
}

良い弾幕を。

1
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?