我正在制作一款平台游戏。 我的游戏等级非常大,我想在玩家走路时让游戏等级滚动。
到目前为止它滚动,但滚动速度不够快,当玩家向右走时,他走出屏幕。
你知道如何加快滚动速度以防止角色超出屏幕中间吗?
这是滚动屏幕的代码:
// 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;
}
}
答案 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
,则播放器将保留在屏幕的中央(即它将按照第一个实现中的描述工作)。