Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/104.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 如何在Sprite工具包中的操作中运行函数?_Ios_Swift_Sprite Kit - Fatal编程技术网

Ios 如何在Sprite工具包中的操作中运行函数?

Ios 如何在Sprite工具包中的操作中运行函数?,ios,swift,sprite-kit,Ios,Swift,Sprite Kit,我为我正在制作的游戏编写了以下代码。在其中一个部分中,我有 let spawn = SKAction.run { self.createCars() } 但出于某种原因,我一直收到一个错误,即类型为“NSObject->->GameSecene”的值没有成员“createCars”,即使createCars是在我的代码中定义得更低的函数。为什么会发生这种情况?我能做些什么来解决这个问题 import SpriteKit import GameplayKit class GameSce

我为我正在制作的游戏编写了以下代码。在其中一个部分中,我有

let spawn = SKAction.run {
    self.createCars()
}
但出于某种原因,我一直收到一个错误,即类型为“NSObject->->GameSecene”的值没有成员“createCars”,即使createCars是在我的代码中定义得更低的函数。为什么会发生这种情况?我能做些什么来解决这个问题

import SpriteKit
import GameplayKit

class GameScene: SKScene, SKPhysicsContactDelegate {
    var lanecounter:CGFloat = 0
    var score:Int = 0
    var player:SKSpriteNode?
    let scoreLabel = SKLabelNode()
    let highScoreLabel = SKLabelNode()
    var direction:Int?
    let noCategory:UInt32 = 0
    let carCategory:UInt32 = 0b1
    let playerCategory:UInt32 = 0b1 << 1
    let pointCategory:UInt32 = 0b1 << 2
    var died:Bool?
    var restartBTN = SKSpriteNode()

    let moveLeft:SKAction = SKAction.moveBy(x: -100, y: 0, duration: 0.065)
    let moveRight:SKAction = SKAction.moveBy(x: 100, y: 0, duration: 0.065)
    let moveDown:SKAction = SKAction.moveTo(y: -800, duration: 1.1)

    let spawn = SKAction.run {
        self.createCars()
    }

    let delay = SKAction.wait(forDuration: 4)

    func createCars(){
        let middlePoints = SKSpriteNode()
        var openLane:CGFloat = 0

        middlePoints.size = CGSize(width: 100, height: 10)
        middlePoints.physicsBody = SKPhysicsBody(rectangleOf: middlePoints.size)
        //middlePoints.color = SKColor.purple
        middlePoints.physicsBody?.categoryBitMask = pointCategory
        middlePoints.physicsBody?.collisionBitMask = playerCategory
        middlePoints.physicsBody?.contactTestBitMask = playerCategory

        var randInt:Int = 0
        randInt = Int(arc4random_uniform(3))

        if lanecounter == -2 {
            if randInt == 0 || randInt == 1 {
                openLane = -1
            }
            if randInt == 2 {
                openLane = -2
            }
        }

        if lanecounter == 2 {
            if randInt == 0 || randInt == 1 {
                openLane = 1
            }
            if randInt == 2 {
                openLane = 2
            }
        }
        if lanecounter == -1 || lanecounter == 0 || lanecounter == 1 {
            if randInt == 0 {
                openLane = lanecounter - 1
            }
            if randInt == 1 {
                openLane = lanecounter
            }
            if randInt == 2 {
                openLane = lanecounter + 1
            }
        }
        //print("lanecounter is", lanecounter)
        //print("open lane is", openLane)

        if openLane != -2 {
            spawnCar(xCord: -2)
        }
        if openLane != -1 {
            spawnCar(xCord: -1)
        }
        if openLane != 0 {
            spawnCar(xCord: 0)
        }
        if openLane != 1 {
            spawnCar(xCord: 1)
        }
        if openLane != 2 {
            spawnCar(xCord: 2)
        }

        middlePoints.position = CGPoint(x: (openLane*100), y: self.frame.height)

        self.addChild(middlePoints)
        middlePoints.run(moveDown)
    }
}
最小、完整且可验证 首先,我们需要这样一个

class GameScene: SKScene {

    let spawn = SKAction.run {
        self.createCars()
    }

    func createCars() { }
}
错误:“NSObject->->GameSecene”类型的值没有成员“createCars”

问题 出现此问题的原因是无法在使用self-infact self定义的同一行上填充属性,因为该属性尚不存在

解决方案 但是,您可以使用一个lazy属性,该属性仅在调用时才进行计算,此时self将可用

class GameScene: SKScene {

    lazy var spawn: SKAction = {
        SKAction.run { self.createCars() }
    }()

    func createCars() { }
}
最小、完整且可验证 首先,我们需要这样一个

class GameScene: SKScene {

    let spawn = SKAction.run {
        self.createCars()
    }

    func createCars() { }
}
错误:“NSObject->->GameSecene”类型的值没有成员“createCars”

问题 出现此问题的原因是无法在使用self-infact self定义的同一行上填充属性,因为该属性尚不存在

解决方案 但是,您可以使用一个lazy属性,该属性仅在调用时才进行计算,此时self将可用

class GameScene: SKScene {

    lazy var spawn: SKAction = {
        SKAction.run { self.createCars() }
    }()

    func createCars() { }
}

请只张贴相关代码。当然,你发布的大部分内容与你的错误无关。请只发布相关代码。当然,你发布的大部分内容与你的错误无关。