0

我有一个 SKSpriteNode 作为 SKScene 的子节点,但精灵节点比场景大得多,我需要用户能够手动滚动精灵节点以查看所有内容(这是一张巨大的地图)。我正在使用 SKAction moveByX: y: Duration: 方法,并且 moveByX 部分按预期工作。但是,Y pat 的移动会导致地图以非常快的速度从屏幕底部射出。这是我在 touchesMoved 中的代码:

    CGFloat xDiff = location.x - prevLocation.x;
    CGFloat yDiff = location.y - prevLocation.y;
    SKAction *moveBy = [SKAction moveByX:xDiff y:yDiff duration:0];
    if (YES) NSLog(@"%f, %f", xDiff, yDiff);
    [map runAction:moveBy];

因此,此逻辑适用于 x 轴,但不适用于 y 轴。此外,如果我将 yDiff 更改为反向计算(prevLocation.y - location.y),我在 NSLog 输出中注意到 yDiff 在单个平移操作中是累积的,但 xDiff 不是。

我错过了什么?

4

1 回答 1

1

我试过你的代码,它符合你的期望。只需仔细检查移动的触摸看起来像这样。

- (void) touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
    CGPoint currentPoint = [[touches anyObject] locationInNode:self];

    CGPoint previousPoint = [[touches anyObject] previousLocationInNode:self];

    CGFloat xDiff = currentPoint.x - previousPoint.x;
    CGFloat yDiff = currentPoint.y - previousPoint.y;

    NSLog(@"%f, %f", xDiff, yDiff);
    SKAction *moveBy = [SKAction moveByX:xDiff y:yDiff duration:0];
    [_bg runAction:moveBy];
}

我也这样设置bg。

    _bg = [SKSpriteNode spriteNodeWithImageNamed:@"background"];
    _bg.anchorPoint = CGPointZero;
    _bg.position = CGPointZero;
    [self addChild:_bg];
于 2013-10-16T04:26:42.777 回答