gpt4 book ai didi

ios - 检测用户何时点击 SKSpriteNode

转载 作者:行者123 更新时间:2023-11-28 09:13:20 28 4
gpt4 key购买 nike

我是 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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com