2016-09-11 3 views
2

Я в основном хочу добавить собственные номера шрифтов (с изображениями) в одиночные игры и добавить их для своей оценки в моей игре с помощью SpriteKit.Добавить пользовательские «числовые» изображения в SKLabelNode в качестве показателя в SpriteKit с Swift

Это шрифт стиль изображения

Number 9

Они цифры от 0 до 9

Я пытался выяснить это на некоторое время.

Я не уверен, что вы можете добавить его в SKLabelNode или если вам нужно будет сделать это в классе.

ответ

1

SKLabelNode не допускает растровые шрифты. Если ваш пользовательский шрифт был TTF, вы могли бы использовать собственный шрифт с SKLabelNode. Объяснение как здесь: SKlabelNode custom font

В вашем случае, поскольку вы хотите использовать растровые шрифты, вам нужно будет создать класс, чтобы сделать это. Вы можете подклассифицировать SKNode или нет. Но вы хотели бы, чтобы один SKNode действовал как «корень», а затем каждая цифра для вашего номера была SKSpriteNode (это были бы дочерние узлы корневого узла, представляющие число).

Одна вещь, которую вы хотите определить, - это то, как вы хотите обрабатывать выравнивание для числа (как по горизонтали, так и по вертикали).

Я использовал свой собственный пользовательский класс для рисования чисел раньше и, как правило, настраиваемый для его горизонтальной регулировки (выравнивание по левому краю, выравнивание по правому краю и выравнивание по центру). Но из лени я обычно всегда вертикально вертикально.

Это может показаться сложным, но прост в использовании. Вам просто нужно было бы

  • Способ присвоения текстурного атласа растровых изображений для каждой цифры. Это проще , если у вас их в порядке 0-9.
  • Способ установки/получения номера
  • Метод, который может конвертировать номер в отдельные цифры. Вам нужно будет это вычислить, какие цифры соответствуют символам.
  • Метод вычисления ширины числа. Если ваши шрифты моноширинны, то это легко. Если это не так, то вам нужно будет вычислить ширину, основанную на ширине и ширине букв. Для моноширинного шрифта вы все равно можете учитывать буквенный интервал.
  • Метод вычисления высоты числа. Это должно быть легко, так как 0-9 следует, чтобы были одинаковой высоты.
  • Способ удаления существующих SKSpriteNode и добавить каждую новую цифру. Каждая новая цифра смещается на соответствующую сумму на основе выравнивания.

Ваш собственный класс должен, после установленного числа, построить правильный SKSpriteNode s для представления номера.

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

// Example of storing digits in an array. Assumes you are putting this in an atlas and your 
// sub-texture names are 0, 1, etc. If not you'll have to adjust the code accordingly 
var numTextures = [SKTexture]() 
let numberAtlas = SKTextureAtlas(named: "NumberAtlas") 

for i in 0 ..< 10 { 
    numTextures.append(numberAtlas.textureNamed("\(i)")) 
} 

// To get the texture for a digit 

func textureForDigit(digit:Int) -> SKTexture { 
    return numTextures[digit] 
} 
+0

Благодарим вас за ответ. Я попробую это, как только смогу обновить вас. – hka

+0

Хорошо, я добавил текстурные атласы для каждой цифры, но добавление метода для установки/получения значения числа или преобразования в отдельные цифры дает мне ошибки (невозможно преобразовать Int в SKTexture ...) ... – hka

+0

Конечно нет. Для этого и нужен массив. Создайте массив 'SKTexture', где индекс 0 представляет 0, индекс 1 представляет 1 и т. Д. –