画布游戏:最大转向角(以 n 秒为单位)
Canvas Game: Maximum steering angle in n seconds
所以我不知道标题是否将我的问题带到了一个点,我的英语可能不太好完全解释它。幸运的是,代码可以:D
所以,我正在开发一个小型多人游戏,您可以使用键盘操纵一条线(速度例如每秒 300 像素,您可以使用按键调整它的移动角度(。
每个玩家画一条无限的线,当你的"蛇"..idk你怎么称呼它..击中黑色(背景色(以外的其他东西时,你就死了。寿命最长的玩家获胜。
您可以收集物品,其中一个物品是来自街头霸王的"Hadouken",它瞄准最近的玩家并试图击中他(此处相同:给出速度和角度(。
"Hadouken"角度是每帧计算的。 目标是玩家:
if (hadouken.aimTo)
{
var dx = hadouken.aimTo.x - hadouken.x;
var dy = hadouken.aimTo.y - hadouken.y;
var dist = Math.sqrt(Math.pow(dx, 2) + Math.pow(dy, 2));
hadouken.rad = Math.atan2(dy, dx);
if (dist < hadouken.aimTo.radius)
{
...
}
}
var plusX = hadouken.speed * _.timeFactor * Math.cos(hadouken.rad);
var plusY = hadouken.speed * _.timeFactor * Math.sin(hadouken.rad);
hadouken.x += plusX;
hadouken.y += plusY;
_.rotateDraw(hadouken, hadouken.x - hadoukenWidth / 2, hadouken.y - hadoukenHeight / 2, hadoukenWidth, hadoukenHeight, {rad: hadouken.rad}, function(x, y) {
_.drawImage(hadoukenImage, x, y, hadoukenWidth, hadoukenHeight);
});
但是这个东西总是有正确的角度,如果它在硬编码的 5 秒后没有消失,它将达到它的目标(速度 = 目标速度 * 1.5 ;)(。你没有机会用你的线躲避它。我的曲线太尖锐了。
我的问题是:你能以某种方式将角度的增加限制在每秒 .. idk .. 30 度吗?我相信我可以自己做到这一点,但那会很花哨,而且可能是不必要的。
我希望这已经足够清楚了,再次对不起我的英语,我希望得到一些答案:)
而不是
hadouken.rad = Math.atan2(dy, dx);
我会这样编码:
// time_elapsed is time since previous animation state update (in time units)
// angular_speed is max turning speed in radians per time unit
var dest_angle = Math.atan2(dy, dx);
// normalize destination vector dx,dy
var nx = Math.cos(dest_angle);
var ny = Math.sin(dest_angle);
// calc current vector
var cx = Math.cos(hadouken.rad);
var cy = Math.sin(hadouken.rad);
// calc cross product, its sign will tell ya which direction we should turn
var crp = cx*ny - cy*nx;
var ang_ofs = angular_speed * time_elapsed;
if ( crp>0 ) // shoud turn clockwise
hadouken.rad += ang_ofs;
else
if ( crp<0 ) // shoud turn counter clockwise
hadouken.rad -= ang_ofs;
// dont let it over-turn
cx = Math.cos(hadouken.rad);
cy = Math.sin(hadouken.rad);
var crp2 = cx*ny - cy*nx;
if (crp*crp2<0) // sign changed!
hadouken.rad = dest_angle;
相关文章:
- 如果宽度是百分比,如何设置以px为单位的图像高度
- 如何将datetime转换为以毫秒为单位的epoch时间javascript
- 每小时倒计时一次,但以30分钟为单位
- 以天为单位计算年龄-Javascript
- 是否可以使用javascript获取以em为单位的窗口宽度
- 获取以屏幕像素为单位的旋转SVG元素的边界
- GridStack项的高度和宽度(以像素为单位)
- 有没有一种方法可以检查javascript以毫秒为单位执行一个函数需要多长时间
- JQPlot's仪表-以针为单位显示值
- Moment.js unix时间戳,以分钟为单位显示以前的时间
- 从Javascript到C#获取正确的日期(以毫秒为单位)
- 远距离变换元素的宽度/高度(以像素为单位)
- 石头剪刀布游戏功能在Javascript
- jquery匹配以px为单位的样式字体大小的元素
- 以周为单位计算日期差异(Javascript)
- 如何为PHP/JS游戏制作倒计时/定时器
- 以非像素为单位获取HTML DOM元素的CSS高度,在我的例子中是英寸
- Three.js从相机中提取以弧度为单位的旋转
- 尝试为石头剪刀布游戏显示图像而不是字母
- 画布游戏:最大转向角(以 n 秒为单位)