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
Xcode 斯普林特诺德赢得';别动_Xcode_Swift_Ios8_Sprite Kit_Skspritenode - Fatal编程技术网

Xcode 斯普林特诺德赢得';别动

Xcode 斯普林特诺德赢得';别动,xcode,swift,ios8,sprite-kit,skspritenode,Xcode,Swift,Ios8,Sprite Kit,Skspritenode,我在Swift中创建了一个矩形图像,其形式为SKSpriteNode,代码如下: var screenImage = SKSpriteNode(texture: SKTexture(imageNamed: "\(imageChoices[randomImageChoice].0)")) screenImage.position = CGPointMake(screen1.position.x, screen1.position.y) screenImage.size = CGSizeMake(s

我在Swift中创建了一个矩形图像,其形式为SKSpriteNode,代码如下:

var screenImage = SKSpriteNode(texture: SKTexture(imageNamed: "\(imageChoices[randomImageChoice].0)"))
screenImage.position = CGPointMake(screen1.position.x, screen1.position.y)
screenImage.size = CGSizeMake(self.frame.size.width * 0.6, self.frame.size.height)
self.addChild(screenImage)
func swipedTrue(sender: UISwipeGestureRecognizer) {

    if gameOver == false && tutorial == false {

        //if you swipe, it checks if you were right, then moves on or GameOver()
        if (wordChoices[randomWordChoice]).1 == true {

            //reset time
            timePerQuestion = 1.0

            //randomize word
            randomWordChoice = Int(arc4random() % 3)
            newImage = SKSpriteNode(texture: SKTexture(imageNamed: "\(wordChoices[randomWordChoice].0)"))

            //randomize color of screens, mid-swipe
            newScreen.fillColor = UIColor(red: CGFloat(drand48()), green: CGFloat(drand48()), blue: CGFloat(drand48()), alpha: 1.0)

            //replace timeBar
            decreaseTimeBlock.fillColor = newScreen.fillColor
            decreaseTimeBlock.position = CGPointMake(self.frame.size.width * 1.5, self.frame.size.height * 0.985)
            timeBarRedValue = 0.0; timeBarGreenValue = 1.0
            newTimeBar.fillColor = UIColor(red: CGFloat(timeBarRedValue), green: CGFloat(timeBarGreenValue), blue: 0.0, alpha: 1.0)

            //actions caused by swipe: it's "bringNewScreen" because if you swipeFalse, the newScreen comes from bottom. If you swipeTrue, it comes from the top.
            var swipeTrueCurrentScreen = SKAction.moveToX(self.frame.size.width * 2, duration: 0.5)
            var bringNewScreen = SKAction.moveToY(self.frame.size.height * 0.5, duration: 0.5)
            var bringNewTimeBar = SKAction.moveToY(self.frame.size.height * 0.985, duration: 0.5)

            //reset the newScreen and word to the top of the screen, to be dropped again
            newScreen.position = CGPointMake(self.frame.size.width * 0.5, self.frame.size.height * 1)
            newImage.position = CGPointMake(self.frame.size.width * 0.5, self.frame.size.height * 1)
            newTimeBar.position = CGPointMake(self.frame.size.width * 0.5, self.frame.size.height * 1.58)

            //swipe word and screen
            currentImage.runAction(swipeTrueCurrentScreen)
            currentTimeBar.runAction(swipeTrueCurrentScreen)
            currentScreen.runAction(swipeTrueCurrentScreen)

            //make swiping noise
            runAction(SKAction.playSoundFileNamed("Swoosh 3-SoundBible.com-1573211927.mp3", waitForCompletion: false))

            //bring in the newScreen
            newScreen.runAction(bringNewScreen)
            newImage.runAction(bringNewScreen)
            newTimeBar.runAction(bringNewTimeBar)

            //increase score
            ++score
            scoreLabel.text = "\(score)"

            //here, switch the currentScreen with the newScreen so that the process can be repeated
            if newScreen == screen1 {

                newScreen = screen2
                newImage = screenImage2
                newTimeBar = timeBar2
                currentScreen = screen1
                currentImage = screenImage1
                currentTimeBar = timeBar1

            } else {

                newScreen = screen1
                newImage = screenImage1
                newTimeBar = timeBar1
                currentScreen = screen2
                currentImage = screenImage2
                currentTimeBar = timeBar2

            }

        } else {

            GameOver()

        }

    }

}
我使用以下代码继续移动图像:

