基于运动角度与速度求解网格上游戏抛射体的正交方向平移量
网格运动抛射体正交方向平移量计算方法
要基于运动角度和每秒移动速度(速率)计算正交方向的平移量,核心是利用三角函数分解速度向量,以下是具体方法:
基础公式(标准坐标系)
假设你的游戏使用标准笛卡尔坐标系:
- x轴正方向为右,y轴正方向为上
- 角度以x轴正方向为0°,逆时针旋转角度递增
那么两个正交方向的每秒平移量计算公式为:
- 水平方向(x轴)平移量:
vx = speed * cos(angle_radians) - 垂直方向(y轴)平移量:
vy = speed * sin(angle_radians)
其中:
speed:抛射体的每秒移动距离(速度大小)angle_radians:运动角度的弧度值(多数编程语言/引擎的三角函数默认使用弧度)
关键注意事项
角度单位转换
如果你得到的角度是度数,需要先转换成弧度,转换公式:angle_radians = angle_degrees * π / 180
比如30°转换成弧度就是30 * 3.14159 / 180 ≈ 0.5236游戏坐标系适配
很多2D游戏会使用特殊坐标系:- 若0°为y轴正方向(向上),则公式需调整为:
vx = speed * sin(angle_radians)vy = speed * cos(angle_radians) - 若y轴正方向为向下(比如部分像素游戏),则垂直分量需取负:
vy = -speed * sin(angle_radians)(标准坐标系下)
- 若0°为y轴正方向(向上),则公式需调整为:
网格离散化处理
因为是网格运动,计算出的vx/vy是连续的每秒位移,你可以每帧(或固定时间步长)累积位移:- 每帧位移增量:
delta_x = vx * delta_time,delta_y = vy * delta_time - 将增量加到累积位移
accum_x/accum_y中 - 当
accum_x的绝对值≥1个网格单位时,移动对应格数,并从accum_x中减去对应值(同理处理accum_y)
- 每帧位移增量:
示例计算
假设抛射体速度为10单位/秒,运动角度为30°(标准坐标系):
- 转弧度:
30 * π/180 ≈ 0.5236 - 计算分量:
vx = 10 * cos(0.5236) ≈ 8.66单位/秒(水平每秒移动约8.66个单位)vy = 10 * sin(0.5236) ≈ 5单位/秒(垂直每秒移动5个单位)
内容的提问来源于stack exchange,提问作者Commander Of The Wind
相关产品推荐
相关产品推荐

