【问题标题】:Screen Scrolling not working for Right and Bottom edges AS3屏幕滚动不适用于右边缘和下边缘 AS3
【发布时间】:2013-08-04 15:13:34
【问题描述】:

您好,以下代码在我的游戏中滚动到屏幕的左边缘或右边缘时有效;但是,当到达“地图”的边缘时滚动到屏幕的右侧或底部边缘时,我能够看到地图边缘之外,即我看到的是空白,即舞台的颜色。然而,当滚动到地图的左边缘或上边缘时,我无法看到地图边缘之外的东西。

public function scroll_screen():void { //scrolling left, right, up, down

     var stagePositionX:Number = container.x+player.x;
     var rightEdge:Number = stage.stageWidth-edgeDistance;
     var leftEdge:Number = edgeDistance;

     var stagePositionY:Number = container.y+player.y;
     var bottomEdge:Number = stage.stageHeight-edgeDistance;
     var topEdge:Number = edgeDistance;

        //horizontal scrolling
        if (stagePositionX > rightEdge) {
            container.x -= (stagePositionX-rightEdge);
            if (container.x < -(container.width-stage.stageWidth)) container.x = -(container.width-stage.stageWidth);
        }
        if (stagePositionX < leftEdge) {
            container.x += (leftEdge-stagePositionX); 
            if (container.x > 0 )container.x = 0;

        }

        //vertical scrolling
        if (stagePositionY > bottomEdge) {
            container.y -= (stagePositionY-bottomEdge);
            if (container.y < -(container.height-stage.stageHeight)) container.y = -(container.height-stage.stageHeight);
        }
        if (stagePositionY < topEdge) {
            container.y += (topEdge-stagePositionY);
            if (container.y > 0) container.y = 0;
        }
    }

希望有道理,谢谢

【问题讨论】:

    标签: actionscript-3 scroll enterframeevent


    【解决方案1】:

    **更新**

    您的问题是,当您的形状远离初始矩形时,container.width 会发生变化。

    如果您创建一个var initialContainerWidth 并在那里保存您的容器宽度,直到您向其中添加任何形状,然后使用这个保存的变量而不是container.width,它会正常工作。或者您可以将飞行形状直接添加到舞台上,这样它们就不会扩展容器的大小。

    你可以硬编码 1386 而不是 container.width 来检查它。

    【讨论】:

    • 嗨,不幸的是,这并没有解决问题,它仍然在制造同样的问题。与水平滚动相关的代码取自一本书。我不确定为什么它在我的游戏中不能正常工作。有任何想法吗?有没有更好的方法来实现滚动效果?谢谢
    • 这是书上的代码var stagePosition:Number = gamelevel.x+hero.mc.x; var rightEdge:Number = stage.stageWidth-edgeDistance; var leftEdge:Number = edgeDistance; if (stagePosition &gt; rightEdge) { gamelevel.x -= (stagePosition-rightEdge); if (gamelevel.x &lt; -(gamelevel.width-stage.stageWidth)) gamelevel.x = -(gamelevel.width-stage.stageWidth); } if (stagePosition &lt; leftEdge) { gamelevel.x += (leftEdge-stagePosition); if (gamelevel.x &gt; 0) gamelevel.x = 0; }
    • 嗯,现在我明白了。代码似乎是正确的(忘记我的更改)。这条if (container.x &lt; -(container.width-stage.stageWidth)) container.x = -(container.width-stage.stageWidth); 行可防止水平线向左移动,因此您不会在右侧看到任何空白。你确定你的关卡/阶段没有缩放吗?您正在为空中移动编写应用程序吗?
    • 容器内有很多影片剪辑正在缩放/转换/旋转,我注意到删除这些似乎已经解决了问题。但是,我该如何解决这个问题?此应用程序不适用于空中移动。谢谢
    • 您只需要检查您的容器的右侧是否不在舞台右侧边界的左侧。如果您的容器宽度只是简单地缩放,您可以将其除以scaleX 以接收和使用原始值。或者您可以使用localToGlobalglobalToLocal 函数将容器内的坐标可靠地转换为舞台坐标。
    猜你喜欢
    • 2015-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-19
    • 1970-01-01
    • 2018-10-30
    • 2013-12-16
    相关资源
    最近更新 更多