EaselJS - 检测碰撞的最佳方法

2024-04-06

我正在尝试为我的 easelJS 小应用程序找到一种碰撞检测的好方法。

我刚刚使用 createjs.Shape 创建了 2 个矩形

但是创建一个矩形形状后,API 不让我知道矩形的宽度和高度(我不知道为什么)。

EaselJS Shape 有一个名为“hitTest”的方法,但它只能在您想要测试形状和对象的碰撞时使用。point.

//Here's the code http://jsfiddle.net/ZbZjL/16/.

//Create a stage by getting a reference to the canvas
stage = new createjs.Stage("demoCanvas");
//Create a Shape DisplayObject.
redRect = new createjs.Shape();
redRect.graphics.beginFill("red").drawRect(0, 0, 60, 40);
redRect.regX = 30;
redRect.regY = 20;
redRect.x = 200;
redRect.y = 100;

blueRect = new createjs.Shape();
blueRect.graphics.beginFill("blue").drawRect(0, 0, 60, 40);
blueRect.regX = 30;
blueRect.regY = 20;
blueRect.x = 0;
blueRect.y = 100;
//Add Shape instance to stage display list.
stage.addChild(redRect);
stage.addChild(blueRect);
//Update stage will render next frame
stage.update();

document.addEventListener("mousemove", onMouseMove);
function onMouseMove(event) {
    blueRect.x = event.offsetX;
    stage.update();
}

EaselJS 不让您知道文本和形状的宽度和高度是正确的。 这是 EaselJS 的限制,但您实际上可以自己设置这些属性:

blueRect.setBounds(x,y,width,height);

来自文档: setBounds 允许您手动指定对象的边界,该对象要么无法计算自己的边界(例如形状和文本)以供将来参考,要么因此该对象可以包含在容器边界中。手动设置的边界将始终覆盖计算的边界。

然后您可以通过请求 blueRect.getBounds(); 来请求宽度和高度;

要检查两个矩形之间的碰撞,您可以使用此代码,该代码接受两个矩形,如果它们相交则返回 true (我在 stackoverflow 上的某个地方找到了此代码)

