Sprite-Kit场景滚动 - Objective-C/iOS

问题描述:

我正在创建一款iPhone游戏,您可以在地形上飞行月球着陆器。背景图像和地形相同,我将地形包裹在碰撞边界中。Sprite-Kit场景滚动 - Objective-C/iOS

我在横向模式下使用ipad,而im使用的背景/地形是ipad屏幕宽度的3倍。

我不想有无限的滚动地图。我试图做的是获得它,以便当着陆器在屏幕的左侧或右侧250点内时,着陆器将不会继续前进,并且后面的地面将会滚动,而仍然给出移动的幻觉。

-(void)update:(NSTimeInterval)currentTime { 

    if (touching) { // if the user is touching thrust node 

     CGVector movement = [self getVectorFromRotation:lander.zRotation andMagnitude:12000]; 

     if (lander.position.x > self.frame.size.width - 250) { 

      // move the background here.? 
      // example appreciated! 

    } else { 

      [lander.physicsBody applyForce: movement ]; 

    } 
} 

-(CGVector)getVectorFromRotation:(float)radians andMagnitude:(int)mag{ 


    float x = -mag * sin(radians); 

    float y = mag * cos(radians); 

    return CGVectorMake(x, y); 
} 

很明显,我需要停下来时,有没有更多的图像上滚动到屏幕,如果我回去了另一个方向的背景不能移动,直到我来到内的边中的一个250点。

不幸的是,我在屏幕上滚动时找不到的唯一的东西是“玩家”精灵被固定在一个位置,除了每边250点之外,我想要自由移动。

所有帮助表示赞赏。

+0

我可以看到如何做到这一点,但它不会与您当前的代码逻辑。你使用applyForce:来移动你的着陆器,这对物理对象来说很好,但你的背景不是物理对象。这意味着您不能根据着陆器对象的移动轻松地组合背景的移动。你可以做到这一点,如果你选择了一个或另一个,但你想要两个 - 远程对象移动和背景移动。要做你想做的事情,你必须改变你的代码逻辑,以非物理方式移动你的着陆器。例如:x = x + 1。 – sangony

我无法使用物理引擎在sprite工具包中获得所需的效果。这可能是通过其他方式实现的,但我很想重写所有的代码。

在这种情况下,我不得不使用简单地使背景以恒定速度移动的代码。