逐渐旋转物体以面对一点?

2023-11-23

我正在制作一个 JavaScript 游戏,我希望敌方船只能够向指定点旋转。然后可以根据它们的角度计算它们的运动。仅当船舶位于其目标的下方和右侧时,以下旋转代码才有效。如果船在左边,它会旋转到约 0 度并在那里抖动。在右上角,它不断逆时针旋转。 我到底做错了什么?关于更好的方法有什么建议吗?

obj.angle %= 360;
// Calculate angle to target point
var targetAngle = Math.atan2(obj.mode.dest.y - obj.y, obj.mode.dest.x - obj.x) * (180 / Math.PI) + 90;
// Get the difference between the current angle and the target angle
var netAngle = Math.abs(obj.angle - targetAngle) % 360;
// Turn in the closest direction to the target
netAngle > 180 ? obj.angle += obj.shipType.turnSpeed : obj.angle -= obj.shipType.turnSpeed;
if(obj.angle < 0) obj.angle += 360;
if(obj.angle > 360) obj.angle -= 360;

我的问题非常类似于this one,这更好地解释了它,但不幸的是它是用 C# 编写的。

EDIT:这是工作代码,对于任何可能觉得有用的人:

obj.angle %= 360;
var targetAngle = Math.atan2(obj.mode.dest.y - obj.y, obj.mode.dest.x - obj.x) * (180 / Math.PI) + 90;
targetAngle = (targetAngle + 360) % 360;
if(obj.angle != targetAngle)
{
    var netAngle = (obj.angle - targetAngle + 360) % 360;
    var delta = Math.min(Math.abs(netAngle - 360), netAngle, obj.shipType.turnSpeed);
    var sign  = (netAngle - 180) >= 0 ? 1 : -1;
    obj.angle += sign * delta + 360;
    obj.angle %= 360;
}

只需对代码进行少量更改,它似乎就可以工作:

http://jsfiddle.net/57hAk/11/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

