Actionscript 3.0 Flash 中精灵的碰撞检测

2023-12-07

我正在 AS3.0 中制作一个类似 achtung die kurve 的游戏。到目前为止,我已经完成了 4 个不同玩家的动作,效果还不错。

我现在要进行碰撞检测,以测试“蠕虫”(可以这么说)是否正在相互碰撞或与自己的尾巴碰撞。

据我了解,如果我使用 hitTestObject();它将使用整个对象的注册区域,这将是一个巨大的问题,因为此注册会进行包含所有对象的 4 面注册。因此,如果使用此功能,它只需进入该矩形就会发生“碰撞”,而不是击中实际的蠕虫。这理解正确吗?

我一直在研究不同的碰撞检测方法,但似乎无法找到最适合我的项目的方法。

我的想法是检查“蠕虫”是否在白色背景上绘制新的精灵。如果不是,那么它一定是撞到了什么东西。

您可以在这里查看我如何使用我的代码:链接到 .fla 文件的 .as 格式的代码

抱歉我的问题表述不当,希望它有一定道理。 任何帮助是极大的赞赏!!

最好的问候 - 杰斯珀


如果你想要的话试试这个功能像素完美碰撞检测高效的 CPU 使用率:

trace("Collided: " + (areaOfCollision(mc1, mc2) != null));
trace("Where: " + areaOfCollision(mc1, mc2));

function areaOfCollision(object1:DisplayObject, object2:DisplayObject, tolerance:int = 255):Rectangle {
    if (object1.hitTestObject(object2)) {
        var limits1:Rectangle = object1.getBounds(object1.parent);
        var limits2:Rectangle = object2.getBounds(object2.parent);
        var limits:Rectangle = limits1.intersection(limits2);
        limits.x = Math.floor(limits.x);
        limits.y = Math.floor(limits.y);
        limits.width = Math.ceil(limits.width);
        limits.height = Math.ceil(limits.height);
        if (limits.width < 1 || limits.height < 1) return null;

        var image:BitmapData = new BitmapData(limits.width, limits.height, false);
        var matrix:Matrix = object1.transform.concatenatedMatrix;
        matrix.translate(-limits.left, -limits.top);
        image.draw(object1, matrix, new ColorTransform(1, 1, 1, 1, 255, -255, -255, tolerance));
        matrix = object2.transform.concatenatedMatrix;
        matrix.translate(-limits.left, -limits.top);
        image.draw(object2, matrix, new ColorTransform(1, 1, 1, 1, 255, 255, 255, tolerance), BlendMode.DIFFERENCE);

        var intersection:Rectangle = image.getColorBoundsRect(0xFFFFFFFF, 0xFF00FFFF);
        if (intersection.width == 0) return null;
        intersection.offset(limits.left, limits.top);
        return intersection;
    }
    return null;
}

预赛成功后hitTestObject(),此函数在后台从分别涂有不同颜色的两个对象的形状中获取快照,然后将它们与新对象的颜色相交重叠,返回Rectangle所产生的形状。非常酷。

要了解更多信息像素完美碰撞检测你可以谷歌碰撞检测后跟以下名称之一:“ActionScript 人", "特洛伊·吉尔伯特", "大道 (wim)", "格兰特·斯金纳 (gSkinner)" or "塞尼奥古斯“。顺便说一句,这些人都是很棒的 AS3 参考资料。

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

