我一直在根据书中的教程编写横向滚动条。我的朋友也这样做了,他的工作很完美。
我只是真正改变了一些变量名称(我也做了不同的动画),但由于某种原因,当我的角色移动时,会有很大的延迟。
然而,只有在舞台上有“墙”时才会出现滞后。当我滚动过去时,滞后消失,然后返回。
Walls 和 Floors 都使用相同的代码(它们都被分配为“floorObjects”变量)并使用相同的碰撞代码,但是我无法弄清楚为什么会涉及延迟。
如果角色向左移动,则从角色开始的位置(大约 60 倍)开始,会有大量的滞后。如果我向右走,则不会有太多延迟,直到屏幕开始滚动。
我认为向左移动的滞后可能与程序阻止滚动地图等有关。但我无法弄清楚为什么尝试向右移动时会出现滞后。
我已经列出了滚动代码和主循环,如果需要,我可以上传冲突代码,任何帮助将不胜感激。
滚动代码;
public function scrollGame()
{
var stagePosition:Number = gameLevel.x + player.mc.x;
var rightEdge:Number = stage.stageWidth - edgeDistance;
var leftEdge:Number = edgeDistance;
//Scroll the GameLevel to the Left if player moves right
if(stagePosition > rightEdge)
{
gameLevel.x -= (stagePosition - rightEdge);
//Prevent the game scrolling off the stage
if (gameLevel.x < -(gameLevel.width-stage.stageWidth))
gameLevel.x = -(gameLevel.width-stage.stageWidth);
}
//Scroll the GameLevel to the right if player moves left
if(stagePosition < leftEdge)
{
gameLevel.x += (leftEdge - stagePosition);
//Prevent the game scrolling off the stage
if(gameLevel.x > 0)
gameLevel.x = 0;
}
}
主循环:
public function gameLoop(e:Event)
{
//Get Time Difference
if(lastTime == 0) lastTime = getTimer();
var timeDiff:int = getTimer() - lastTime;
lastTime += timeDiff;
//Game Cycle tasks
//Only perform if in play mode
if(gameMode == "play")
{
moveCharacter(player, timeDiff);
moveEnemies(timeDiff);
checkCollisions();
scrollGame();
}
}
更新:
所以我“分析”了它,大部分时间都花在 MoveCharacter() 函数中,使用 gotoAndStop() 命令。所以我删除了它,它没有任何区别,仍然滞后。然后我也移除了敌人,仍然滞后。但是将质量降低到低质量已经以某种方式解决了它(尽管现在质量很差)关于导致延迟的原因以及如何解决它的任何想法?