Создание альта текстур в SpriteKit из существующего атласа текстур jpg

Я пытаюсь создать атлас текстур, используя существующие активы из предыдущего актива изображения, созданного вне Xcode/моей машины.

Импорт изображения в Xcode не «разделяет» его, и я не уверен, как сообщить Xcode/SpriteKit, где находятся местоположения «атласа».

Помимо использования редактора изображений и ручного использования каждого изображения в качестве актива, как я могу убедить Xcode, что изображение уже действительно является атласом?

Наконец, стоит ли вообще использовать атлас, так как я должен сам циклически просматривать изображение, чтобы сделать анимацию; мне лучше жестко закодировать (!) позиции x/y полосы атласа и выполнить какой-то код вращения/цикла в SKAction?


person Antonio Ciolino    schedule 09.01.2015    source источник
comment
Первый вопрос не ясен. Это сгенерированный Xcode атлас той же версии Xcode? Тогда вы, возможно, сможете заставить его работать в комплекте - каким-то образом. А может и нет. Иметь исходные изображения будет намного проще в будущем, и поэтому я думаю, что вы пытаетесь решить здесь не ту проблему. Второй вопрос субъективен, полностью зависит от кода и контекста, и на него нельзя ответить в целом. Хотя, если вы сомневаетесь, отдайте предпочтение использованию атласа, его плюсы обычно перевешивают любые минусы.   -  person LearnCocos2D    schedule 09.01.2015
comment
Исходное изображение представляет собой более старый файл jpg, в котором кадры связаны друг с другом - до сегодняшнего дня он никогда не видел Xcode. По сути, это уже атлас изображений, поэтому создание его в SKTextureAtlas, вероятно, будет полезно, но может быть более болезненным, чем я хочу испытать :)   -  person Antonio Ciolino    schedule 09.01.2015
comment
Если он не был создан с помощью Xcode, он не имеет необходимой структуры plist и имени/папки. Вам придется кропотливо реконструировать это. Бьюсь об заклад, будет проще извлечь изображения или просто использовать разные изображения (например, получить некоторые бесплатно на OpenGameArt).   -  person LearnCocos2D    schedule 09.01.2015
comment
да, я просто пошел дальше и разделил их на файлы PNG. Предпочел бы прочитать Старый Атлас, разбить его на SKTextures в памяти и объединить их в новый SKTextureAtlas. Слишком много кода.   -  person Antonio Ciolino    schedule 09.01.2015
comment
ОК... СЕЙЧАС... когда SKTextureAtlas загружает изображения, в каком порядке он решает это сделать? Когда я смотрю на имена текстур, они не сортируются, хотя мои файлы текстур упорядочены по номерам.   -  person Antonio Ciolino    schedule 09.01.2015
comment
Он загружает атлас, когда требуется одно из изображений в атласе. Вы также можете предварительно загрузить атлас и сохранить на него сильную ссылку, если хотите, чтобы он оставался в памяти, даже если ни один из спрайтов не использует ни одно из его изображений (текстур).   -  person LearnCocos2D    schedule 09.01.2015
comment
Хотя это действительно так, это не решает случайный порядок имен файлов, загружаемых из Атласа. Решил загрузить все имена файлов и выполнить сортировку массива, затем просмотреть этот массив и загрузить имена файлов в правильном порядке.   -  person Antonio Ciolino    schedule 09.01.2015
comment
Что ты делаешь? Используете ли вы свойство textureNames SKTextureAtlas? Вам действительно нужно только загрузить атлас, а затем использовать SKTexture textureWithImageNamed: предоставив список имен изображений для загрузки текстур.   -  person LearnCocos2D    schedule 09.01.2015
comment
кроме того, мне не нравится жестко кодировать префикс, так как я хочу общий фрагмент повторно используемого кода. Итак, я завишу от правильного порядка имени файла.   -  person Antonio Ciolino    schedule 09.01.2015


Ответы (1)


Решил разбить старый атлас на отдельные изображения, затем загрузить их папкой .atlas. Также решил загрузить все имена файлов и выполнить .sort в массиве, затем просмотреть этот массив и загрузить имена файлов в «правильном» порядке.

фрагмент функции ниже:

func AssignTextureAtlas(atlas: SKTextureAtlas)
{
    var arrTextureNames: Array<String> = []

    //Create texture atlas array
    for (var i = 0; i < atlas.textureNames.count; i++)
    {
        var myText = atlas.textureNames[i] as String
        arrTextureNames.append(myText)
    }

    arrTextureNames.sort( {$0 < $1})
    for (var i = 0; i < arrTextureNames.count; i++)
    {
        var myTexture = atlas.textureNamed(arrTextureNames[i])
        arr.insert(myTexture, atIndex: 0)
    }
    //...more code here, until:

    self.runAction(SKAction.repeatActionForever(SKAction.animateWithTextures(arr, timePerFrame: 0.1, resize: false, restore: true)), withKey: "TEST")

}
person Antonio Ciolino    schedule 09.01.2015