我正在尝试将一个Sprite(" Spaceship")移动到一个圆圈中,执行点击。
以下是执行点击时触发的代码:
- (void)newSpaceShipAt: (CGPoint)location
{
SKSpriteNode *hull = [[SKSpriteNode alloc]initWithImageNamed:@"Spaceship"];
CGMutablePathRef path = CGPathCreateMutable();
CGPathAddArc(path, NULL, location.x, location.y, self.size.width / 5.0, 0, 360, YES);
SKAction *move = [SKAction sequence:@[
[SKAction followPath:path duration:1],
]];
[hull runAction:[SKAction repeatActionForever:move]];
hull.name = @"Spaceship";
hull.scale = 0.5;
hull.physicsBody = [SKPhysicsBody bodyWithCircleOfRadius:MAX(hull.size.width / 2.0, hull.size.height / 2.0)];
hull.physicsBody.dynamic = NO;
[self addChild:hull];
}
我是太空飞船无限期地在圆圈中移动点#34;位置",这是执行点击的地方。然而,发生的事情是,在一次成功的革命之后,宇宙飞船会移动"位置"相对于点击。例如,如果在(50,100)上执行了点击,那么在一次旋转之后它将相对于场景移动到(100,200),并且它将继续。
我该怎么做才能解决这个问题?或者如果我的方法完全错误,那会更好吗?
此外,绘制轨迹(简单线条)到精灵运动的最佳方法是什么?
答案 0 :(得分:0)
来自followPath:duration:
...
<强>讨论强> 调用此方法相当于调用 followPath:asOffset:orientToPath:duration:方法,传入YES为 偏移和方向参数。
此方法的行为将告诉hull
定向到路径,并告诉它使用路径作为偏移量。即每次运行时它将移动50,100。
请改用此方法......
[SKAction followPath:path asOffset:NO orientToPath:YES duration:1.0];
这应该可以解决你的问题。
另外,摆脱那个序列。
这样做......
SKAction *moveAction = [SKAction followPath:path asOffset:NO orientToPath:YES duration:1.0];
[hull runAction:[SKAction repeatActionForever:moveAction]];