JavaScript 碰撞检测

2024-01-25

我正在尝试用 javascript 制作一个贪吃蛇游戏,但我在碰撞检测方面遇到了困难。到目前为止,我已经尝试了各种方法,但在绝望中,我决定存储每帧片段的所有位置,然后在制作下一帧动画之前检查是否有重复项。不幸的是,这种方法也没有被证明是成功的。

也许这是由于对 JS 如何对待数组的误解造成的。有一段时间我使用if(x in y)但据我所知,如果数组中存在完全相同的对象,则返回。

这是现场演示:http://jsfiddle.net/AScYw/2/ http://jsfiddle.net/AScYw/2/

这是更容易阅读的代码:http://pastebin.com/ygj73me6 http://pastebin.com/ygj73me6

有问题的代码位于蛇对象中,作为函数collide.

this.collide = function(){
            for(var z=0; z<this.positions.length-1; z++){
                for(var q=z+1; q<this.positions.length-1; q++){
                    return this.positions[z][0] == this.positions[q][0] && this.positions[z][1] == this.positions[q][1];
                }
            }

您在这里需要做一些工作,它可能会解决您的问题。

this.collide = function(){
  for(var z=0; z<this.positions.length-1; z++){
    for(var q=z+1; q<this.positions.length-1; q++){
      return this.positions[z][0] == this.positions[q][0] && this.positions[z][1] == this.positions[q][1];
    }
  }
}

有2件事是错误的。

  1. 您将退出第一次比较的循环。您将需要执行类似 if (某些内容重叠)返回 true 的操作,然后如果成功通过,则在两个循环之外返回 false
  2. 您需要确保 z 段!= q 段,否则总会发生碰撞

看起来不错。接下来让我们看看马里奥;)

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

