ios - SKSpriteNode 替换为 SKTexture
问题描述
我的问题是,当我玩游戏时,即使敌人没有碰到我的角色,而是飞得很近,我也会失去生命。我明白问题是我角色的透明空间与敌人的透明空间接触。
我想按照SKPhysicsBody 文档中的建议进行操作。如何使用我当前的代码实现这一点?
func madEnemy() {
let randomNumber = Int.random(in: 1..<6)
let enemy = SKSpriteNode(imageNamed: "enemy\(randomNumber)")
enemy.position = CGPoint(
x: cameraRect.maxX + enemy.size.width/2,
y: CGFloat.random(
min: cameraRect.minY + enemy.size.height/2,
max: cameraRect.maxY - enemy.size.height/2))
enemy.zPosition = 50
enemy.name = "enemy"
addChild(enemy)
let actionMove =
SKAction.moveBy(x: -(size.width + enemy.size.width), y: 0, duration: 2.0)
let actionRemove = SKAction.removeFromParent()
enemy.run(SKAction.sequence([actionMove, actionRemove]))
}
解决方案
您只需要SKTexture
先从图像创建一个对象,然后使用该纹理创建一个对象SKSpriteNode
,以便使用该纹理来调整SKPhysicsBody
节点大小。
func madEnemy() {
let randomNumber = Int.random(in: 1..<6)
let enemyTexture = SKTexture(imageNamed: "enemy\(randomNumber)")
let enemy = SKSpriteNode(texture: enemyTexture)
enemy.physicsBody = SKPhysicsBody(texture: enemyTexture, size: CGSize(width: enemy.size.width, height: enemy.size.height))
enemy.position = CGPoint(
x: cameraRect.maxX + enemy.size.width/2,
y: CGFloat.random(
min: cameraRect.minY + enemy.size.height/2,
max: cameraRect.maxY - enemy.size.height/2))
enemy.zPosition = 50
enemy.name = "enemy"
addChild(enemy)
let actionMove =
SKAction.moveBy(x: -(size.width + enemy.size.width), y: 0, duration: 2.0)
let actionRemove = SKAction.removeFromParent()
enemy.run(SKAction.sequence([actionMove, actionRemove]))
}
推荐阅读
- android - 改造的放置方法在Android中不起作用
- c++ - 类数据成员指针的非类型模板参数包不能用 gcc 编译
- ruby - 如何使用 Yard 记录继承的构造函数
- ignite - 如何在 ignite 缓存中记录特定条目的创建和删除历史?
- python - 特定值的字符串连接
- java - 如何从 .war 文件中删除项目版本
- r - 我想通过 shinyApp 中的登录页面呈现网站
- amazon-web-services - AWS SES 可以设置为使用专用 IP 地址默认发送,还是每封电子邮件都必须具有 X-SES-CONFIGURATION-SET?
- asp.net-core - 如何在身份服务器列和另一个自定义表之间建立外键关系?
- mysql - 状态更新角色回退整个数据中的 kill delete 语句是什么?