gpt4 book ai didi

ios - 在 Swift 中检测到碰撞时更改图像

转载 作者:行者123 更新时间:2023-11-29 01:47:15 24 4
gpt4 key购买 nike

我需要在玩家碰撞时更改敌人 SKSpriteNode 的图像,但在游戏中我会有很多敌人,我只想更改选定的一个。

Enemy.name 是生命的数量,我不知道我是否可以做不同的事情。

func setupPlayer(){
player = SKSpriteNode(imageNamed: "ball")
player.anchorPoint = CGPoint(x: 0.5, y: 0.5)
player.position = CGPoint(x: size.width/2, y: 60)
player.zPosition = Layer.Player.rawValue
player.physicsBody = SKPhysicsBody(circleOfRadius: player.size.width / 2)
player.physicsBody?.mass = 1
player.physicsBody?.restitution = 0.7
player.physicsBody?.dynamic = true
player.physicsBody?.categoryBitMask = playerCategory
player.physicsBody?.contactTestBitMask = enemyCategory
worlNode.addChild(player)
nuevoPlayerControl = true
}

func setupEnemy(){
if nuevoPlayerControl == true && nuevoPlayer == true{
enemy = SKSpriteNode(imageNamed: "ball")
enemy.anchorPoint = CGPoint(x: 0.5, y: 0.5)
enemy.zPosition = Layer.Player.rawValue
enemy.position = CGPoint(x: 250, y: 300)
enemy.physicsBody?.mass = 1
enemy.zRotation = player.zRotation
enemy.size = player.size
enemy.physicsBody = SKPhysicsBody(circleOfRadius: enemy.size.width/2)
enemy.physicsBody?.friction = 1
enemy.physicsBody?.dynamic = true
enemy.physicsBody?.categoryBitMask = enemyCategory
enemy.physicsBody?.contactTestBitMask = playerCategory
enemy.name = "3"
worlNode.addChild(enemy)
}
}

func didBeginContact(contact: SKPhysicsContact) {
var body1 : SKPhysicsBody!
var body2 : SKPhysicsBody!

if contact.bodyA.categoryBitMask < contact.bodyB.categoryBitMask {
body1 = contact.bodyA
body2 = contact.bodyB
}
else {
body1 = contact.bodyB
body2 = contact.bodyA
}
if body1.categoryBitMask == playerCategory && body2.categoryBitMask == enemyCategory {
//here the enemy lose a live and the image should change
let lives = body2.node?.name
if lives! == "3" {
body2.node?.name = "2"
}
if lives! == "2" {
body2.node?.name = "1"
}
if lives! == "1" {
body2.node?.removeFromParent()
}
print(lives)
}
}

最佳答案

如果您需要,您可以随时为敌人编写一个自定义类,它继承自 SKSpriteNode,您可以在其中拥有一个名为 numLives 的属性,因此您可以为此目的使用名称字符串并获取生命数通过enemy.numLives。最简单的方法可能是使用 name 字符串的第一部分作为生命数,第二部分作为你的敌人识别,当你需要生命数或名字时,你只需解析它得到你想要的。例如:

//when you create an enemy:
enemy.name = "3 bigEnemy"

然后,如果你需要访问它,要么使用 for-in 解析/循环,要么使用 subStringWithRange 获取你需要的字符串的一部分:

//to get the number of lives:
let lives = enemy.name.substringWithRange(NSRangeMake(0, 1))
//to get the name of the enemy:
let name = enemy.name.substringWithRange(NSRangeMake(3, enemy.name.length))

碰撞时更改图像的方向正确。您剩下要做的就是更改 body.node 的纹理。如果您有一个图像,您只需使用:

var textureToChangeTo: SKTexture = SKTexture.textureWithImage("yourImageNameHere")
body.node?.texture = textureToChangeTo

关于ios - 在 Swift 中检测到碰撞时更改图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31768512/

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