Как добавить мувиклипы разного размера рядом друг с другом? AS3

Привет всем, у меня возникли некоторые проблемы с этим. У меня есть платформы, которые я добавляю на сцену, которые имеют разные размеры по ширине. Что я пытаюсь сделать в моем цикле for, так это добавить больше платформ справа от текущей позиции платформ x на сцене. У меня проблемы, потому что они разного размера, поэтому в этой игре с боковой прокруткой они перекрывают друг друга. Я выравниваю MC платформы справа от регистрации следующим образом:

введите здесь описание изображения

вот клип меньшего размера:

введите здесь описание изображения

Я делаю это, потому что хочу добавить различные препятствия к каждому кадру внутри видеоклипа Platform.

добавить Исходная платформа:

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");
    }

Я пытаюсь получить текущую платформу, которая является последней платформой, которую я добавил на сцену, и получить ее ширину, чтобы я мог добавить ее в конце, но она все еще делает что-то странное и перекрывается с течением времени,

Поэтому мне было интересно, знает ли кто-нибудь, как мне решить эту проблему, поэтому всякий раз, когда я добавляю новый ролик платформы на сцену, он выравнивается по правой стороне последней платформы. Видеоклип добавляется на сцену с некоторым пространством между ними, например так :

введите здесь описание изображения

Заранее спасибо!


person Nathan    schedule 21.03.2018    source источник
comment
Один из способов - использовать переменную offsetX, которую вы установили в ноль (или что-то еще) перед циклом. Затем внутри цикла: platforms.x = offsetX; offsetX += platforms.width + 50; (50 — фиксированный промежуток между платформами). Затем вторая платформа добавляется через 50 пикселей после первой и так далее.   -  person kaarto    schedule 22.03.2018
comment
Ладно, я вроде понимаю, что ты имеешь в виду. Разве переменная offsetX не встроена в AS3, или вы предлагаете создать мою собственную переменную offsetX?   -  person Nathan    schedule 23.03.2018
comment
Создайте свой собственный и используйте его как x-значение для каждой платформы. Вы также можете выбрать .x и .width из предыдущего элемента (aPlatformArray[i-1]), добавить к нему значение промежутка и использовать его как значение x для новой платформы. (Обратите внимание, что вы можете сделать это только тогда, когда i > 0, поскольку этот массив пуст при первом запуске, если только вы не поместите первую платформу перед циклом.)   -  person kaarto    schedule 23.03.2018
comment
Хорошо! Большое спасибо за всю информацию. Так что я мог бы сделать что-то вроде «aPlatformArray[i-1].x», как вы говорите? Я попробую и посмотрю, что я могу придумать. Если я столкнусь с какими-либо проблемами, вы думаете, вы могли бы помочь? Я был бы очень признателен.   -  person Nathan    schedule 24.03.2018
comment
Таким образом, он по-прежнему вызывает у меня некоторые проблемы, он добавляет их дальше, но по мере того, как он продолжается, они становятся все ближе и ближе, и это не работает более двух раз. Я обновил свой код, чтобы вы могли взглянуть и, возможно, сказать мне, что я делаю неправильно. СПАСИБО!   -  person Nathan    schedule 24.03.2018


Ответы (1)


Я предполагаю, что у вас есть куча разных платформ в вашей библиотеке с установленными именами Linkage. Не уверен, хотите ли вы, чтобы они были в случайном порядке или нет, но в любом случае вы, вероятно, захотите забрать их из массива, поэтому:

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);
}

И на самом деле вам не нужно беспокоиться о втором методе, поскольку он технически медленнее.

Но главное отличие в том, что теперь у нас есть массив, в котором мы выбираем платформы на сцену, и другой массив, в котором мы проталкиваем добавленные платформы. На данный момент второй массив не нужен, но, возможно, он понадобится вам позже.

А для расчета смещения мы используем x и width "предыдущего" элемента + фиксированный зазор.

И если вам просто нужен фиксированный порядок для платформ, вы должны использовать аналогичные условия для цикла, как вы уже делали, и выбирать платформы в правильном порядке:

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

Дайте мне знать, если это работает или я что-то не так.

person kaarto    schedule 24.03.2018
comment
Это работает идеально, спасибо большое. Очень ценю всю вашу помощь! После исправления части кода с моей стороны offSetX наконец-то заработал правильно. - person Nathan; 26.03.2018
comment
Эй, Карто, может быть, ты еще поможешь мне. Этот метод идеально работает для определенного количества платформ, добавленных на сцену одновременно. Но что, если я добавлю, что хочу добавить больше платформ на сцену после того, как некоторые из них будут удалены и соединены. Я пытаюсь добавить больше в конце их, но это расстояние теперь далеко от последней добавленной платформы. - person Nathan; 15.04.2018
comment
Вы сможете это сделать, добавив следующую платформу в addedPlatforms[addedPlatforms.length - 1].x + 50. Если вы хотите добавить новый набор с таким же циклом, установите это значение на первое offsetX. - person kaarto; 15.04.2018
comment
Потрясаящий человек. Выяснил это после того, как написал это, но то, как вы только что описали, выглядит проще. Еще раз спасибо человеку за помощь очень ценю это! - person Nathan; 16.04.2018