2
我希望節點向正確的方向移動,但衝動是以設定的力度。如何在觸摸角度上向節點施加衝擊
let node: SKSpriteNode!;
node = SKSpriteNode(color: UIColor.greenColor(), size: CGSizeMake(50, 50));
node.physicsBody = SKPhysicsBody(rectangleOfSize: node.size);
node.physicsBody?.affectedByGravity = false;
node.physicsBody?.allowsRotation = false;
override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {
node.physicsBody?.velocity = CGVectorMake(0, 0);
// ver 1
node.physicsBody?.applyImpulse(CGVectorMake((0.4) * (location.x - node.position.x), (0.4) * (location.y - node.position.y)), atPoint: CGPointMake(position.x,position.y));
// ver 2
let offset:CGPoint = self.vecSub(location, b: ghost.position);
let direction: CGPoint = self.vecNormalize(offset);
var len: CGPoint = self.vecMult(direction, b: 40);
let impulseVector:CGVector = CGVectorMake(len.x, len.y);
ghost.physicsBody?.applyImpulse(impulseVector);
}
func vecAdd(a: CGPoint, b:CGPoint) -> CGPoint {
return CGPointMake(a.x + b.x, a.y + b.y);
}
func vecSub(a: CGPoint, b:CGPoint) -> CGPoint {
return CGPointMake(a.x - b.x, a.y - b.y);
}
func vecMult(a: CGPoint, b:CGFloat) -> CGPoint {
return CGPointMake(a.x * b, a.y * b);
}
func vecLenght(a:CGPoint)->CGFloat{
return CGFloat(sqrtf(CFloat(a.x) * CFloat(a.x) + CFloat(a.y) * CFloat(a.y)));
}
func vecNormalize(a:CGPoint)->CGPoint{
let len : CGFloat = self.vecLenght(a);
return CGPointMake(a.x/len, a.y/len);
}
版1是可怕的
2版是好的,但過於昂貴
版本3:東西不貴,並與15-100強度應用的衝動,因爲如果觸摸位於屏幕的邊緣,則節點只能移動其當前位置的15-100,而不會到達觸摸位置
是的方法二有幀率下降,我會嘗試你的代碼,並希望工作,非常感謝你 – grape1
這很奇怪,我試過方法二,似乎沒有更多的FPS下降當使用模擬器時比正常情況。使用方法二時,您是否嘗試過在設備上進行測試? – ABakerSmith
我有iPhone 5s,開始時它下降到57-58 fps,節點的移動有滯後。 – grape1