spritekit中的2D循环背景

时间:2014-08-12 18:10:56

标签: ios objective-c sprite-kit

我有一个弹球游戏,我已经工作了一段时间了。我有多个级别。在许多级别中,屏幕的宽度和高度都有一个边界框,如:

self.physicsBody = [SKPhysicsBody bodyWithEdgeLoopFromRect:self.frame];

但是我想要一个没有边界框的水平,但是当一个球从右边离开屏幕时,我希望它从左边产生。下面是我所说的

的图解说明

Screenshot from the game 右边的粉红色球在黑色箭头方向上施加了F的力。我希望粉红色的球从底角重新生成,在那里我可怕地用红色划线并沿着红色指向的方向,除非与之相撞其他球。问题是球不应该只是消失和重生,而应该是一个无缝过渡。

-(void)update:(CFTimeInterval)currentTime {
/* Called before each frame is rendered */



for (SKNode *node in self.children) {

    CGPoint position = node.position;
    if (position.x > self.scene.size.width + node.frame.size.width/2 || position.y > self.scene.size.height + node.frame.size.height/2) {

        position.x = remainder(position.x, self.scene.size.width) - node.frame.size.width/2;
        position.y = remainder(position.y, self.scene.size.height) - node.frame.size.height/2;

    }

    node.position = position;
}


}

这是我在更新方法中尝试的但是我无法让它足够无缝。这里为了使球更加无缝,当球从一侧完全消失时,球来自另一侧。那不是我想要的。如果球的x%超出范围,我希望同时在另一方看到x%。我希望我清楚自己。

1 个答案:

答案 0 :(得分:0)

如果你想让部分球在屏幕的每一侧都可见,那么你需要为球提供第二个精灵,而不是#34;穿越"。为了允许每个可能的方向交叉,你总共需要四个精灵(特别是当球进入角落时)。

如果你不需要这种行为(即球完全消失后就会出现),你可以使用模数运算符轻松实现。在您的头寸计算后,您可以大致拥有ball.x %= screenWidthball.y %= screenHeight