JavaScript 碰撞检测 的相关文章

  • 从 thymeleaf 获取数据到模态引导程序、jquery

    我正在尝试获取模态视图的 id 这是为了更新 onclick 元素 但我找不到方法 知道如何为 boostrap 5 完成此操作 或我可以用其他方法吗 谢谢 tr a inactivate a div class modal fade mo
  • 在 javascript/jquery 中将光标更改为等待

    当调用函数时 如何让光标更改为此加载图标以及如何将其更改回 javascript jquery 中的普通光标 在你的 jQuery 中使用 body css cursor progress 然后又恢复正常 body css cursor d
  • 如何测试 javascript 闭包内的函数

    这似乎是不可能的 也可能是 但我正在尝试更多的 TDD 但我总是在闭包方面碰壁 假设我有以下内容 function createSomething init function privateMethod param return init
  • 了解设置 JQuery 变量

    了解设置 JQuery 变量 最近 我通过在 StackOverflow 上遇到的另一个问题寻找帮助 了解到如何设置 JQuery 变量 如下所示 您可以通过简单地调用变量来创建输入字段 并且锚变量似乎也定义了样式 var clicked
  • 每 3 秒重复一次动画

    我正在使用 WOW js 和 animate css 现在我正在将 CSS 运行到 Infinite 我想知道如何让我的课程运行 3 秒停止并再次开始到无限 My html img src images fork png class for
  • 不和谐机器人 |不和谐.js |类型错误:无法读取未定义的属性“长度”

    我正在制作一个 Discord 机器人 并且正在使用 CodeLyon 的视频作为参考 该错误位于我的 message js 文件中 该文件包含以下内容 require dotenv config create cooldowns map
  • 尝试将布尔 C# 变量传递给 javascript 变量并将其设置为 true

    在我的 aspx 页面中 我将布尔变量 C 传递给需要布尔类型的 javascript 函数 但遇到了问题 但是 C 变量返回 True 而 javascript 不喜欢大写 myjavascript 如果我将 c 变量转换为字符串 那么我
  • 在 Vue.js 中从父组件执行子方法

    目前 我有一个 Vue js 组件 其中包含其他组件的列表 我知道使用 vue 的常见方式是将数据传递给孩子 并从孩子向父母发出事件 但是 在这种情况下 我想在子组件中的按钮出现时执行子组件中的方法 parent被点击 哪种方法最好 一种建
  • 如何重定向到 instagram://user?username={username}

    我的 html 页面上有这个链接 可以在特定用户上打开 Instagram 应用程序 a href Link to Instagram Profile a 我一直在寻找自动运行 url instagram user username USE
  • 使用 useReducers 调度函数发送多个操作?

    使用时是否可以通过调度函数发送多个动作useReducer挂钩反应 我尝试向它传递一组操作 但这会引发未处理的运行时异常 明确地说 通常会有一个初始状态对象和一个减速器 如下所示 const initialState message1 nu
  • 如何防止 Iframe 在与浏览器交互后弄乱浏览器的历史记录?

    因此 就我而言 我使用 Iframe 将 Grafana 附加到我的页面 这为我提供了漂亮且易于使用的图表 可以注意到 每次在图表上进行放大或缩小 使用鼠标单击 交互后 Grafana 的 Iframe 都会在我的 Angular 页面上触
  • Meteor:应用程序无法在 0.9.1.1 版本上运行

    出现类似错误 Error TypeError undefined is not a function evaluating Template create anonymous function iron dynamic template j
  • Javascript正则表达式用于字母字符和空格? [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我需要一个
  • MVC 在布局代码之前执行视图代码并破坏我的脚本顺序

    我正在尝试将所有 javascript 包含内容移至页面底部 我正在将 MVC 与 Razor 一起使用 我编写了一个辅助方法来注册脚本 它按注册顺序保留脚本 并排除重复的内容 Html RegisterScript scripts som
  • 如何在react-native中获取Text组件的onPress值

    我是一名新的 React Native 开发人员 我想使用 onPress 获取 Text 组件的值并将其传递给函数
  • 提交表单并重定向页面

    我在 SO 上看到了很多与此相关的其他问题 但没有一个对我有用 我正在尝试提交POST表单 然后将用户重定向到另一个页面 但我无法同时实现这两种情况 我可以获取重定向或帖子 但不能同时获取两者 这是我现在所拥有的
  • Electron - 为什么在关闭事件时将 BrowserWindow 实例设置为 null

    The 电子文档 https electronjs org docs api browser window 提供以下代码示例来创建新窗口 const BrowserWindow require electron let win new Br
  • 有没有办法阻止 prettier / prettier-now 将函数参数分解为新行

    当使用 prettier prettier now 在保存时进行格式化时 当一个函数包装另一个函数时 它会中断到一个新行 我想知道是否有办法阻止这种行为 例如 期望的输出 app get campgrounds id catchAsync
  • JQuery 图像上传不适用于未来的活动

    我希望我的用户可以通过帖子上传图像 因此 每个回复表单都有一个上传表单 用户可以通过单击上传按钮上传图像 然后单击提交来提交帖子 现在我的上传表单可以上传第一个回复的图像 但第二个回复的上传不起作用 我的提交过程 Ajax 在 php 提交
  • 如何在 pg-promise 中设置模式

    我正在搜索的文档pg 承诺 https github com vitaly t pg promise特别是在创建客户端时 但我无法找到设置连接中使用的默认架构的选项 它始终使用public架构 我该如何设置 通常 为数据库或角色设置默认架构

随机推荐

  • 哪个 openid / oauth 库可将 django 项目连接到 Google Apps 帐户?

    我正在为一家使用 Google Apps 登录的公司开发一个 Intranet django 项目 不使用 GAE 所以我希望我的用户能够使用他们的 google 帐户登录来登录我的 django 项目 OpenID 似乎很合适 尽管也许
  • 在ggplot2中自定义“scale_color_gradient2”

    我想在我的图像图中使用我自己的特定颜色 我对 ggplot2 很陌生 所以看了它的手册here http docs ggplot2 org current scale gradient2 html 旧链接不存在 现在是here https
  • TFS 2005下永久删除

    如何永久删除 TFS 2005 源代码管理下的文件夹 文件 我知道关于tf destroy命令 但这仅适用于 TFS 2008 我也知道关于CodePlex 上的 TFS PowerPack http tfspowerpack codepl
  • 用于验证 Active Directory 对象 SID 的正则表达式

    我正在寻找一种方法来验证从 Active Directory 插入的对象 SID 是否有效 是否可以使用preg match or preg match all 我在网上查找了用于此验证的正则表达式 但我找不到任何东西 Example si
  • Swift UIAlertController,文本中带有 url

    我有这个代码 func alertBox txt String let ac UIAlertController title MyTtle message More information in my website preferredSt
  • Select2 占位符问题

    我有一个 Select2 多选 html 元素 渲染时不显示占位符 但如果我选择并删除该项目 则会显示占位符 我不知道如何让它发挥作用 请指教 最初 选择时 移除物品后 Code Html DropDownListFor m gt m Ve
  • sizeof(array) 在运行时如何工作?

    我读过 C 中的 sizeof 运算符是在编译时解释的 并且由于在编译时编译器知道数组大小及其类型 因此 sizeof 能够计算数组占用的字节数 但是 sizeof 如何适用于以下代码 include
  • 在 SQL 中聚合

    我有一个看起来像这样的表 Conversion Date User Name Last Date Touch Touch Count 7 15 2017 A 6 17 2017 1 7 16 2017 B 6 24 2017 2 7 19
  • GCDAsyncSocket 服务器仅在第一次接收数据

    每次当我按下发送按钮时客户端都会发送消息 但服务器仅在第一次接收消息 服务器有什么问题 Server void viewDidLoad super viewDidLoad asyncSocket GCDAsyncSocket alloc i
  • AngularJS 在工厂和控制器之间跨模块共享数据

    我有一个 angularjs 应用程序 它有几个模块 主要模块如下所示 var app angular module mainMod apiService app controller MainCtrl function Socket sc
  • 如何使用 Terraform 的文件配置程序从本地计算机复制到虚拟机?

    我是 Terraform 的新手 到目前为止 我已成功在 Azure 上启动并运行了基本的 VM 加上资源管理器修剪 我想到的下一个任务是让 Terraform 将文件从本地计算机复制到新创建的实例中 理想情况下 我正在寻找一种解决方案 每
  • 无法连接到 localhost/127.0.0.1 android

    我是 android 开发的新手 并尝试通过改造库调用 android 中的本地 NET Web api 服务 在 IIS 上启动我的 Web api 后 我收到此错误无法连接到 localhost 127 0 0 1 android 当我
  • 使用 JavaScript 获取用户代理

    我想要一个可以获取用户的用户代理并将其支持到属性的脚本 我正在制作网站问题联系表 我通常需要知道用户使用的浏览器 如何检测用户代理字符串并将其支持为输入元素的值 我的 html 看起来像这样
  • 混合运行时是可行的解决方案吗?

    在我的公司 我们最近从 VC9 切换到 VC10 我们迁移了我们的项目 但是负责人告诉我们 我们必须在我们的生产机器上保留一些用 VC9 编译的基本通用 DLL 一段时间 这些 DLL 使用自定义结构 其中一些包含std vector st
  • 在 C++ 的条件或控制语句中声明和初始化变量

    在斯特鲁斯特鲁普的C 编程语言 特别版 第 3 版 Stroustrup 写道 在控制语句的条件中声明和初始化变量不仅是允许的 而且是鼓励的 他写道 他鼓励这样做 因为它将变量的范围缩小到仅需要它们的范围 所以像这样的事情 if int i
  • 依赖 Windows 句柄的类型作为指针可以吗?

    Windows 句柄有时很烦人 需要记得在之后进行清理 使用创建的笔和画笔执行 GDI 就是一个很好的例子 RAII 解决方案很棒 但是为每种不同类型的手柄制作一个完整的 五规则 RAII 类真的那么好吗 当然不是 我能看到的最好的结果是一
  • 为什么 gcc 4.1 + gcov 报告 100% 分支覆盖率,而较新的(4.4、4.6、4.8)报告“p = new class;”为 50%线?

    当 gcc 4 1 使用 gcov 下一行时 p new Class 据报告 分支覆盖率为 100 为什么使用 gcc 4 4 及更高版本同一行报告为 p new Class 50 branch coverage 我可以为较新的 gcc 版
  • 用一个简单的句子来说,出口和引用出口有什么区别?

    出口是否连接到子视图 引用出口是否连接到内容 是这样吗 术语 引用出口 是指引用或指向当前对象的另一个对象中的出口 举个例子 假设您有一个笔尖 其中有一个文件所有者和一个 UITableView 等 为了使 tableview 工作 它有一
  • 如何重新排列弦方程?

    我需要开发一个程序来求解线性方程 节目 首先读取一个整数n这是方程的数量 然后程序读取n包含方程的行 例如 程序的输入如下 3 2x1 3x2 4x3 16 1x1 2x2 1x3 8 3x1 1x2 2x3 13 任何操作都应该首先将每个
  • JavaScript 碰撞检测

    我正在尝试用 javascript 制作一个贪吃蛇游戏 但我在碰撞检测方面遇到了困难 到目前为止 我已经尝试了各种方法 但在绝望中 我决定存储每帧片段的所有位置 然后在制作下一帧动画之前检查是否有重复项 不幸的是 这种方法也没有被证明是成功