逐渐旋转物体以面对一点? 的相关文章

  • 如何从 URL 字符串中删除某些参数?

    我有这个var存储表示充满参数的 URL 的字符串 我正在使用 AngularJS 我不确定是否有任何有用的模块 或者可能使用纯 JavaScript 来删除不需要的 URL 参数而无需使用正则表达式 例如我需要删除 month 05并且
  • 代码点火器 JSON

    你好 我使用 codeigniter 然后我从控制器中的数据库中回显输出 然后在我的视图文件中执行以下操作 但它没有显示任何内容 S 我的模型文件 function forumList this gt db gt select oversk
  • React:React 如何确保在浏览器有机会绘制之后调用 useEffect?

    useLayoutEffect 的文档说 useLayoutEffect 内计划的更新将被刷新 在浏览器有机会绘制之前同步进行 useEffect 的文档说 与 componentDidMount 和 componentDidUpdate
  • 如何在 JavaScript 中构建一个计算数组中出现次数的对象?

    我想计算数组中某个数字出现的频率 例如 在Python中我可以使用Collections Counter创建一个字典 记录某个项目在列表中出现的频率 据我所知 JavaScript 是这样的 var array 1 4 4 5 5 7 va
  • 如何获取数组中最后 5 个元素(不包括第一个元素)?

    在 JavaScript 数组中 如何获取最后 5 个元素 排除第一个元素 1 55 77 88 would return 55 77 88 添加其他示例 1 55 77 88 99 22 33 44 would return 88 99
  • NodeJS 无法加载 css 文件

    所以我正在尝试制作一个 NodeJS 服务器 并且我尝试保留尽可能少的附加组件 但是 我遇到了一个问题 我似乎无法加载任何内容CSS我调用的文件HTML文件 该调用似乎确实由服务器处理 但它不会显示在浏览器中 My 网络服务器 js fil
  • 页面点击其他路径后 $timeout 继续运行

    我在用yo angular fullstack生成器来构建我的网站 当用户注册该网站时 它将发送一封带有链接的激活电子邮件 当用户点击该链接时 会显示激活成功并超时进入主页 但是 当超时未结束 用户点击页面中的任何其他链接时 会跳转到其他页
  • django ajax post 403被禁止

    使用 django 1 4 当我尝试从我的 javascript 做我的 django 服务器上的帖子时 我收到 403 错误 我的 get 工作正常 尽管问题仅出在帖子上 也尝试过 csrf exempt但没有运气 更新 我现在可以发布我
  • 用于导出到 CSV/Excel 的数据 URI(无服务器端请求):浏览器支持/限制?

    以下问题 Javascript 或 Flash 导出至 CSV Excel https stackoverflow com questions 8150516 javascript or flash export to csv excel
  • 如何使用 selenium 获取 javascript 结果?

    我有以下代码 from selenium import selenium selenium selenium localhost 4444 chrome http some site com selenium start sel selen
  • 在外部单击时关闭弹出 div

    我有一个弹出 div 仅在单击特定按钮时显示 单击同一按钮时它甚至会隐藏 我的问题是 我还想在单击外部任何地方时隐藏 div 我无法这样做 因为弹出 div 位于主包装类内部 并且无法通过在包装类上使用 click 事件并使其隐藏来做到这一
  • CryptoJS 和 Pycrypto 一起工作

    我正在使用 CryptoJS v 2 3 加密 Web 应用程序中的字符串 并且需要在服务器上使用 Python 对其进行解密 因此我使用 PyCrypto 我觉得我错过了一些东西 因为我无法让它工作 这是JS Crypto AES enc
  • 有不同图像尺寸的缩略图 Bootstrap

    我想要包含不同大小和不同文本量的图像的缩略图 但我希望它们都具有相同的大小 像这样来自 Bootstrap 站点的示例 http getbootstrap com components thumbnails custom content 下
  • Tween JS 基础知识之三个 JS 立方体

    我是 Tween JS 的新手 尝试使用 Tween 制作一个向右移动的简单动画 下面是我在 init 函数中的代码 我使用的是三个 JS var geometry new THREE CylinderGeometry 200 200 20
  • 如何在 JavaScript 中设置/更新 String 对象的值

    我有一个具有一些属性的对象字符串对象 var obj foo new String bar 我在用字符串对象因为我需要在对象上存储额外的子属性 同时仍然能够获取字符串值 obj foo baz baz obj foo gt bar 我觉得问
  • nvd3.js - 无法更改折线图中线条的颜色

    我正在尝试更改 nvd3 折线图不同线条的颜色here http nvd3 org livecode index html codemirrorNav但我无法理解该怎么做 我想将示例中的 2 条线的颜色更改为绿色和青色 我试过 nv add
  • 盒式捆绑包与 MVC4 捆绑包

    我目前正在开发一个原型 ASP NET MVC 3 解决方案 该解决方案将用作多个项目重写的基础 来自 Web 表单 我的目标之一是跨应用程序实现一些脚本管理 而不是我们目前没有的目标 MVC 3有一个缺陷恕我直言 如果您需要在部分视图或模
  • 如何在 ChartJS 中创建自定义图例

    我需要使用 ChartJS 库为我的圆环图创建自定义图例 我已经使用 ChartJS 提供的默认图例创建了甜甜圈 但我需要一些修改 我希望其价值高于汽车名称 另外 我不喜欢粘性图例 我想将其与甜甜圈分开 这样我就可以更改字体 框的样式 例如
  • Chrome Prerender 功能每次都会被取消

    我正在尝试 Chrome 中的预渲染功能 但是当我检查网络时 我可以看到任何链接的请求都被取消 我使用以下语法 我尝试了现场演示http prerender test appspot com http prerender test apps
  • 使用 stopPropagation() 处理 React 事件委托

    我有一个 React 项目 应该可以放置在任何网站上 我的想法是 我托管一个 javascript 文件 人们放置一个具有特定 ID 的 div 然后 React 在该 div 中进行渲染 到目前为止 除了点击事件之外 这是有效的 这些事件

