2017-02-21 9 views
1

Полностью новое для SpriteKit. В настоящее время у меня есть UIView, и я хочу добавить к нему узел спрайта (например, небольшой UIImageView, но я хочу анимацию для него, используя SpriteKit). Поэтому я не инициализировал свой проект как игровой проект, как это было найдено почти во всех учебниках для SpriteKit. Я нашел записку здесь: link и то, что я сейчас STH как:SpriteKit: использование SKView в UIView вместо инициализации игрового проекта

func initializeImage() { 
    let imageView = SKView() 
    imageView.frame = CGRect(x: self.frame.width/2 - Constants.imageWidth/2, y: self.frame.height - Constants.imageHeight, width: Constants.imageWidth, height: Constants.imageHeight) 
    // so place it somewhere in the bottom middle of the whole frame 
    let sheet = SpriteSheet(texture: ...) 
    let sprite = SKSpriteNode(texture: sheet.itemFor(column: 0, row: 0)) 
    sprite.position = imageView.center //basically the same position as the imageView.frame's x and y value 
    let scene = SKScene(size: imageView.frame.size) 
    scene.backgroundColor = SKColor.clear 
    scene.addChild(sprite) 
    imageView.presentScene(scene) 
    self.frame.addSubview(imageView) 
} 

SpriteSheet похож на это: sprite sheet; он существенно сокращает атлас изображения и делит его на более мелкие изображения. Я отслеживал процесс, и этот шаг действительно дает меньшее изображение (var 'sprite'). Но при запуске у меня теперь есть только черный квадрат (должен быть размер, определенный константами). Если я установлю scene.backgroundColor на белый, тогда он белый. Могу ли я узнать, как я должен исходить отсюда, как мне заставить спрайт появиться?

ответ

1

Все код выглядит хорошо для этого, кроме:

sprite.position = imageView.center // basically the same position as the imageView.frame's x and y value 

Это в основном не положение вы думаете. Система координат в SpriteKit является а) относительно сцены (SK), а не для любого вида, содержащегося в SKView, и b) повернута вертикально относительно системы координат UIKit. Если вы хотите, спрайт, расположенный в центре сцены, вы, вероятно, хотите, чтобы установить его position на основе сцена size:

sprite.position = CGPoint(x: scene.size.width/2, y: scene.size.height/2) 

Кстати, внешний код SpriteSheet не может быть необходим (и вы, скорее всего, пользуйтесь оптимизацией Apple), если вы отрезаете свой лист спрайтов и поместите его в каталог активов Xcode.

+0

Возможно, вы можете взглянуть на аналогичный вопрос [здесь] (http://stackoverflow.com/questions/42383395/metal-crash-upon-adding-skspritenode-to-skeffectnode) – user3765506