gpt4 book ai didi

ios - Xcode swift 3/SpriteKit : Tapping Sprites

转载 作者:行者123 更新时间:2023-11-29 11:50:42 25 4
gpt4 key购买 nike

我一直在研究并尝试了一段时间,以找到一种在您点击 sprite 时激活功能的方法。例如:如果您点击蓝色 Sprite ,它会激活 blue()。点击红色 Sprite ,它会激活 red()。我已经搜索了一段时间,所有答案要么针对旧版本,要么完全不适合我。有人有什么想法吗?

编辑:这是我正在使用的一些代码。

class GameScene: SKScene {

var blue = SKSpriteNode()
var red = SKSpriteNode()
var green = SKSpriteNode()
var help = SKLabelNode()
var score = SKLabelNode()
var points = 0
var loseAmount = 1.0
var firstAdvance = 0
var loseTimer = Timer()

override func didMove(to view: SKView) {

self.physicsWorld.contactDelegate = self

blue = self.childNode(withName: "blue") as! SKSpriteNode
blue.position = CGPoint(x: self.frame.width / 2, y: self.frame.height / 2)
blue.name = "blue"
blue.isUserInteractionEnabled = true

red = self.childNode(withName: "red") as! SKSpriteNode
red.position = CGPoint(x: self.frame.width / 2 + 100, y: self.frame.height / 2)
red.name = "red"
red.isUserInteractionEnabled = true

green = self.childNode(withName: "green") as! SKSpriteNode
green.position = CGPoint(x: self.frame.width / 2 - 100, y: self.frame.height / 2)
green.name = "green"
green.isUserInteractionEnabled = true

help = self.childNode(withName: "help") as! SKLabelNode
help.position = CGPoint(x: self.frame.width / 2, y: self.frame.height / 4 * 3)
help.name = "help"
help.isUserInteractionEnabled = false

score = self.childNode(withName: "score") as! SKLabelNode
score.position = CGPoint(x: self.frame.width / 2, y: self.frame.height - 40)
score.name = "score"
score.text = "\(points)"
score.isUserInteractionEnabled = false

}

func randomMove() {
blue.position = CGPoint(x:Int(arc4random_uniform(244)+38),y:Int(arc4random_uniform(404)+38))
red.position = CGPoint(x:Int(arc4random_uniform(244)+38),y:Int(arc4random_uniform(404)+38))
green.position = CGPoint(x:Int(arc4random_uniform(244)+38),y:Int(arc4random_uniform(404)+38))

}

func advance() {
if (firstAdvance == 0) {
firstAdvance = 1
help.removeFromParent()
points += 1
playPointSound()
randomMove()
loseTimer = Timer.scheduledTimer(timeInterval: loseAmount, target: self, selector: #selector(GameScene.lose), userInfo: nil, repeats: true)

} else if (firstAdvance == 1) {
points += 1
loseAmount -= 0.01
playPointSound()
self.loseTimer.invalidate()
loseTimer = Timer.scheduledTimer(timeInterval: loseAmount, target: self, selector: #selector(GameScene.lose), userInfo: nil, repeats: true)

}

}

func lose() {
playLoseSound()
let endSceneTemp = EndScene(fileNamed: "EndScene")
self.scene?.view?.presentScene(endSceneTemp!, transition: SKTransition.crossFade(withDuration: 0.1))
}

func playPointSound() {
let path = Bundle.main.path(forResource: "", ofType:nil)!
let url = URL(fileURLWithPath: path)

do {
let sound = try AVAudioPlayer(contentsOf: url)
pointSound = sound
sound.play()
} catch {
// couldn't load file :(
}
}

func playLoseSound() {
let path = Bundle.main.path(forResource: "", ofType:nil)!
let url = URL(fileURLWithPath: path)

do {
let sound = try AVAudioPlayer(contentsOf: url)
loseSound = sound
sound.play()
} catch {
// couldn't load file
}
}

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
for touch in (touches) {
let positionInScene = touch.location(in: self)
let touchedNode = self.atPoint(positionInScene)
if let name = touchedNode.name {
if name == "blue" {
advance()
}
if name == "red" || name == "green"{
lose()
}
}
}
}

override func update(_ currentTime: TimeInterval) {

}
}

最佳答案

你只需要为你的 Sprite 指定一个名字:

let redSpriteNode = SKSpriteNode(imageNamed: "red") // add sprite by code
//let redSpriteNode = self.childNode(withName: "red") as! SKSpriteNode // for adding from .sks file
redSpriteNode.name = "red"
let blueSpriteNode = SKSpriteNode(imageNamed: "blue")
redSpriteNode.name = "blue"

并在 touches begin 方法中激活欲望功能。

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
for touch in (touches) {
let positionInScene = touch.location(in: self)
let touchedNode = self.atPoint(positionInScene)
if let name = touchedNode.name {
if name == "red" {
red()
}
if name == "blue" {
blue()
}
}
}
}

您可以像这样找到具有相同名称的所有节点:( reference )

self.enumerateChildNodes(withName: "red") {_,_ in
print(count)
count = count + 1
}

关于ios - Xcode swift 3/SpriteKit : Tapping Sprites,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41295141/

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