随机推荐

  • 将构面标签更改为 ggplot2 中的数学公式

    我想知道如何改变facet数学公式的标签ggplot2 d lt ggplot diamonds aes carat price fill density xlim 0 2 stat binhex na rm TRUE opts aspec
  • 未捕获的类型错误:$(...)[index].hide/show 不是函数

    我正在为我的网站创建 jQuery 搜索脚本 但出现以下错误 Uncaught TypeError index hide is not a function search js 9 Uncaught TypeError index show
  • 来自内容脚本的桌面通知

    我试图从内容脚本显示一个简单的桌面通知代码 但它似乎不起作用 我已在 maifest json 文件中添加了权限 从内容脚本中显示它们是否有限制 您无法直接通过内容脚本显示通知 但是你can通过背景页面向他们展示 Your 清单 js应该看
  • 允许 GridView 与 SliverAppBar 重叠

    我正在尝试从早期的材料设计规范中重现以下示例 开放用于动画演示 到目前为止 我已经能够产生滚动效果 但内容的重叠仍然缺失 我不知道如何正确地做到这一点 import package flutter material dart class H
  • ASP.NET MVC 默认路由可通过区域路由访问

    到目前为止 为简洁起见 我在 global asax 中注册了一条路由 如下所示 routes Add new LowercaseRoute action id new MvcRouteHandler Defaults new RouteV
  • 相当于 IE8、IE7 及更早版本浏览器的 div 显示内联块

    这是关于跨浏览器兼容性的一个相当普遍的问题 在设计的各个阶段 我目前正在研究实现我想要的布局和风格 不诉诸使用图像 的唯一方法是使用display inline blockCSS 样式选项 然而 IE8 和其他旧版浏览器不支持这一点 这导致
  • 一个 ViewModel,多个视图

    我很难让多个视图针对 1 个视图模型工作 我读过了多视图支持的命名约定并没有从中得到太多 并且在这个过程中尝试了无数的事情 举一个简单的例子 假设我有一个位于 ShellViewModel 中的 People ViewModel 它基本上包
  • 在 Silverlight 3 中获取运行时程序集

    我目前正在编写一个框架 dll 其中有一个 AssemblyHelper 该帮助程序存储运行时和用户添加的程序集以轻松实例化新对象 该框架的 NET 部分使用 AppDomain MyDomain AppDomain CurrentDoma
  • windows.h 和 MFC

    为什么我不能将 windows h 包含在 afx MFC 项目中 通常 MFC 应用程序代码包括afx h or afxwin h 后者包括前者 前两行windows h are ifndef WINDOWS define WINDOWS
  • 公钥加密如何工作[重复]

    这个问题在这里已经有答案了 我对 RSA 的理解是 Alice 可以创建公钥和私钥组合 然后将公钥发送给 Bob 然后鲍勃可以使用公钥加密某些内容 而爱丽丝将使用公钥和私钥组合来解密它 但是 Alice 如何加密要发送给 Bob 的内容 鲍
  • Apache - 如何限制文件的最大下载速度? (如果不是apache,我可以运行lighthttpd)

    我有很多视频 但我只想将这些文件的最大下载速度限制为 1mbps 我该如何设置 最好在 Apache 中 但 lighthttpd 是一个选项 thanks 如果您只想限制每个连接的下载速度 而不考虑管理总数或执行更细粒度的控制 那么处理此
  • MySql 单表,选择最近 7 天并包含空行

    我在 stackoverflow 上搜索了类似的问题 但我不明白如何使这项工作 我正在尝试做什么 因此 我想从数据库中获取最近 7 天的交易并获取总销售额 如果某天没有数据 还包括空行 到目前为止我所拥有的 http sqlfiddle c
  • Angular-CLI 和 ThreeJS

    我一直在尝试添加适当的 npm 依赖项 以将三个依赖项添加到我的 Angular CLI 项目中 过去几个月 CLI 变化如此之快 我一直找不到工作源 这里有一些想法 搭载脚本 这是我的第一次尝试 简单地添加到index html 文件 但
  • 安装自定义 Cocoa 框架的最佳方法

    我有一个自定义框架 遵循 Apple 框架编程指南中的建议 gt gt 安装你的框架我安装在 Library Frameworks 中 我通过使用以下脚本添加运行脚本构建阶段来实现此目的 cp R build Debug MyFramewo
  • Android 中的 onResume() 是在 onRequestPermissionsResult() 之后调用的吗?

    我有一个活动 我已经把checkSelfPermission and requestPermissions中的方法onCreate method 我也有一个onRequestPermissionsResultonCreate 之外的方法 最
  • 加载时隐藏 jQuery Accordion

    我正在测试一个连接速度较慢的网站构建 我注意到 jQuery Accordion 会长时间保持展开状态 直到网站的其余部分加载完毕 然后最终崩溃 不太漂亮 我想知道如何在加载过程中保持它折叠并仅在单击时展开 我正在使用独立的 1 6 版本的
  • docker多阶段构建Go镜像-x509:由未知权威机构签名的证书

    我尝试建立go图像在私人公司网络使用docker 多阶段构建 FROM golang latest as builder WORKDIR app COPY go mod go sum RUN go mod download COPY RUN
  • 升级到 Android Studio 2.3 后 android-apt 的插件不兼容

    从 2 2 升级到 2 3 后 我看到此警告 当我尝试编译该项目时 我看到这个编译错误 如何在不降级到以前的 gradle 版本的情况下解决此问题 有没有 android apt 的更新可以解决这个问题 The android apt pl
  • 断言Equal和断言Is之间有什么区别(assertIs是在Python 2.7中引入的)?

    参考 http docs python org library unittest html assert methods assertEqual a b checks that a b assertIs a b checks that a
  • 逐渐旋转物体以面对一点?

    我正在制作一个 JavaScript 游戏 我希望敌方船只能够向指定点旋转 然后可以根据它们的角度计算它们的运动 仅当船舶位于其目标的下方和右侧时 以下旋转代码才有效 如果船在左边 它会旋转到约 0 度并在那里抖动 在右上角 它不断逆时针旋