掌握iOS和SpriteKit我正在使用Objective-C开发游戏。它基本上是一个自上而下的驾驶游戏,带有一个速度按钮和两个左右方向按钮。 但是,我似乎无法弄清楚如何正确地使转向工作。
到目前为止,我已经实现了三个按钮,这使得一个节点(汽车)向前移动并转向一定角度的角度。相关代码如下所示:
#define SK_DEGREES_TO_RADIANS(__ANGLE__) ((__ANGLE__) * 0.01745329252f)
#define SK_RADIANS_TO_DEGREES(__ANGLE__) ((__ANGLE__) * 57.29577951f)
@implementation GameScene {
SKSpriteNode *car;
int speed;
int rotation;
BOOL turnRight;
}
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch *touch = [touches anyObject];
CGPoint location = [touch locationInNode:self];
SKNode *node = [self nodeAtPoint:location];
// Drive button
if ([node.name isEqualToString:@"driveNode"]) {
speed = 120;
}
// Right
if ([node.name isEqualToString:@"moveRight"]) {
turnRight = YES;
rotation = rotation + 20;
}
// Left
if ([node.name isEqualToString:@"moveLeft"]) {
rotation = rotation - 20;
}
}
更新:
-(void)update:(CFTimeInterval)currentTime {
if (turnRight == YES) {
NSLog(@"Turning right..");
/*
I imagine that calculations should be done here
*/
}
float angle = atan2f(speed, rotation);
car.zRotation = angle - SK_DEGREES_TO_RADIANS(90);
CGFloat rate = 1;
CGVector relativeVelocity = CGVectorMake(rotation, speed - car.physicsBody.velocity.dy);
car.physicsBody.velocity = CGVectorMake(rotation, car.physicsBody.velocity.dy + relativeVelocity.dy * rate);
}
我在turnRight
touchesEnded
的值设置为NO
我的问题是,现在实施这种方式,汽车无法向右转,而不是水平转向。我想要的是当继续按下右键时,汽车最终应以恒定速度开圆。我无法弄清楚逻辑和数学如何实现它。
我已经检查了this question等等,这在某种程度上帮助了我,但我还没有完全弄明白。
有人能把我放在正确的方向吗?我已经浏览了网页并寻找解决方案,但是没有找到任何可以帮助我解决的问题。
答案 0 :(得分:0)
您可能需要检查施加扭矩。它不会调整你的车速。
- applyTorque:对物体施加扭矩。
宣言SWIFT func applyTorque(_ torque:CGFloat)OBJECTIVE-C - (void)applyTorque:(CGFloat)torque参数扭矩扭矩量,单位为牛顿米。讨论此方法生成角度 身体加速而不会引起任何线性加速。该 force适用于单个模拟步骤(一帧)。
可用性适用于iOS 7.0及更高版本。另见 - applyForce: - applyForce:atPoint:mass