2016-01-01 7 views
0

Я пытаюсь получить SKScene presentScene с поведением перехода для работы. Текущая технология Cesene работает, хотя все, что я получаю, является поведением MoveUp по умолчанию. Я загружаю сцену SpriteKit из архива для сцены. Кажется, не имеет значения, что я вставляю в тип перехода, я всегда получаю поведение по умолчанию. Я отлаживал, чтобы убедиться, что переход имеет значение (т. Е. Не ноль). Я использую объекты iCloud и coreData, хотя я не знаю, как это повлияет на презентацию сцены. Я включил управляемый объектный код в viewWillAppear.SKScene Present Scene Transition не работает с SpriteKit Сцена в Swift

class GameViewController: UIViewController, GameDelegate { 
var managedObjectContext: NSManagedObjectContext! 
var heroCharacter : HeroCharacter! 

override func viewDidLoad() { 
    super.viewDidLoad() 

    presentGameScene() 
} 

override func viewWillAppear(animated: Bool) { 
    super.viewWillAppear(animated) 

    // access the application managed object context - jwg 
    managedObjectContext = (UIApplication.sharedApplication().delegate as! AppDelegate).managedObjectContext 

    // Persistant Store Changes uses the coordinator 
    NSNotificationCenter.defaultCenter().addObserver(self, selector: "receivePersistantStoreDidChange", name: NSPersistentStoreCoordinatorStoresDidChangeNotification, object: nil) 
    NSNotificationCenter.defaultCenter().addObserver(self, selector: "receivePersistantStoreWillChange:", name: NSPersistentStoreCoordinatorStoresWillChangeNotification, object: managedObjectContext.persistentStoreCoordinator) 

    // iCloud notifications using the coordinator 
    NSNotificationCenter.defaultCenter().addObserver(self, selector: "receiveICloudChanges:", name: NSPersistentStoreDidImportUbiquitousContentChangesNotification, object: managedObjectContext.persistentStoreCoordinator) 
} 

// MARK: scenes 
func presentGameScene() { 
    if let scene = GameScene.unarchiveFromFile("GameScene") as? GameScene { 

     // Configure the view. 
     let skView = self.view as! SKView 
     skView.showsFPS = true 
     skView.showsNodeCount = true 

     /* Sprite Kit applies additional optimizations to improve rendering performance */ 
     skView.ignoresSiblingOrder = true 

     /* Set the scale mode to scale to fit the window */ 
     scene.scaleMode = .AspectFill 

     // set target values 
     scene.heroCharacter = heroCharacter 
     scene.viewDelegate = self 

     // this transition is not working 
     let transition = SKTransition.fadeWithDuration(10) 
     skView.presentScene(scene, transition: transition) 
    } 
} 

Код сцены довольно общий, а также

override func didMoveToView(view: SKView) { 
    // access the application managed object context - jwg 
    managedObjectContext = (UIApplication.sharedApplication().delegate as! AppDelegate).managedObjectContext 

    // Setup physics world's contact delegate 
    physicsWorld.contactDelegate = self 

    // Setup waterfall 
    waterfall = self.childNodeWithName(kWaterfallName) as? SKSpriteNode 

    // Setup goal 
    goal = self.childNodeWithName("goal") as? SKSpriteNode 

    // Setup initial camera position 
    updateCamera() 

    // load texture atlases 
    CharacterSprite.loadTextureAtlasArrays() 

    var textureAtlasArray = [SKTextureAtlas]() 
    textureAtlasArray.append(SKTextureAtlas(named: kIcebergAtlas)) 

    SKTextureAtlas.preloadTextureAtlases(textureAtlasArray, withCompletionHandler: {() -> Void in 
     #if DEBUG 
      print("completed loading atlases") 
     #endif 
     self.startScene() 
    }) 
} 

func updateCamera() { 
    if let camera = camera { 
     camera.position = CGPoint(x: characterSprite!.position.x, y: characterSprite!.position.y) 
    } 
} 

ответ

3

Почему вы выцветанию в течение 10 секунд? Кажется длинным. Также это код в вашем GameViewController?

SKTransitions будет работать только при переходе от 1 SKScene к другой SKScene. Загрузка первой сцены из вашего GameViewController не будет использовать переход, так как с тех пор нет технического перехода.

В качестве побочного примечания в быстром 2 вы можете избавиться от расширения, чтобы разблокировать SKScene. Вы также можете просто сказать (если вы используете GameScene.sks)

if let scene = GameScene(fileNamed: "GameScene") { 
... 
} 
+0

Лучше ответить на вопрос 1-го, а затем добавить в помощь код. кроме этого это правильно, вы не переходите ни от чего в начале, ваша сцена есть. Если вам нужно, чтобы «SKView» переходил в начале, вам нужно посмотреть «UIView», переходящий – Knight0fDragon

+0

ура для редактирования. Будет помнить в следующий раз – crashoverride777

+0

Спасибо. Вы правы в том, что я пытался перейти при представлении сцены из контроллера вида. Таким образом, попытка выполнить переход из ViewController является проблемой. В качестве побочной заметки у меня было 10 секунд, если бы переход произошел быстрее, чем я мог видеть. Как вы отметили, переход не имеет отношения к ViewController, поэтому ни одно время перехода. – Jacksonsox

Смежные вопросы