var screenImage = SKSpriteNode(texture: SKTexture(imageNamed: "\(imageChoices[randomImageChoice].0)"))
screenImage.position = CGPointMake(screen1.position.x, screen1.position.y)
screenImage.size = CGSizeMake(self.frame.size.width * 0.6, self.frame.size.height)
self.addChild(screenImage)
func swipedTrue(sender: UISwipeGestureRecognizer) {

    if gameOver == false && tutorial == false {

        //if you swipe, it checks if you were right, then moves on or GameOver()
        if (wordChoices[randomWordChoice]).1 == true {

            //reset time
            timePerQuestion = 1.0

            //randomize word
            randomWordChoice = Int(arc4random() % 3)
            newImage = SKSpriteNode(texture: SKTexture(imageNamed: "\(wordChoices[randomWordChoice].0)"))

            //randomize color of screens, mid-swipe
            newScreen.fillColor = UIColor(red: CGFloat(drand48()), green: CGFloat(drand48()), blue: CGFloat(drand48()), alpha: 1.0)

            //replace timeBar
            decreaseTimeBlock.fillColor = newScreen.fillColor
            decreaseTimeBlock.position = CGPointMake(self.frame.size.width * 1.5, self.frame.size.height * 0.985)
            timeBarRedValue = 0.0; timeBarGreenValue = 1.0
            newTimeBar.fillColor = UIColor(red: CGFloat(timeBarRedValue), green: CGFloat(timeBarGreenValue), blue: 0.0, alpha: 1.0)

            //actions caused by swipe: it's "bringNewScreen" because if you swipeFalse, the newScreen comes from bottom. If you swipeTrue, it comes from the top.
            var swipeTrueCurrentScreen = SKAction.moveToX(self.frame.size.width * 2, duration: 0.5)
            var bringNewScreen = SKAction.moveToY(self.frame.size.height * 0.5, duration: 0.5)
            var bringNewTimeBar = SKAction.moveToY(self.frame.size.height * 0.985, duration: 0.5)

            //reset the newScreen and word to the top of the screen, to be dropped again
            newScreen.position = CGPointMake(self.frame.size.width * 0.5, self.frame.size.height * 1)
            newImage.position = CGPointMake(self.frame.size.width * 0.5, self.frame.size.height * 1)
            newTimeBar.position = CGPointMake(self.frame.size.width * 0.5, self.frame.size.height * 1.58)

            //swipe word and screen
            currentImage.runAction(swipeTrueCurrentScreen)
            currentTimeBar.runAction(swipeTrueCurrentScreen)
            currentScreen.runAction(swipeTrueCurrentScreen)

            //make swiping noise
            runAction(SKAction.playSoundFileNamed("Swoosh 3-SoundBible.com-1573211927.mp3", waitForCompletion: false))

            //bring in the newScreen
            newScreen.runAction(bringNewScreen)
            newImage.runAction(bringNewScreen)
            newTimeBar.runAction(bringNewTimeBar)

            //increase score
            ++score
            scoreLabel.text = "\(score)"

            //here, switch the currentScreen with the newScreen so that the process can be repeated
            if newScreen == screen1 {

                newScreen = screen2
                newImage = screenImage2
                newTimeBar = timeBar2
                currentScreen = screen1
                currentImage = screenImage1
                currentTimeBar = timeBar1

            } else {

                newScreen = screen1
                newImage = screenImage1
                newTimeBar = timeBar1
                currentScreen = screen2
                currentImage = screenImage2
                currentTimeBar = timeBar2

            }

        } else {

            GameOver()

        }

    }

}

然而,由于某些原因,图像不会移动,当我尝试在其他情况下移动它时,它会拒绝。如何修复此问题?

除了这里缺少一个括号(但我想您的代码中没有这种情况),代码没有不工作的特殊原因。问题很可能在于你如何使用它

我猜你在做这样的事情:

import SpriteKit

class GameScene: SKScene {

    var sprite : SKSpriteNode = SKSpriteNode() // A

    override func didMoveToView(view: SKView) {

        // You are creating another `sprite` variable
        // and not using the (A) sprite you declare above
        var sprite = SKSpriteNode(imageNamed:"Spaceship") // B

        // Here you set the (B) sprite you just created
        sprite.size = CGSizeMake(self.frame.size.width * 0.6, self.frame.size.height)
        sprite.position = CGPoint(x:CGRectGetMidX(self.frame), y:CGRectGetMidY(self.frame));

        // Here it's still the (B) sprite you just created
        // that you add to the scene
        self.addChild(sprite)

        // You are calling your action from somewhere else
        self.applyAction()

    }

    func applyAction() {
        // You create an action, OK
        let action = SKAction.moveToX(self.frame.size.width * 2, duration: 0.5)

        // You apply the action to the (A) sprite property you have in your class
        // Same as : self.sprite.runAction(action)
        sprite.runAction(action)
    }

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

    override func update(currentTime: CFTimeInterval) {
        /* Called before each frame is rendered */
    }
}
在这种情况下,您只需不创建另一个sprite变量。通过删除
//B
行上的
var
关键字

让met知道这是否有帮助。
如果情况并非如此,请提供更多详细信息(代码,…。

不幸的是,情况并非如此。不过,我在问题中添加了信息,希望您能够解决它。谢谢你的贡献!