如果需要,向右或向左滚动

时间:2014-07-19 07:09:48

标签: actionscript-3 flash game-engine

我正在制作一款平台游戏。 我的游戏等级非常大,我想在玩家走路时让游戏等级滚动。

到目前为止它滚动,但滚动速度不够快,当玩家向右走时,他走出屏幕。

你知道如何加快滚动速度以防止角色超出屏幕中间吗?

这是滚动屏幕的代码:

// scroll to the right or left if needed
public function scrollWithHero() {
    var stagePosition:Number = gamelevel.x+hero.mc.x;
    var rightEdge:Number = 400-edgeDistance;
    var leftEdge:Number = edgeDistance;
    if (stagePosition > rightEdge) {
        gamelevel.x -= (stagePosition-rightEdge);
        if (gamelevel.x < -(gamelevel.width-stage.stageWidth)) gamelevel.x = -(gamelevel.width-stage.stageWidth);
    }
    if (stagePosition < leftEdge) {
        gamelevel.x += (leftEdge-stagePosition);
        if (gamelevel.x > 0) gamelevel.x = 0;
    }
}

1 个答案:

答案 0 :(得分:0)

您可以通过两种方式滚动屏幕。

第一种是以与玩家移动完全相同的速度滚动。这意味着你并没有真正移动玩家,而是滚动世界(玩家将保持在屏幕上完全相同的位置)。这不是一种非常“优雅”的方式,但许多游戏都使用它并且它有效。

第二种(更好的是,恕我直言)方式是定义屏幕中心周围的某些区域,并允许玩家在该区域内移动。只有当玩家到达该区域的末端(向左/向右)时才开始滚动。这提供了更加平滑的效果。

因此,为了实现该区域,您需要一个大小(例如100)作为示例,300是屏幕的中心。所以在这种情况下你的“区域”将是250到350.现在你需要检测玩家何时超出这个区域,然后滚动(而不是移动玩家)。这可以实现如下:

const CENTER:Number = 300;          // center position on screen
const SIZE:Number = 100;            // size of the movement area 
const LEFT:Number = CENTER - (SIZE/2);  // left of movement area
const RIGHT:Number = CENTER + (SIZE/2); // right of movement area

public function scrollWithHero() {

   var scrollAmount:Number = 0;   // holds amount to scroll by (init to none)
   if ( hero.mc.x < LEFT )  {     // if left of movement area reached
     scrollAmount = LEFT - hero.mc.x;  // calculate scroll amount
     hero.mc.x = LEFT;            // keep player at left of movement area
   }
   else if ( hero.mc.x > right )  {  // else if right of movement area reached
     scrollAmount = hero.mc.x - right;  // calculate scroll amount
     hero.mc.x = RIGHT;            // keep player at right of movement area
   }

   // here you can use scrollAmount to scroll the level, and the player's 
   // position to calculate their offset into your level
}

这是计算相关值的基本示例,您仍然需要使用它们,但这应该说明滚动的工作原理。

您应该尝试使用尺寸来查找对您的实施感觉良好的区域。此外,如果您设置SIZE=0,则播放器将保留在屏幕的中央(即它将按照第一个实现中的描述工作)。