我在每个帧上进行了几十次碰撞检测,以及当角色向左或向右移动时几十个对象平移(但仅在靠近屏幕边缘时)。它实际上在FlashPlayer21中发布时效果很好但是如果我使用Adobe AIR,它会变得非常慢。这只发生在角色向右并且背景向左移动时(因此"相机向右平移")。当角色离开时,它是超级流畅的。我在这里或那里使用几乎相同的代码,但不同的符号(+/-)除外。也许我不应该担心这个,或者我可能需要在我的iphone或平板电脑上进行测试,但是因为我不知道该怎么做但是...不是全部的Adobe有这些AIR用于桌面和内部iOS移动设备模拟器吗?
以下是相关代码:
private function panScreen2(c:Runner,speedFac:Number,...depthSets):void{
if (c == char){ // if the c:Runner object is the character in play
// I use drivers to cause objects that can only be displayed on every 8th pixel to still recieve floating point number values for animation
var cDepth: int = c._drives.parent.parent.getChildIndex(c._drives.parent);
// "camera" pans to left as character goes left
if (c.x <= 500 && c._drives._facingRight == false && c._speed !=0)
{
for (var i:int = depthSets.length-1; i >= 0; i--){
for (var j:int = depthSets[i].arr.length-1; j >= 0; j--){
var depthDif:int = -cDepth+depthSets[i].arr[j].parent.parent.getChildIndex(depthSets[i].arr[j].parent)
depthSets[i].arr[j].x -= (c._speed)*depthDif*depthSets[i].ratio-speedFac;
}
}
// "camera" pans to right as character goes right sending objects to left
} else if (c.x >= 1000 && c._drives._facingRight == true && c._speed !=0)
{
for (var i:int = depthSets.length-1; i >= 0; i--){
for (var j:int = depthSets[i].arr.length-1; j >= 0; j--){
var depthDif:int = -cDepth+depthSets[i].arr[j].parent.parent.getChildIndex(depthSets[i].arr[j].parent)
depthSets[i].arr[j].x -= (c._speed)*depthDif*depthSets[i].ratio+speedFac;
}
}
} else
{
c.x += c._speed;
}
}
}
然后我像这样调用函数:
panScreen(c,{arr:allBlocks,ratio:1},{arr:allDepth,ratio:1},{arr:allBears,ratio:1});
depthSets是我在调用函数时传递的额外参数。它是一个由数组和比率组成的对象。此函数遍历数组(实际上是Vector,如果这很重要),并将所有内容向右或向左移动一个由角色的比率和速度决定的量。非常直接,再一次,它就像Flash Player 21中的魅力一样,当角色向左移动时,它可以像黄油一样顺畅地工作,它将所有对象作为一个相机发送到右边#34;泛。那么试图向右走的是什么呢?