2017-04-26 59 views
1

我目前正在尝试为我在课堂上创建的太空入侵者游戏产卵外星人。我正在使用计数器的while循环将数组调整为给定的变量值。这样我就可以在不重写任何文字的情况下增加外星人的数量。问题是,虽然我的外星人产卵了,但是x位置并没有像我希望的那样增加。我只在屏幕上看到一个外星人,所以我得出结论,他们都在产卵,但只有1像素的差异,因此不明显。这是我迄今为止,任何帮助将不胜感激!在空间入侵者产卵精灵

//Add and display given amount of aliens... 
    while (alienAmount > displayLoopCounter) { 
     aliens.append(SKSpriteNode(texture: SKTexture(imageNamed: "ClassicAlien"))) 
     self.addChild(aliens[displayLoopCounter]) 
     //Location 
     aliens[displayLoopCounter].position.y = CGFloat(-15) 
     aliens[displayLoopCounter].position.x = CGFloat(displayLoopCounter + 25) 
     print(aliens[displayLoopCounter].position.x) 
     displayLoopCounter += 1 
     print(displayLoopCounter) 
     //Have we run out of aliens yet? 
     if displayLoopCounter > alienAmount { 
      displayAliens = false 
} 
+1

RayWenderlich.com上有一个很棒的教程,展示了如何制作一个类似太空侵略者的游戏。这可能对你有益! https://www.raywenderlich.com/124005/make-game-like-space-invaders-sprite-kit-swift-tutorial-part-1 – naturaln0va

回答

3

你只需要改变你在外星人之间设置的间距。换句话说,你需要设置每个外星人精灵的x位置,让他们之间有更多的间距。目前,您只需将displayLoopCounter添加到每个外星人的x位置。由于displayLoopCounter一次只增加一个,所以外星人都产生了彼此1像素的差异。如果我们想要更大的差异,我们将需要乘以我们预期的间距displayLoopCounter,以便我们得到每个外星人之间的间距。

你可以只设定一个数值类型spacingBetweenAliens变量(如IntCGFLoatDouble)和改变这一行:

aliens[displayLoopCounter].position.x = CGFloat(displayLoopCounter + 25) 

要这样:

let basePosition = displayLoopCounter * spacingBetweenAliens 
aliens[displayLoopCounter].position.x = CGFloat(basePosition + 25) 

这样,外星人将以它们之间的像素值产生spacingBetweenAliens

+0

谢谢!这是一个很大的帮助! –