如果你不希望球在每個方向反彈,那麼你應該打球在直線方向。
如果你想保持恆定的速度throught出局了,那麼你需要確保你保持速度:
if(myNode.physicsBody.velocity.dx < 30)
myNode.physicsBody.velocity = CGVectorMake(30, myNode.physicsBody.velocity.dy);
這適用於速度30,當您的節點速度小於30
您可以使用此方法:
-(void)addBallOfType:(NSString *)imageName ofSize:(CGSize) size addSpriteName:(NSString *)name atPoint:(CGPoint)point withBounce:(BOOL) bounce withVelocity:(CGVector)velocity andHitCategory:(int) category addEmitter:(BOOL) addEmitter{
SKSpriteNode * ball = [SKSpriteNode spriteNodeWithImageNamed:imageName];
ball.name=name;
ball.size=size;
ball.anchorPoint=CGPointMake(0, 0);
ball.physicsBody=[SKPhysicsBody bodyWithCircleOfRadius:ball.frame.size.width/2];
ball.physicsBody.categoryBitMask=category;
ball.physicsBody.collisionBitMask=youCollisionBitMask;
ball.physicsBody.contactTestBitMask= youCollisionBitMask;
ball.physicsBody.dynamic=YES;
ball.physicsBody.affectedByGravity=NO;
ball.physicsBody.restitution=1.0;
ball.physicsBody.friction=0.0;
ball.physicsBody.linearDamping=0.0;
ball.physicsBody.angularDamping=0.0;
ball.position=point;
[self addChild:ball];
if (addEmitter) {
_emitterNodePath =
[[NSBundle mainBundle] pathForResource:@"RParticle" ofType:@"sks"];
SKEmitterNode *burstEmitter =
[NSKeyedUnarchiver unarchiveObjectWithFile:_emitterNodePath];
[ball addChild:burstEmitter];
}
if (bounce) {
CGVector impulse = velocity;
[ball.physicsBody applyImpulse:impulse];
}
}
擊中不同的方向:
-(CGVector)hitToLeftWithSpeed:(float)speed{
return CGVectorMake(-speed, 0);
}
-(CGVector)hitToRightWithSpeed:(float)speed{
return CGVectorMake(speed, 0);
}
-(CGVector)hitTotopWithSpeed:(float)speed{
return CGVectorMake(0, speed);
}
-(CGVector)hitToBottomWithSpeed:(float)speed{
return CGVectorMake(0, -speed);
}
-(CGVector)forwardCrossHitWithSpeed:(float)speed{
return CGVectorMake(speed, speed);
}
-(CGVector)backwardCrossHitWithSpeed:(float)speed{
return CGVectorMake(-speed, -speed);
}
對於定位球:
-(CGPoint)addBallAtCenterWithOffsetX:(int)x withOffsetY:(int)y{
return CGPointMake(100+x, 100+y);
}
-(CGPoint)addBallAtTopLeftWithOffsetX:(int) x withOffsetY:(int)y{
return CGPointMake(200+x, 100+y);
}
-(CGPoint)addBallAtTopRightWithOffsetX:(int)x withOffsetY:(int)y{
return CGPointMake(100+x, 100+y);
}
-(CGPoint)addBallAtBottomRightWithOffsetX:(int)x withOffsetY:(int)y{
return CGPointMake(100+x, 2100+y);
}
-(CGPoint)addBallAtBottomLeftWithOffsetX:(int)x withOffsetY:(int)y{
return CGPointMake(100+x, 200+y);
}
,您可以通過調用它:
[self addBallOfType:hBlueBall ofSize:CGSizeMake(75, 75) addSpriteName:@"greenball" atPoint:CGPointMake(100, 100) withBounce:YES withVelocity:[self hitTotopWithSpeed:50] andHitCategory:blueBallHitCategory addEmitter:YES];
這取決於你的衝動,現在烏爾apllying impule在croos direction.So你AR ehitting球在橫向 –