ios - 检测用户何时点击 SKSpriteNode

标签 ios swift sprite-kit touch skspritenode

我是 swift 编程的新手,我决定先用 SpriteKit 做一个简单的游戏。我有一个 SpriteNode 应该选择 6 个位置中的 1 个并在它被点击时移动到那里,但是从我看到的方法来看我无法弄清楚如何实现它(我又是新手)这里是我的代码来自 GameScene.swift 文件:

import SpriteKit

class GameScene: SKScene {
    override func didMoveToView(view: SKView) {

    let screenSize: CGRect = UIScreen.mainScreen().bounds
    let greenTileWidth = screenSize.width * 0.5
    let greenTileHeight = screenSize.height * 0.33
    let greenTilePositionY = [greenTileHeight / 2, greenTileHeight / 2 + greenTileHeight, greenTileHeight / 2 + greenTileHeight * 2 ]
    let greenTilePositionX = [greenTileWidth / 2, greenTileWidth / 2 + greenTileWidth]

    let backgroundTile = SKSpriteNode(imageNamed: "whiteTile")
    backgroundTile.size.width = screenSize.width * 100
    backgroundTile.size.height = screenSize.height * 100
    addChild(backgroundTile)

    let greenTile = SKSpriteNode(imageNamed: "greenTile")
    greenTile.size.width = greenTileWidth
    greenTile.size.height = greenTileHeight
    greenTile.position.y = greenTilePositionY[0]
    greenTile.position.x = greenTilePositionX[0]
    greenTile.userInteractionEnabled = true
    addChild(greenTile)

    var randomX:Int = 0
    var randomY:Int = 0


    func getRandomY() -> Int{
        randomY = Int(arc4random_uniform(26))%3
        return randomY
    }

    func getRandomX() -> Int{
        randomX = Int(arc4random_uniform(26))%2
        return randomX
    }

    func moveGreenTile(){
        greenTile.position.x = greenTilePositionX[randomX]
        greenTile.position.y = greenTilePositionY[randomY]

    }

    getRandomX()
    getRandomY()
    moveGreenTile()

}

当点击 SpriteNode greenTile 时,应该调用 getRandomY() getRandomX() 和 moveGreenTile()。

最佳答案

首先,您必须设置SKSpriteNodesname 属性:

greenTile.name = "greenTile"

首先,我在您的代码中发现了一些错误。 getRandomXgetRandomY 的返回值从未真正被使用过。因为您设置了 randomXrandomY 变量而没有实际调用 getRandom。所以你应该更新它:

func moveGreenTile(){
    greenTile.position.x = greenTilePositionX[getRandomX()]
    greenTile.position.y = greenTilePositionY[getRandomY()]

}

这样你只需要调用moveGreenTile,它会自己调用getRandom方法。

然后您必须使用touchesBegan 方法来检查用户是否触摸了屏幕。因此,对于名称,您可以通过检查您之前设置的名称来检查用户是否触摸了 greenTile:

 override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
    for touch in touches{

        let location = touch.locationInNode(self)
        let node:SKNode = self.nodeAtPoint(location)

        if(node.name == "greenTile"){
           moveGreenTile()
        }

    }

}

关于ios - 检测用户何时点击 SKSpriteNode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28525848/

相关文章:

ios - 我们如何将按钮标题标签设置在 x 轴和 y 轴的中心

ios - UInt8 XOR 数组结果到 NSString 的转换每次都返回 nil

ios - .rangeOfString() 在 Swift 中带有开关

ios - 通过操纵杆进行一致平稳的运动

ios7 - 如何更改执行的 SpriteKit Action 的持续时间

ios - 如何按照给定的方式为 uinavigationbar 设置确切的颜色,我需要在下面

ios - 标签栏项目不显示

ios - 在厚UIBezierPath上检测触摸

SwiftUI,仅用于容器的阴影

ios - 将不同的发射器分配给随机的不同节点