我根据书中的教程编写了一个侧卷轴。我的朋友做了同样的事情,他的工作非常好。
我只是真的改变了一些变量名称(我也做了不同的动画)但由于某种原因,当我的角色移动时,会有很多滞后。
只有在有墙壁时才会出现滞后现象。在舞台上。当我滚过它们时,滞后消失,然后返回。
Walls和Floors都使用相同的代码(它们都被指定为' floorObjects'变量)并使用相同的碰撞代码,但是我无法弄清楚为什么会出现延迟。
如果角色离开,角色从哪里开始(大约60x),就会出现大量的延迟。如果我走对了,就不会有太多的延迟,直到屏幕开始滚动。
离开后的滞后我相信可能与程序阻止滚动地图等有关。但是我无法弄清楚为什么在试图向右移动时存在滞后。
我已经列出了Scroll代码和主循环,如果需要我可以上传冲突代码,任何帮助将不胜感激。
滚动代码;
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();
}
}
更新:
所以我&#34;描述&#34;它,大部分时间都是在MoveCharacter()函数中使用gotoAndStop()命令。所以我删除了它,它没有任何区别,仍然滞后。然后我也移除了敌人,仍然落后。但是将质量降低到低已经以某种方式修复了它(虽然现在质量很差)关于导致滞后的原因以及如何解决它的想法?
答案 0 :(得分:1)
代码很好。
我知道什么会落后于你的Flash游戏。
这是一个猜测,我有时会收到此错误。
确保优化图片!
如果他们是从照相馆或illustratro导入的话,那么flash就必须处理那些复杂的矢量点。
对透明图像使用.png,位图也不会受到伤害。