如何将不同大小的电影剪辑彼此相邻添加? AS3

Posted

技术标签:

【中文标题】如何将不同大小的电影剪辑彼此相邻添加? AS3【英文标题】:How to add Movie Clips of different sizes next to each other? AS3 【发布时间】:2018-08-31 06:53:21 【问题描述】:

大家好,所以我遇到了一些麻烦,我有平台添加到舞台上,这些平台的宽度大小不同。我在 for Loop 中尝试做的是在舞台上当前平台 x 位置的右侧添加更多平台。我遇到了麻烦,因为它们的尺寸不同,所以它们最终在这款横向卷轴游戏中相互重叠。我将 Platform MC 对齐到注册的右侧,如下所示:

这是较小的电影剪辑:

我这样做是因为我想为平台影片剪辑中的每一帧添加不同的障碍。

添加初始平台:

private function addInitPlatform():void 
    
        platforms = new mcPlatforms();
        platforms.x = (stage.stageWidth / 2) - 380;
        platforms.y = (stage.stageHeight / 2) + 175;
        addChildAt(platforms, 1);
        aPlatformArray.push(platforms);
    

然后添加新平台:

private function addPlatForms():void
    
        //Loop trhough Platform Array
        for (var i:int = 0; i < aPlatformArray.length; i++) 
        
            var currentPlat:mcPlatforms = aPlatformArray[i];

            nOffSetX += currentPlat.width + 50;

            //Add platforms
            platforms = new mcPlatforms();
            platforms.x = nOffSetX;
            platforms.y = (stage.stageHeight / 2) + 175;
            addChildAt(platforms, 1);
            aPlatformArray.push(platforms);
            break;
        
        trace(aPlatformArray.length + " NPLATFORMS");
    

我正在尝试获取当前平台,这是我添加到舞台的最后一个平台并获取它的宽度,以便我可以在最后添加它,但它仍然在做一些奇怪的事情并且随着时间的推移重叠,

所以我想知道是否有人知道我应该如何解决这个问题,所以每当我将新平台影片剪辑添加到舞台时,它会与添加到舞台的最后一个平台影片剪辑的右侧对齐,其中有一些空间之间是这样的:

提前谢谢你!

【问题讨论】:

一种方法是使用 offsetX 在循环之前设置为零(或其他任何值)的变量。然后在循环内部:platforms.x = offsetX; offsetX += platforms.width + 50;(50 是平台之间的固定间隙)。然后在第一个平台之后添加第二个平台 50px,依此类推。 好的,我明白你的意思了。 offsetX 变量不是 AS3 中的内置变量还是说要创建我自己的 offsetX 变量? 创建自己的并将其用作每个平台的 x 值。您还可以从前一个元素 (aPlatformArray[i-1]) 中选择 .x.width,为其添加间隙值,并将其用作新平台的 x 值。 (请注意,您只能在 i > 0 时执行此操作,因为该数组在第一次运行时为空,除非您将第一个平台放在循环之前。) 好的,非常感谢您提供的所有信息。所以我可以做类似'aPlatformArray[i-1].x'的事情吗?我会试一试,看看我能想出什么。如果我遇到任何问题,你认为你可以帮忙吗?我真的很感激。 所以它仍然给我一些问题,它正在将它们添加得更远,但随着它的继续,它们变得越来越近,但不会超过两次。我更新了我的代码,所以你可以看看,也许告诉我我做错了什么。谢谢! 【参考方案1】:

我猜你的库中有许多不同的平台,并设置了链接名称。不确定您是否希望它们按随机顺序排列,但无论如何您可能想从数组中提取它们,所以:

var aPlatformsArray:Array = [p1,p2,p3]; //Platform Mc's from library
var addedPlatforms:Array = new Array(); //Array where we store added platforms

第一种方法是在添加每个平台后简单地提高偏移量:

var offsetX:Number = 0; //Starting x for the first platform

for(var i:int=0; i<10; i++)
    //Just picking random ones from the Linkage array:
    var platform:MovieClip = new aPlatformsArray[Math.floor(Math.random() * aPlatformsArray.length)]();
    platform.y = 200;
    platform.x = offsetX;
    offsetX = platform.x + platform.width + 50;
    addChild(platform);
    addedPlatforms.push(platform);

实际上,您不必担心第二种方法,因为它在技术上较慢。

但主要区别在于,现在我们有一个用于选择平台到舞台的阵列,以及另一个用于推送添加平台的阵列。此时不需要第二个数组,但稍后您可能会需要它。

对于偏移计算,我们使用“前一个”元素的xwidth + 固定间隙。

如果您只需要平台的固定顺序,您可以使用与之前类似的循环条件,并以正确的顺序选择平台:

for(var i:int=0; i<aPlatformsArray.length; i++)
    var platform:MovieClip = aPlatformsArray[i];

让我知道这是否有效或我有什么问题。

【讨论】:

完美的人非常感谢。非常感谢您的所有帮助!在我修复了一些代码之后,offSetX 终于可以正常工作了。 嘿 Kaarto 也许你还能帮我。这种方法非常适合同时添加到舞台的一定数量的平台。但是如果我添加了一些被移除和拼接后想要添加更多平台到舞台上怎么办。我尝试在它们的末尾添加更多,但这个距离现在与最后添加的平台相去甚远。 您应该可以将下一个平台添加到addedPlatforms[addedPlatforms.length - 1].x + 50。如果要添加具有相同循环的新集合,请将此值设置为第一个 offsetX 很棒的人。在我写完之后想通了,但你刚才描述的方式看起来更容易。再次感谢您的帮助,非常感谢!

以上是关于如何将不同大小的电影剪辑彼此相邻添加? AS3的主要内容,如果未能解决你的问题,请参考以下文章

Flash as3如何通过鼠标事件停止播放子电影剪辑?

如何在按钮单击时插入电影 - AS3

如何获取动态创建的电影剪辑或名称的实例名称?

如何从 doc 类 AS3 定位舞台上的影片剪辑?

检查电影剪辑的一部分何时离开舞台

如何以静默方式预加载有声音的影片剪辑?