在我的游戏中,我有2个精灵,一个球和一个球拍。我试图限制反射角度,这样它就不会碰到水平。我正在使用此代码检查联系角度:
var impactX = contact.contactNormal.dx
var impactY = contact.contactNormal.dy
var radiansCon: Double = Double(atan((contact.contactNormal.dy / contact.contactNormal.dx)))
var angleCon = Double(radiansCon * 180) / M_PI
//println("Bounce Angle:\(angleCon)")
if(angleCon < 60 && angleCon > 0) {
println("Adjust angle Positive")
} else if (angleCon > -60 && angleCon < 0) {
println("Adjust angle Negative")
}
如果球在没有改变速度的情况下反弹,我该如何改变角度?
(我是精灵套件的新手,所以如果我遗漏任何细节请告诉我)
答案 0 :(得分:1)
可能不是最好的方法,但它现在有效:
var impactX = contact.contactNormal.dx
var impactY = contact.contactNormal.dy
var radiansCon: Double = Double(atan((contact.contactNormal.dy / contact.contactNormal.dx)))
var angleCon = Double(radiansCon * 180) / M_PI
if(angleCon < 60 && angleCon > 0) {
var newX = CGFloat(0.5)
var newY = CGFloat(0.85)
self.ball.body.applyImpulse(CGVectorMake(newX, newY))
} else if (angleCon > -60 && angleCon < 0) {
var newX = CGFloat(-0.5)
var newY = CGFloat(0.85)
self.ball.body.applyImpulse(CGVectorMake(newX, newY))
}
答案 1 :(得分:1)
// Get the absolute value of dx and dy
let dxSpeed = fabs(CGFloat((ball.physicsBody?.velocity.dx)!))
let dySpeed = fabs(CGFloat((ball.physicsBody?.velocity.dy)!))
let speed = sqrt(dxSpeed + dySpeed)
if dxSpeed <= 250.0 {
ball.physicsBody?.applyImpulse(CGVector(dx: -20.0, dy: 0.0))
}
if dySpeed <= 250.0 {
ball.physicsBody?.applyImpulse(CGVector(dx: 0.0, dy: 20.0))
}
if speed > maxSpeed {
ball.physicsBody?.linearDamping = 0.1
} else {
ball.physicsBody?.linearDamping = 0.0
}
当然,这些数字必须根据球的特征进行调整。
答案 2 :(得分:0)
您可以使用精灵的zRotation
属性并设置一个新角度:
yourBody.zRotation = yournewAngle