У меня возникла проблема с заменой образа SKSpriteNode при щелчке, так как я не могу получить доступ к SKSpriteNode в touchesBegan ().
У меня есть местоположение и узел, к которому я прикасаюсь, но я не могу заменить изображение. я попытался заменить изображение как этот "balloon.texture = SKTexture (imageNamed:" explode ")" я не могу использовать этот код, поскольку я создаю свой SKSpriteNode внутри блока. Вот мой код
class GameScene: SKScene {
let brickCategoryBitMask: UInt32 = 0x1 << 2
var balloonArray = ["Blue","Green","Yellow","Purple","Red"]
let viewSize = UIScreen.main.bounds.size
var gameScore: SKLabelNode!
override func didMove(to view: SKView) {
addRandomBalloon()
}
func addRandomBalloon() {
// This function randomly places balloon around the game scene
//
let wait = SKAction.wait(forDuration: 0.7)
let block = SKAction.run({
let randomX = self.randomFloat(from: 50, to: self.frame.size.width - 50)
let randomY = self.randomFloat(from: 200 , to: self.frame.size.height - 100)
let randomBalloon = self.balloonArray.randomElement()!
let balloon = SKSpriteNode(imageNamed: randomBalloon)
balloon.position = CGPoint(x: randomX, y: randomY)
balloon.size = CGSize(width: 25, height: 25)
balloon.physicsBody = SKPhysicsBody(circleOfRadius: balloon.frame.width)
balloon.physicsBody?.linearDamping = 0
balloon.physicsBody?.allowsRotation = false
balloon.physicsBody?.isDynamic = false // Prevents the ball from slowing down when it hits a brick
balloon.physicsBody?.affectedByGravity = false
balloon.physicsBody?.friction = 0.0
balloon.physicsBody?.categoryBitMask = self.brickCategoryBitMask
balloon.run( SKAction.scale(to: 4, duration: 0.5))
self.addChild(balloon)
///assigning unique name to each balloon
if randomBalloon == "Blue"{
balloon.name = "blue_balloon"
}else {
balloon.name = "purple_balloon"
}
removeBalloon(node: balloon, balloonName: balloon.name!) //remove balloon after certain time
})
func removeBalloon(node : SKSpriteNode, balloonName : String){
let deadlineTime = DispatchTime.now() + .seconds(2)
DispatchQueue.main.asyncAfter(deadline: deadlineTime, execute: {
if self.balloonIsTapped == true{
}else{
node.removeFromParent()
}
})
}
let sequence = SKAction.sequence([wait, block])
run(SKAction.repeatForever(sequence), withKey: "addBlock")
}
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
if let touch = touches.first {
let location = touch.location(in: self)
let tappedNodes = nodes(at: location)
for node in tappedNodes {
if node.name == "blue_balloon" {
score = score+1
balloonIsTapped = true
node.run( SKAction.scale(to: 1, duration: 0.4)){
node.removeFromParent()
self.balloonIsTapped = false
}
}
if node.name == "purple_balloon" {
score = score+1
balloonIsTapped = true
node.run( SKAction.scale(to: 1, duration: 0.4)){
node.removeFromParent()
self.balloonIsTapped = false
}
}
}
}
}
// Marker: Random number generation
func randomFloat(from: CGFloat, to: CGFloat) -> CGFloat {
let random: CGFloat = CGFloat(Float(arc4random()) / 0xFFFFFFFF)
return random * (to - from) + from
}
}
Я просто хочу заменить изображение шарика, если пользователь щелкает на шарике. Пожалуйста, помогите или предложите, если что-то не так в этом коде, так как я новичок в разработке игр для iOS и SpriteKit.