在我的 Pong 游戏中,球弹跳不正常。因此,在 View Controller
中,我将 View 的 showPhysics
设置为 true,这是我得到的图像:
这些桨已经在我的代码中调整了大小:
override func didMove(to view: SKView) {
// Create sprites
ball = self.childNode(withName: "ball") as! SKSpriteNode
enemy = self.childNode(withName: "enemy") as! SKSpriteNode
player = self.childNode(withName: "player") as! SKSpriteNode
// Get labels
enemyLabel = self.childNode(withName: "enemyScore") as! SKLabelNode
playerLabel = self.childNode(withName: "playerScore") as! SKLabelNode
// Set constraints
setConstraints()
// Screen border
let border = SKPhysicsBody(edgeLoopFrom: CGRect(x: frame.minX, y: frame.minY - ball.frame.height * 2, width: frame.width, height: frame.height + ball.frame.height * 4))
border.friction = 0
border.restitution = 0
self.physicsBody = border
// Reset game
reset()
}
和我的setConstraints
函数:
func setConstraints() {
let enemyPositionY = SKConstraint.positionY(SKRange(constantValue: frame.maxY - 15))
enemy.constraints = [enemyPositionY]
enemy.size.width = frame.width / 4
let playerPositionY = SKConstraint.positionY(SKRange(constantValue: frame.minY + 15))
player.constraints = [playerPositionY]
player.size.width = frame.width / 4
}
因此,我可以看出,当我调整 Sprite 大小时,物理边界不会改变。我该如何解决这个问题?
这是奇怪的行为,但感谢您的帮助!
编辑
物理定义
(全部在属性检查器中完成):
.
== 编辑(解决方案)==
谢谢。现在,我创建了一个函数来重置 physicsBody
:
import Foundation
import SpriteKit
// Create new default physics body
func createPhysicsBody(for body: inout SKSpriteNode) {
// Create new physics body
body.physicsBody = SKPhysicsBody(rectangleOf: body.frame.size)
body.physicsBody?.isDynamic = false
body.physicsBody?.allowsRotation = false
body.physicsBody?.pinned = false
body.physicsBody?.affectedByGravity = false
body.physicsBody?.friction = 0
body.physicsBody?.restitution = 0
body.physicsBody?.linearDamping = 0
body.physicsBody?.angularDamping = 0
}
要调用它,您可以使用:
createPhysicsBody(for: &player)
编辑
我现在转到了 this这是一种更简单的屏幕布局方式。
最佳答案
PhysicsBodies 不是动态的。当您更改 SKSpriteNode 时,它们不会更改。您将需要重新考虑如何创建您的物理实体。您要么必须在编辑器中提出正确的尺寸并坚持使用,要么必须在代码中调整播放器尺寸后调整 physicsBody 矩形。
player.physicsBody = SKPhysicsBody(rectangleOf: player.frame.size)
关于ios - SpriteKit 物理不匹配图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49887478/