首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在AS3中使用QuadTree进行碰撞检测

在AS3中使用QuadTree进行碰撞检测
EN

Stack Overflow用户
提问于 2013-04-29 20:54:23
回答 1查看 456关注 0票数 2

好的。我设法为我的碰撞检测算法制作并使用了QuadTree,它工作得很好。我有我的敌人,并将他们放在QuadTree中,然后检索可能与我的英雄发生冲突的候选人。这就是hitTestObject()多对一。

我遇到的问题是如何快速测试一些敌人是否与我的英雄的子弹相撞。大概有4-6颗子弹同时出现在舞台上。在这种情况下,我有4-6颗hitTstObject子弹对准许多敌人物体,这反过来给了我循环循环,所以即使在一段时间后使用四叉树,事情也会在舞台上开始滞后:)

我使用了这个教程quadtree in java来开发算法,但它只在上面的情况下工作得很好。在这种情况下我应该怎么做?使用另一种算法进行多次重复还是多次?

大致代码是这样的:

代码语言:javascript
运行
复制
 bulletsQuadTree.clear();
 for (var bIndex:uint; bIndex < allEnemies.length; bIndex += 1 )        
 {
  bulletsQuadTree.insert(allEnemies[bIndex]);
 }

for (var bc:uint = 0; bc < bullets.length; bc += 1 )
{
    var enemiesCollideBullets:Array = new Array();
    bulletsQuadTree.retrieve(enemiesCollideBullets, bullets[bc]);

    for (var dc:uint = 0; dc < enemiesCollideBullets.length; dc += 1 )
    {
        if (enemiesCollideBullets[dc].hitTestObject(bullets[bc]))
        {
            enemiesCollideBullets[dc].destroy();
            enemiesCollideBullets.splice(dc, 1);
        }
    }
}

所以这发生在每一帧上,每一帧有许多操作:(

每一颗子弹都被视为英雄,每一颗可能发生碰撞的子弹都会返回一组敌人。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-30 01:12:43

如果您想要提高此循环的性能,请更改以下行:

代码语言:javascript
运行
复制
enemiesCollideBullets[dc].hitTestObject(bullets[bc]);

actionscript点击测试函数速度较慢。对于子弹来说,更好的方法是检查距离。

代码语言:javascript
运行
复制
var distanceSquared:number = (bullet.width/2 + object.width/2) * (bullet.width/2 + object.width/2);
if((bullet.x - object.x)* (bullet.x - object.x) + (bullet.y - object.y)* (bullet.y - object.y) < distanceSquared) {
// its a hit!
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16279151

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档