2017-02-21 11 views
1

SpriteKitを完全に新しくしました。現在、私はUIViewを持っていて、スプライトノードを追加したいのですが(小さなUIImageViewのようですが、SpriteKitを使ってアニメーションが必要です)。そのため、SpriteKitのチュートリアルのほとんどすべてに見られるように、プロジェクトをゲームプロジェクトに初期化していませんでした。私はここでノートを見つけた:linkと私が今持っていることはかなったようなものです:SpriteKit:ゲームプロジェクトを初期化する代わりにUIViewでSKViewを使用

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 'スプライト')を与えています。しかし、実行している場合、私は今は黒い正方形しか持っていません(定数で定義されたサイズでなければなりません)。 scene.backgroundColorを白に設定すると、それは白です。スプライトをどのように表示させるべきなのか、私はここからどのように進むべきか分かりますか?

答えて

1

あなたのコードのすべてのこれ以外良さそうです:

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

基本的にないあなたはそれだと思う位置であること。 SpriteKitの座標系はa)(SK)シーンに対するもので、SKViewに含まれるビューではなく、b)UIKit座標系に対して垂直に反転されたものです。あなたがシーンの中心にスプライトをしたい場合は、おそらくシーンのsizeに基づいてpositionを設定したい:

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

ところで、外部SpriteSheetコードが必要とされないことがあります(そして、あなたは、より可能性が高いですスプライトシートをスライスしてXcodeアセットカタログに入れると、Appleの最適化の恩恵を受けることができます。

+0

あなたはおそらく同様の質問[ここ](http://stackoverflow.com/questions/42383395/metal-crash-upon-adding-skspritenode-to-skeffectnode)を見ることができますか? – user3765506

関連する問題