Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios spritekit中的场景转换未转换_Ios_Swift_Sprite Kit - Fatal编程技术网

Ios spritekit中的场景转换未转换

Ios spritekit中的场景转换未转换,ios,swift,sprite-kit,Ios,Swift,Sprite Kit,我正在用斯威夫特做游戏。(我是swift新手)我想在按下节点时转换场景。我查了一下,正确的过渡方式是 let transition = SKTransition.revealWithDirection(SKTransitionDirection.Down, duration: 1.0) let scene = GameScene(size: self.scene.size) scene.scaleMode = SKSceneScaleMode.AspectFil

我正在用斯威夫特做游戏。(我是swift新手)我想在按下节点时转换场景。我查了一下,正确的过渡方式是

    let transition = SKTransition.revealWithDirection(SKTransitionDirection.Down, duration: 1.0)     
    let scene = GameScene(size: self.scene.size)
    scene.scaleMode = SKSceneScaleMode.AspectFill
    self.scene.view.presentScene(scene, transition: transition)
但当我编程时,它不喜欢self.scene.size,并在场景上打了个问号。这是我的密码

    let playView = PlayScene(size: self.scene?.size) 
我不知道怎么解决这个问题。有什么建议吗?(或者这可能只是我的一个简单错误,因为我对swift还不熟悉

这是我的更多代码 在GameScene.swift文件中

类游戏场景:SKScene{

var playButton = SKSpriteNode(imageNamed: "Play")
var levelsButton = SKSpriteNode(imageNamed: "Levels")
var optionsButton = SKSpriteNode(imageNamed: "Options")

override func didMoveToView(view: SKView) {
    /* Setup your scene here */
    let myLabel = SKLabelNode(fontNamed:"Helvetica-Light")
    myLabel.text = "Mini Golf";
    myLabel.fontSize = 30;
    myLabel.position = CGPoint(x:CGRectGetMidX(self.frame), y:525);
    println(size.height)
    println(size.width)
    let backgroundNode = SKSpriteNode(imageNamed: "Background")

    backgroundNode.position = CGPoint(x: CGRectGetMidX(self.frame), y: CGRectGetMidY(self.frame));
    playButton.position = CGPoint(x: CGRectGetMidX(self.frame), y: 360)
    levelsButton.position = CGPoint(x: CGRectGetMidX(self.frame), y: 295)
    optionsButton.position = CGPoint(x: CGRectGetMidX(self.frame), y: 230)

    self.addChild(backgroundNode)
    self.addChild(playButton)
    self.addChild(levelsButton)
    self.addChild(optionsButton)
    self.addChild(myLabel)
}

override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
    /* Called when a touch begins */
    super.touchesBegan(touches, withEvent: event)

    for touch: AnyObject in touches {
        let location = touch.locationInNode(self)
        //let touchedNode = nodeAtPoint(Location)
        //touchedNode.postiion =location
        let transitionToPlayScene = SKTransition.revealWithDirection(SKTransitionDirection.Down, duration: 1.0)
        if CGRectContainsPoint(playButton.frame, location) {
            let playView = PlayScene(size: self.scene?.size)




        }
    }
}
这是playsecene.swift文件中的代码

import Foundation
import UIKit
import SpriteKit

private let WALL_CATEGORY: UInt32 = 0x1 << 0
private let HOLE_CATEGORY: UInt32 = 0x1 << 1
private let GOLF_CLUB_CATEGORY: UInt32 = 0x1 << 2
private let BALL_CATEGORY: UInt32 = 0x1 << 4
private let DECORATION_BORDER_CATEGORY: UInt32 = 0x1 << 5


class PlayScene: SKScene, SKPhysicsContactDelegate  {

var ballNode = SKSpriteNode(imageNamed: "Ball")
var flag = SKSpriteNode(imageNamed: "Flag")
var club = SKSpriteNode(imageNamed: "Golf Club")
var tee = SKSpriteNode(imageNamed: "Tee")
var hole = SKSpriteNode(imageNamed: "Hole")
var decoBorder1 = SKSpriteNode(imageNamed: "Border 1")
var decoBorder2 = SKSpriteNode(imageNamed: "Border 2")

override func didMoveToView(view: SKView) {
    //Setting up the view's physics
    let borderBody = SKPhysicsBody(edgeLoopFromRect: self.frame);
    self.physicsBody = borderBody
    self.physicsBody?.friction = 0.0
    self.physicsBody?.categoryBitMask  = WALL_CATEGORY
    self.physicsWorld.gravity = CGVectorMake(0.0 ,0.0);
    self.physicsWorld.contactDelegate = self

    //Setting the ball's properties
    ballNode.position = CGPoint(x: CGRectGetMidX(self.frame), y: 100);
    ballNode.physicsBody = SKPhysicsBody(rectangleOfSize: ballNode.frame.size);
    ballNode.physicsBody?.categoryBitMask = BALL_CATEGORY
    ballNode.physicsBody?.mass = 50.0
    ballNode.physicsBody?.dynamic = true
    ballNode.physicsBody?.allowsRotation = true
    self.addChild(ballNode)

    //Setting the club's properties
    club.position = CGPoint(x: CGRectGetMidX(self.frame)-20, y: 75);
    club.physicsBody = SKPhysicsBody(rectangleOfSize: self.frame.size);
    club.physicsBody?.categoryBitMask = GOLF_CLUB_CATEGORY
    club.physicsBody?.mass = 150.0
    club.physicsBody?.dynamic = true
    club.physicsBody?.allowsRotation = false
    self.addChild(club)

    //Setting the Tee's properties
    tee.position = CGPoint(x: CGRectGetMidX(self.frame), y: 70);
    //self.addChild(tee)

    //Setting the decoration border nodes
    decoBorder1.position = CGPoint(x: CGRectGetMinX(self.frame), y: 500);
    decoBorder2.position = CGPoint(x: CGRectGetMaxX(self.frame), y:500);
    decoBorder1.physicsBody = SKPhysicsBody(rectangleOfSize: self.frame.size);
    decoBorder2.physicsBody = SKPhysicsBody(rectangleOfSize: self.frame.size);
    decoBorder1.physicsBody?.categoryBitMask = DECORATION_BORDER_CATEGORY
    decoBorder1.physicsBody?.dynamic = false;
    decoBorder1.physicsBody?.allowsRotation = false
    decoBorder2.physicsBody?.categoryBitMask = DECORATION_BORDER_CATEGORY
    decoBorder2.physicsBody?.dynamic = false;
    decoBorder2.physicsBody?.allowsRotation = false
    //self.addChild(decoBorder1)
    //self.addChild(decoBorder2))

    //Setting the Hole properties
    hole.position = CGPoint(x: CGRectGetMidX(self.frame), y: 550);
    hole.physicsBody = SKPhysicsBody(rectangleOfSize: self.frame.size);
    hole.physicsBody?.categoryBitMask = HOLE_CATEGORY
    hole.physicsBody?.dynamic = false
    hole.physicsBody?.allowsRotation = false
    //self.addChild(hole)
}
<代码>导入基础 导入UIKit 进口SpriteKit
private let WALL_CATEGORY:UInt32=0x1问号来自于您的
scene
属性必须像这样声明
SKScene?
。但这不是问题,它只是意味着如果您的场景为零,它将不会获得size属性

真正的问题可能是这一行:

self.scene.view.presentScene(scene, transition: transition)
原因是,您的
场景
在呈现之前可能没有
视图

你可能想要这样的东西:

(self.view as SKView).presentScene(scene, transition: transition)
你会注意到我可能说了很多。我只是在猜测这个问题,因为我看不到足够的代码,但我感谢你努力缩小你的问题。不过你应该发布更多,因为它可能在其他地方

编辑

尝试替换此:

    let transitionToPlayScene = SKTransition.revealWithDirection(SKTransitionDirection.Down, duration: 1.0)
    if CGRectContainsPoint(playButton.frame, location) {
        let playView = PlayScene(size: self.scene?.size)




    }
用这个

    if CGRectContainsPoint(playButton.frame, location) {
        let transitionToPlayScene = SKTransition.revealWithDirection(SKTransitionDirection.Down, duration: 1.0)
        let nextScene = PlayScene(size: self.size)
        self.view!.presentScene(nextScene, transition: transitionToPlayScene)
    }

最终对我起作用的是:

 let transition = SKTransition.revealWithDirection(SKTransitionDirection.Down, duration: 1.0)
 let scene = GameScene(size: (self.scene as SKScene!).size)
 scene.scaleMode = SKSceneScaleMode.AspectFill
 (self.view as SKView!).presentScene(scene, transition: transition)

我的scene属性没有像SKScene?那样声明,这一行不是问题所在。