2017-03-13 15 views
2

Ich habe versucht, den Vorlagencode von einem SpriteKit-Projekt in einen Spielplatz zu kopieren, aber alles, was ich bekomme, ist ein grauer Bildschirm, wenn ich die Szene präsentiere. Muss ich eine SKScene erstellen und wenn ja, wie ordne ich sie der von mir verwendeten Szenenklasse zu?Wie richte ich einen SKScene mit einem SKNode mit einer Textur in Swift Playgrounds ein?

Im Folgenden ist mein Code zu erstellen und präsentieren die Szene:

@objc func goToGameScene(){ 

    print("GameView Loaded") 

sceneView = SKView(frame: CGRect(x: 0, y: 0, width: 666, height: 500)) 



sceneView.backgroundColor = UIColor.black 

PlaygroundPage.current.liveView = sceneView 

if let view = self.sceneView as SKView? { 
    // Load the SKScene from 'GameScene.sks' 
    if let scene = SKScene(fileNamed: "GameScene") { 
     // Set the scale mode to scale to fit the window 
     scene.scaleMode = .aspectFill 

     // Present the scene 
     view.presentScene(scene) 
    } 

    view.ignoresSiblingOrder = true 


} 

Und das ist meine SKScene-Klasse, die einen Dateinamen von GameScene.swift hat.

import Foundation 
import SpriteKit 
import GameplayKit 

class GameScene: SKScene, SKPhysicsContactDelegate { 
var bg = SKSpriteNode() 
func didBegin(_ contact: SKPhysicsContact) { 
} 
override func didMove(to view: SKView) { 
    self.physicsWorld.contactDelegate = self 
    let bgTexture = SKTexture(image: UIImage(named: "MainScreenBackground.png")!) 
    let moveBGAnimation = SKAction.move(by: CGVector(dx:-bgTexture.size().width, dy:0), duration: 11) 
    let shiftBackground = SKAction.move(by: CGVector(dx: bgTexture.size().width, dy:0), duration: 0) 
    let repeatAnimationBg = SKAction.repeatForever(SKAction.sequence([moveBGAnimation, shiftBackground])) 
    var q = 0 
    while(q < 3){ 
     bg = SKSpriteNode(texture: bgTexture) 
     bg.position = CGPoint(x: bgTexture.size().width * CGFloat(q), y: self.frame.midY) 
     bg.size.height = self.frame.height 
     bg.run(repeatAnimationBg) 
     self.addChild(bg) 
     q+=1 
     bg.zPosition = -1 
    } 
} 

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { 
} 
override func update(_ currentTime: TimeInterval) { 
} 
} 

Antwort

1

Vorausgesetzt, dass haben Sie per Drag & Drop Ihr ​​MainScreenBackground.png Bild in Sie Assets.xcassets Ordner, können Sie den Code unten, um das Bild in der Szene als SKSpriteNode hinzuzufügen.

override func didMove(to view: SKView) { 
    self.physicsWorld.contactDelegate = self 
    let bgTexture = SKSpriteNode(imageNamed: "MainScreenBackground") 
    self.addChild(bgTexture) 
    ... 
Verwandte Themen