this.checkIntersection = function(rect1,rect2) {
    if ( rect1.x >= rect2.x + rect2.width || rect1.x + rect1.width <= rect2.x || rect1.y >= rect2.y + rect2.height || rect1.y + rect1.height <= rect2.y ) return false;
    return true;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

EaselJS - 检测碰撞的最佳方法 的相关文章

随机推荐

  • if constexpr 而不是标签调度

    我想用if constexpr而不是标签调度 但我不知道如何使用它 下面的示例代码 template
  • 使用 argdo 打开多个文件时,vim 中未打开语法突出显示

    我经常从 MacVim 中一次打开整组文件 为此 我通常使用以下命令 args PATTERN argdo tabedit 这会将工作目录中与模式匹配的所有文件加载到参数列表中 然后在单独的选项卡中将它们全部打开 当我执行此操作时 语法突出
  • Django 日志:记录到文件的任何教程

    我正在开发一个 django 项目 但还没有开始 从事该项目的开发人员离开了 在知识转移过程中 有人告诉我所有事件都记录到数据库中 我发现数据库接口对于搜索日志没有用处 有时它们甚至不记录 我可能是错的 我想知道是否有一个简单的教程来解释如
  • 无法循环文件名中带有空格的文件、Windows 批处理文件和图像 magick

    我正在尝试循环一堆文件夹 创建子文件夹 然后循环文件 使用 imagemagick 转换它们并将它们放入新的子文件夹中并重命名 某些文件名称中包含空格并导致错误 我该如何解决此问题 错误信息 convert unable to open i
  • Magento - 如何创建“十进制”属性类型

    我在网上做了一些搜索 但还没有找到这个问题的任何答案 我遇到的情况是 我需要一个十进制值的产品属性 它必须支持负数和正数 并且还必须可排序 由于某种原因 Magento 没有 十进制 属性类型 唯一使用小数值的类型是 Price 但不支持负
  • C++中可以使用字典吗

    我一直在查找 C 中的字典 它们似乎非常有用 并且想知道是否可以在 C 中使用它们 因为我尝试在 C 中搜索字典 但似乎没有与我相同的字典可以找到 是否有某种类型的库可以下载并包含到项目中 或者是否有一个函数可以用不同的名称执行相同的操作
  • Ruby on Rails:跳过种子的“validate_on_create”语句

    我的一个控制器中有一个 validate on create 语句 我希望跳过所有种子数据 有哪些解决方案可以使我的种子文件中的 create 语句跳过此验证 我当前的解决方案是每次运行 rake db seed 时注释掉验证 还有更聪明一
  • Haskell 中的 xor 和 or 有什么区别

    So if xor回报True当且仅当其操作数之一恰好是True这样 xor Bool gt Bool gt Bool xor True True False xor True False True xor False True True
  • 模板函数中的输出向量

    这一段代码报错 template
  • 来自 Unity 配置文件的 RegisterType

    我正在从 Prism 4 迁移到 Prism 7 1 我似乎找不到已从最新 Prism 版本中删除的ConfigureContainer 方法 过去 我曾使用这种方法从文件系统加载Unity配置 对于最新版本的 Prism 库 这似乎是不可
  • isdigit 无法正常工作

    我试图通过迭代整个字符串并输出整数来测试字符串是否包含整数 我的方法涉及将字符串转换为 c string atoic 字符串 然后使用测试它是否是整数isdigit功能 由于某种未知的原因 isdigit尽管函数遇到整数 但它返回 fals
  • 如何选择要在 Ruby 中动态包含的模块版本?

    我正在编写一个小型 Rub y 命令行应用程序 它使用fileutils来自文件操作的标准库 根据用户调用应用程序的方式 我想包括FileUtils FileUtils DryRun or FileUtils Verbose Since i
  • ggplot2:在右侧为一个变量创建第二个 y 轴

    我有一个数据框 在同一时间范围内包含 3 个不同的变量 前两个变量具有相同的比例 股票指数值 可以用 y 轴来说明 第三个变量是利率 范围仅为 0 到 7 因此我专注于在图的右侧创建一个额外的 y 轴来说明它 但经过两天的尝试和失败后 我在
  • 使用powershell获取csv文件中的特定单元格值

    我是 powershell 的新手 不经常使用它 我需要使用 powershell 从 csv 文件输出单元格 A5 的值 我的文件 col1 col2 col3 col4 1002 1005 1006 1007 需要 A1 单元格中的值
  • 无法使用 getDeclaredFields() 检索 Scala 类的字段

    我正在尝试将 Java 库 JOhm 与 Scala 一起使用 并注意到当该库尝试使用以下内容读取我的 Scala 类的字段时它会失败model getClass getDeclaredFields 然后我决定尝试在 Scala 解释器中用
  • 如何在输入按钮中的访问键下划线

    我有一个按钮 我想在访问密钥字母下划线 u u 不起作用 并且C 818 C 改变字体 应该是verdana
  • 带有自定义参数的 Html.DropDownListFor()

    我想在 HTML 帮助程序中添加扩展方法来生成这样的选择和选项
  • 如何使用默认集合和数据创建 Mongo Docker 镜像?

    我需要这里的支持来构建我自己的 mongo docker 镜像 我有一个脚本列表 用于创建数据并将其插入 MongoDB 这些脚本应在我的 Dockerfile 中调用 以提供具有默认集合和数据的 docker 映像 这是我的 Docker
  • 具有依赖预设参数的函数

    请考虑简单的功能 def fun x y param1 10 param2 param1 3 do something Where param1 and param2不应是必需的 但可以由用户设置 如果param2未设置 值取决于param
  • EaselJS - 检测碰撞的最佳方法

    我正在尝试为我的 easelJS 小应用程序找到一种碰撞检测的好方法 我刚刚使用 createjs Shape 创建了 2 个矩形 但是创建一个矩形形状后 API 不让我知道矩形的宽度和高度 我不知道为什么 EaselJS Shape 有一