【问题标题】:How to optimize this piece of AS3 code?如何优化这段 AS3 代码?
【发布时间】:2014-04-10 19:34:51
【问题描述】:

我正在使用 as3 在 flash AIR 中为 android 制作游戏,在一个关卡中,我的角色必须收集 9 个硬币。问题是我使用了 hitTest 如果它是真的,我改变了 2 扇门的 y 位置,这会导致滞后,即门的移动。这是我使用的代码

if (coin1.hitTestObject(heroj)) {
        sndcoin.play();
        coin1.y=-100;
        opengate();
    }

在我创建的 opentgate() 函数中

gatedoor1.y+=4;
gatedoor2.y-=4;

这导致每次收集硬币都会延迟 0.3-0.5 秒,有没有办法加快速度?

【问题讨论】:

  • 您提供的任何提示都没有降低性能 - 这两行 allopengate() 所做的吗?
  • 这只是一个猜测,但您是否尝试过禁用 sndcoin.play();看看它是否是减慢速度的代码。如果是这种情况,您可能需要降低声音质量或压缩比,以免占用过多的 CPU。

标签: android actionscript-3 flash


【解决方案1】:

硬币是非常原始的物体,命中测试可以计算为距离。如果英雄离硬币足够近,你可以认为它被击中了。

var dx: Number = heroj.x - coin1.x;
var dy: Number = heroj.y - coin1.y;
const coinRadius: int = 5;

if(dx*dx + dy*dy <= coinRadius*coinRadius ){
    trace("Hero is catched coin");
}

第二时刻,命中测试成功后,释放资源,不再检查命中测试。

【讨论】:

  • 你可以避免 Math.sqrt a²+b²=c² if( dx*dx + dy*dy &lt;= coinRadius*coinRadius ){
  • 是的,没有静态会更快。
  • 只需使用 hitTestObject,就像 Nicolas 说的,硬币非常原始,粗暴的 hitTest 碰撞处理程序不会伤害任何人。
猜你喜欢
  • 1970-01-01
  • 2013-02-15
  • 2016-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多