记录 2d游戏下如何根据 angle 的角度做对应朝向移动

 // 获取节点的当前旋转角度
    let angle = this.node.getChildByName('node').angle;

    // 将角度转换为弧度,因为Math函数需要使用弧度
    let radians = misc.degreesToRadians(angle);

    // 计算朝向向量,使用 cosine 和 sine 函数
    let direction = v3(Math.cos(radians), Math.sin(radians));

    // 计算移动距离
    let moveDistance = direction.multiplyScalar(50 * deltaTime);

    // 更新节点的位置
    this.node.getChildByName('node').setPosition(this.node.getChildByName('node').position.add(moveDistance));
2赞

连个线,数学公式就行吧, 或者向量乘法

不错不错,感谢分享。
我也分享一下我的做法,集思广益。

1、方向移动

  • 终点减起点,获得向量 dir = p2 - p1
  • 单位化向量,得到方向 dir = dir.normalize();
  • 用方向向量做位移 ox = dir.x * dt * speed; oy = dir.y * dt * speed;

2、节点旋转

let angle = atan2(dir.y,dir.x); 计算出角度, 设置给node 的rotation.z 就可以修改物体旋转

5赞

麒麟子大佬好强,比我的简单 :+1:

根据角度获取方向向量。
首先angle转radius,
假设图片默认的朝上↑,旋转90度,那么可以
const dir = Vec2(0, 1).rotate(PI / 2).normalize(),即可得出方向向量
dis = Vec2(dir.x * speed + pos.x, dir.y * speed + speed)

逆时针方向

jojo老师好强 :+1:

说下我的思路,2d游戏一般设置forward就行了 :wink:

貌似只有3d设置 forward 才行

2d的z轴是指向屏幕内的,而且2d的旋转是绕着z轴旋转,
2d的forward一定是(0, 0, 1)
改forward的话,会导致绕着其他轴向旋转,图片都显示不全了
可以自行试一下