2022/12/01 RGBリメイク(仮)開発日記

先日の続き。
円軌道で描きながら、対象角度(まぁ自分だけど)に誘導する攻撃が出来たのだけど、
それとは別にベジェ曲線の軌道の攻撃を追加。

 

調べたらわずか10行ぐらいで実装できてしまった。
しかもちゃんと誘導するし…
えいやーで作る前に、しっかり調べておけば数時間で済んだのに、何日も掛けてしまった。
角度ちゃんと調整すると、頑張って描いた円軌道のコードとほぼ同じ軌道になってくれる。
ただ円軌道の方はリアルタイムでしつこく誘導するので、これはこれで残しておこう。

調べた結果として、レイシリーズのように、
誘導が終わってもその角度のまま直進するコードのサンプルなんかを置いておこう。
(そのままコピペして使える人がいるように)

---

ベジェ曲線は0~1を基準に対象位置まで移動するので、このコード上では一旦tとして0.01単位にしています
 対象位置までで良いならelse以降は不要なので、ifの中身の2行だけ(赤字のとこ)でOK
 chara[num].basepx、chara[num].basepyは始点
 px1、py1は中間点
 target_x、target_yは対象位置
 3次曲線なので、2次曲線や4次曲線にするときはpx2とかpy2を作って途中で追加してあげてね

---
    double temp_x1, temp_x2, temp_y1, temp_y2;
    double t *=0.01;

    //目標へ移動中の場合
    if (t < 1) {
        chara[num].px = (1 - t) * (1 - t) * chara[num].basepx + 2 * (1 - t) * t * px1 + t * t * target_x;
        chara[num].py = (1 - t) * (1 - t) * chara[num].basepy + 2 * (1 - t) * t * py1 + t * t * target_y;
    }
    //対象座標を越えてしまった場合は、直前の角度を求めて移動
    else {
        t = 0.99;
        temp_x1 = (1 - t) * (1 - t) * chara[num].basepx + 2 * (1 - t) * t * px1 + t * t * target_x;
        temp_y1 = (1 - t) * (1 - t) * chara[num].basepy + 2 * (1 - t) * t * py1 + t * t * target_y;
        
        t = 1;
        temp_x2 = (1 - t) * (1 - t) * chara[num].basepx + 2 * (1 - t) * t * px1 + t * t * target_x;
        temp_y2 = (1 - t) * (1 - t) * chara[num].basepy + 2 * (1 - t) * t * py1 + t * t * target_y;

        //ここから下は対象までの直前の角度を求めてキャラや移動先を設定してあげてね
        chara[num].theta = atan2( (int)(temp_x2 - temp_x1), (int)(temp_y2 - temp_y1));
        chara[num].px += cos(chara[num].theta * RADIAN) * chara[num].speed;
        chara[num].py += sin(chara[num].theta * RADIAN) * chara[num].speed;
    }
---
DXライブラリに↑みたいなものがないのでとりあえず作ったけど、
WindowsAPIで既にベジェ曲線あるらしいし、この時代、ライブラリに普通に入ってそうな機能
なので、どれぐらいの人に需要があるかは微妙。