【问题标题】:Detecting point where two objects collide检测两个物体碰撞的点
【发布时间】:2012-06-28 12:02:19
【问题描述】:

我完全是 Flash 和 Actionscript 的初学者,如果我的问题很愚蠢,我很抱歉。 我必须做一个平台游戏——我打算写一些像冰塔这样的东西——我的角色正在从一个平台跳到另一个平台,以到达某物的塔顶。这是我的问题 - 我想让角色只能从顶部跳到平台上,但如果他从底部或侧面与平台碰撞,我希望他弹跳(我希望你明白我的意思想要的意思)。

因此,要执行此类操作,我需要能够检测这两个对象究竟在哪里发生碰撞 - 我想到的唯一解决方案是将每个平台的坐标保存在某个数组中,并将它们与角色每次跳跃时的位置,但这似乎并不正确。有没有更好的方法来解决这个问题?

如果有任何建议,我将不胜感激。

PS。对不起我的英语

【问题讨论】:

    标签: actionscript-3 flash flash-cs5


    【解决方案1】:

    您可以使用flixelflashpunk 等游戏库。他们都很棒。

    基本上,您需要遍历您的角色可以碰撞的所有对象。您可以使用 .hitTestObject() 粗略确定您的角色是否与任何对象发生碰撞。此后,您可以获取角色在舞台上的坐标和尺寸,并将它们与被击对象的坐标和尺寸进行比较以确定方向。

    所以在伪代码中

    for each (var platform:DisplayObject in platforms) {
        if (character.hitTestObject(platform)) {
            if (collideFromBottom || collideFromSide) { 
                // allow movement 
            }
            if (collideFromTop) { 
                // stop downward velocity 
            }
            break; // might as well, as you have detected the collision
        }
    }
    

    CollideFromBottom 将比较您角色的顶部与平台的底部。请记住,作为 Sprite,玩家和平台都具有 [x,y] 属性和 [width,height],允许您确定坐标。

    附:这个问题应该在gamedev.stackexchange.com问过

    【讨论】:

    • 感谢您的回答,但我还有一个问题 - 当所有平台都是同一个对象的一部分时,有没有办法做到这一点(我有一个名为“平台”的影片剪辑对象和它由多个矩形组成),还是必须分开?
    • 还有一件事 - DisplayObject.x 到底是什么意思? (左上角的x坐标还是什么?)
    • DisplayObject.x 是左侧相对于其父级的像素数,而 DisplayObject.y 是从顶部开始的,因此从 0,0 到 100,100 的线将是从顶部绘制的对角线左角明白了吗?
    • 您应该能够通过遍历其子项并使用 getChildAt() 函数来获取影片剪辑中的矩形。 help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/…
    • DisplayObject.x 和 DisplayObject.y 一起构成了对象相对于其容器的原点。通常它是左上角坐标,除非你在 x
    【解决方案2】:

    我建议你使用像 Box2D( 看例子),而不是从头开始创建一些基于 hitTest colsion 的游戏。
    您遇到严重的代码/设计问题而将项目搁置一旁的可能性很大。

    网上有很多很好的教程,这里有一个很好的资源——使用 Box2d 创建横向滚动游戏:

    1. Part 1
    2. Part 2

    【讨论】:

      猜你喜欢
      • 2014-04-19
      • 2015-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多