Actionscript 3.0 Flash 中精灵的碰撞检测 的相关文章

  • 闪存和 CORBA

    如何让 AS3 和 或 Flex AIR 应用程序与 CORBA 应用程序进行通信 在有人为 Flex 编写符合 CORBA 的库 您可能愿意自己做 之前 您最好的选择可能是构建一个充当桥梁的 包装器 Web 服务 可通过标准 Flex W
  • 从 Air Native 扩展返回结构

    是否可以从本机代码返回结构 返回 int 或 boolean 相对简单 但是如何将更复杂的结构返回给动作脚本 您可以返回任何可以在本机代码中表示为 FREObject 的对象 这实际上包括任何 Actionscript 类或 Actions
  • Random.Next() 的 Actionscript 3 实现

    我想知道 AS 3 中是否有很好的 Random Next 实现 基本上想要生成一系列给定种子的随机数 有时 最小和最大限制 类似于 C System Random 类 Random random new Random return ran
  • 在类之间调度事件

    我有一个自定义事件类 public class FFTDrawEvent extends Event public static const DRAW EVENT String drawEvent private var param Arr
  • 如何从 JW Player 5.1 中提取 .flv 流?

    问题是我的互联网连接速度很慢 并且视频不像 YouTube 那样缓冲 因此我想知道是否可以提取 JW Player 中正在流式传输的 flv 文件的 url 并直接下载它 做了一些初步研究 我发现了以下信息 主要视频网址 http ijf1
  • Qemu flash 启动不起作用

    我有一本相当旧的 2009 年出版 嵌入式 ARM Linux 书 其中使用u boot and qemu 的用法qemu与u boot书中对二进制的解释如下 qemu system arm M connex pflash u boot b
  • 在 C# 中加密并在 Flex 中解密

    我需要解密 Flex 中的一些数据 这些数据是用 C 加密并写入文件的 为了简单起见 我选择使用 as3crypto As3 库和 Bruce Schneier C 库 AS3 as3加密链接 http code google com p
  • Microsoft Surface 支持 Flash 网站吗? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我搜索过谷歌但没有找到明确的答案 我或我工作的 Flash 网站 应用程序可以在 Microsoft Surface 平板电脑上运行吗 看来微软 Su
  • 使用jquery调用AS3外部接口

    我正在使用ExternalInterface 调用嵌入在html 页面中的Flash 应用程序 以下代码工作正常 我正在使用按钮进行测试 document ready function button click function var a
  • ActionScript、NetStream.Play.Failed iOS AIR 移动设备

    我正在尝试以类似于 Tiberiu Ionu Stan http stackoverflow com questions 2036107 aac mp4 not working in actionscript 3s netstream 的方
  • Flash - HTTP 请求在本地主机上不起作用

    首先 我试图修复一些我一开始就没有构建的东西 项目负责人向我保证 当他离开时 它工作得很好 尽管自从他离开后我从未接触过的版本似乎已经同样的问题 一般来说 我对编程也有点陌生 所以如果我在第一篇文章中遗漏了重要信息 请告诉我 我会尝试添加更
  • AS3:如何获取文本字段中某些文本的左上角和确切的宽度和高度?

    我们正在努力获得一个Rectangle代表文本的精确 边界TextField 尽可能准确 拍摄这张图片 利用我目前的知识 我可以检索blue上面的矩形如下所示 var textRect Rectangle new Rectangle fie
  • 如何在Flash CS5中制作通用暂停按钮?

    我正在尝试在 Flash 中制作一个按钮来暂停我的文件中正在运行的所有影片剪辑 这些影片剪辑都不是我的主时间线中的补间 它们都有自己的单独时间线 每个移动剪辑都由一个按钮触发 该按钮告诉剪辑开始播放 因此 如果有人可以帮助我创建这个暂停按钮
  • 如何在 Flex 中对 ArrayCollection 进行排序

    我想按 fieldName 升序对 Arraycollection 进行排序 这是我的代码 我想知道它是否正确 你有什么建议吗 public static function arrayCollectionSort ar ArrayColle
  • 如何打开/关闭 iPhone 相机闪光灯 swift 2?

    我正在寻找如何打开 关闭 iPhone 的相机闪光灯 我发现了这个 IBAction func didTouchFlashButton sender AnyObject let avDevice AVCaptureDevice defaul
  • 如何进行 Flex 日期扣除和添加

    在 Flex 中 我试图进行日期扣除和添加 但找不到方法 例如 公共 var dateNow Date new Date 如何获得比现在日期早 3 个月的日期 谢谢 您可以为此使用 Date 构造函数 Date 构造函数的第一个参数采用年份
  • AS3 - for (... in ...) 与 for every (... in ...)

    以下代码执行完全相同的操作 之间有区别吗for each and for in var bar Array new Array 1 2 3 for var foo in bar trace foo for each var foo2 in
  • 如何判断一个字符串是否包含特定子串

    给定一个字符串A 如何确定该字符串是否包含子字符串 video x flv A indexOf video x flv gt 0
  • 有没有其他方法可以在delphi上观看youtube视频?

    我看到http www delphiflash com demo youtube video http www delphiflash com demo youtube video关于如何在 delphi 上加载 flash 视频 但它不是
  • 为什么 swfloader 不工作?

    我正在尝试使用 mxml swfloader 组件从以下 url 加载外部 Flash 但它不加载任何内容 我正在使用 FlashBuilder 4 5 http somesite com en interface swf token 12

随机推荐