Iphone SKSpriteKit-调用didBeginContact时重新定位移动对象

Iphone SKSpriteKit-调用didBeginContact时重新定位移动对象,iphone,sprite-kit,skspritenode,Iphone,Sprite Kit,Skspritenode,目前,我有一个盒子大小的iPhone,里面有一个弹跳球。当它碰到墙的边界时,会按预期反弹回来 现在我想做的是,当球向左移动,碰到左墙时,我希望它出现在右边,然后继续向左移动。此外,如果球向右移动并撞到右侧的墙,那么它应该出现在左侧,但仍然向右移动。就像旧的小行星游戏一样 我想我可以使用didBeginContact,简单地改变位置。问题是使用setPosition:更改位置实际上并没有改变它。如果我使用moveTOx:,它确实起作用,那么问题是球不能移动到右边缘,因为在右侧调用didBeginC

目前,我有一个盒子大小的iPhone,里面有一个弹跳球。当它碰到墙的边界时,会按预期反弹回来

现在我想做的是,当球向左移动,碰到左墙时,我希望它出现在右边,然后继续向左移动。此外,如果球向右移动并撞到右侧的墙,那么它应该出现在左侧,但仍然向右移动。就像旧的小行星游戏一样

我想我可以使用didBeginContact,简单地改变位置。问题是使用setPosition:更改位置实际上并没有改变它。如果我使用moveTOx:,它确实起作用,那么问题是球不能移动到右边缘,因为在右侧调用didBeginContact会被调用,它会被移回左侧

球应该从一个边缘平滑地移动到下一个边缘。也许didBeginContact不是这样做的正确地点

有什么建议吗?我无法想象这是一个独特的问题…

我找到了解决方案,现在是:

// Create a method to be called from the update:
-(void)update:(NSTimeInterval)currentTime {
    /* Called before each frame is rendered */
    [self updateSpritePositions];
}

// In your method, iterate through your objects and set the position:
- (void)updateSpritePositions {
    [self enumerateChildNodesWithName:@"ball" usingBlock:^(SKNode *node, BOOL *stop) {

        //  Get the current position
        CGPoint nodePosition = CGPointMake(node.position.x, node.position.y);

        //  If we've gone beyond the edge warp to the other side.
        if (nodePosition.x > (CGRectGetMaxX(self.frame) + 20)) {
            node.position = CGPointMake((CGRectGetMinX(self.frame) - 10), nodePosition.y);
        }

        if (nodePosition.x < (CGRectGetMinX(self.frame) - 20)) {
            node.position = CGPointMake((CGRectGetMaxX(self.frame) + 10), nodePosition.y);
        }

        if (nodePosition.y > (CGRectGetMaxY(self.frame) + 20)) {
            node.position = CGPointMake(nodePosition.x, (CGRectGetMinY(self.frame) - 10));
        }

        if (nodePosition.y < (CGRectGetMinY(self.frame) - 20)) {
            node.position = CGPointMake(nodePosition.x, (CGRectGetMaxY(self.frame) + 10));
        }

    }];

}

您可以通过使用节点的size属性而不是硬编码值来概括代码。当然,谢谢您的建议。一旦我把它做好了,我就这样做。