我已经开始尝试使用SpriteKit进行游戏开发。我正在创造一个破砖游戏。所以我遇到了一个关于如何随机化球的起始方向的问题。
我的球具有以下属性
ball.physicsBody.friction = 0;
ball.physicsBody.linearDamping = 0;
ball.physicsBody.restitution = 1 ; //energy lost on impact or bounciness
为了在游戏过程中从不同方向开始,我随机选择了4个向量,因为我使用applyImpulse
方法将球指向特定方向,我需要确保球如果矢量值很低,则不会变慢。
int initialDirection = arc4random()%10;
CGVector myVector;
if(initialDirection < 2)
{
myVector = CGVectorMake(4, 7);
}
else if(initialDirection >3 && initialDirection <= 6)
{
myVector = CGVectorMake(-7, -5);
}
else if(initialDirection >6 && initialDirection <= 8)
{
myVector = CGVectorMake(-5, -8);
}
else
{
myVector = CGVectorMake(8, 5);
}
//apply the vector
[ball.physicsBody applyImpulse:myVector];
这是正确的方法吗?我尝试使用applyForce
方法,然后,在施加力后球速度减慢。
有什么方法可以让我的方向随机化并且仍能保持我的速度吗?
答案 0 :(得分:2)
基本步骤
这是一个如何做到这一点的例子
<强> ObjC:强>
CGFloat angle = arc4random_uniform(1000)/1000.0 * M_PI_2;
CGFloat magnitude = 4;
CGVector vector = CGVectorMake(magnitude*cos(angle), magnitude*sin(angle));
[ball.physicsBody applyImpulse:vector];
<强>夫特强>
let angle:CGFloat = CGFloat(arc4random_uniform(1000)/1000) * (CGFloat.pi/2)
let magnitude:CGFloat = 4
let vector = CGVector(x:magnitude * cos(angle), y:magnitude * sin(angle))
ball.physicsBody?.applyImpulse(vector)