0

SKScene の子として SKSpriteNode がありますが、スプライト ノードはシーンよりもはるかに大きいため、すべてを表示するには、ユーザーがスプライト ノードを手動でスクロールできるようにする必要があります (これは巨大なマップです)。 )。私は SKAction moveByX: y: Duration: メソッドを使用しており、moveByX 部分は期待どおりに機能しています。ただし、Y パットによる移動により、マップが画面の下部から非常に速く発射されます。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 は 1 回のパン アクションで累積されますが、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 に答える