2013-10-21 25 views
0

我正在尝试构建一个iPhone应用程序,它具有5列上下8行的网格来回。我想要一个球能够连续地穿越这些球。我确定必须有一些方法可以做到这一点,如果有人知道有人让我知道。我目前正在为每列和每行使用if语句来隐藏/显示各种球。所以我可以让球穿过第一排,当它到达一列时,它会停下来,并显示该列中的球并上下移动。第一栏的球也一样。当它连续上下移动时,它会被隐藏,并显示该行中的球并移动。当它回到第一排时,它被隐藏起来,第一排球开始上下移动。我的问题是让球显示/隐藏在内部交叉点,即第二列第二列,第二列第三列等。 任何建议。关于如何完成这一点。 我正在使用加速度计motion.gravity来垂直和水平移动球图像。在网格中移动一个球xcode

这是一些代码,我用移动球

if (ball.hidden == NO) { 
       self.ball.center = CGPointMake(self.ball.center.x + n, 9); 
      } 
      //ROW ONE START 
      if (ball.center.x < 9) { 
       ball.center = CGPointMake(9, 9); 
      } 
      if (ball.center.x > 311) { 
       ball.center = CGPointMake(311, 9); 
      } 

      if(self.ball.center.x > 9){ 

       self.balla.hidden = YES; 
       balla.center = CGPointMake(9, 9); 
      } 

      if (ball.center.x ==9) { 


      //balla 
      CGPoint a = CGPointMake(9, 9); 
      if (CGPointEqualToPoint(ball.center,a)) { 
           balla.hidden = NO; 
       self.balla.center = CGPointMake(9, (self.balla.center.y)- y); 
       if (balla.center.y > 9) { 
        ball.center = CGPointMake(9,9); 
        ball.hidden = YES; 
        balla.hidden = NO; 
        self.balla.center = CGPointMake(9 , (self.balla.center.y)- y); 
       } 
       if (balla.center.y < 9) { 
        balla.center = CGPointMake(9,9); 
        ball.hidden = NO; 
       } 
       if (balla.center.y > 559) { 
        balla.center = CGPointMake(9, 559); 
       } 

      } 

这是第一行和第一列(有附加列在这里)

我也做其他行

我已经得到最后一列移动到第七和第八行与此代码。

CGPoint e = CGPointMake(311, 9); 
      if (CGPointEqualToPoint(ball.center,e)) { 

       ball5a.hidden = YES; 
       self.ball5a.center = CGPointMake(311, (self.ball5a.center.y)- y); 
       if(self.ball.center.x < 311){ 
        self.ball5a.hidden = YES; 
       } 
       if (ball5a.center.y < 9) { 
        ball5a.center = CGPointMake(311,9); 
        ball.hidden = NO; 
        ball5a.hidden = YES; 
       } 
       if (ball5a.center.y > 9) { 
        ball.center = CGPointMake(311,9); 
        ball5a.hidden = NO; 
        ball.hidden = YES; 
        self.ball5a.center = CGPointMake(311, (self.ball5a.center.y)- y); 
       } 
       if (self.ball5a.center.y> 480 && self.ball5a.center.y< 482) { 
        ball7.hidden = NO; 
        balla.center = CGPointMake(9, 481); 
        ball7.center = CGPointMake(311 , 481); 
        ball.center = CGPointMake(9, 9); 

       } 
       if (ball5a.center.y > 559) { 
        ball5a.center = CGPointMake(311, 559); 
        ball8.center = CGPointMake(311, 559); 
        ball.center = CGPointMake(9, 9); 
       } 
       if (ball5a.center.y <559) { 
        ball8.center =CGPointMake(9, 559); 
        ball.center = CGPointMake(311, 9); 
        ball8.hidden = YES; 
       } 

,我可以得到最后一行与此

// ROW EIGHT开始移动到最后一列

 CGPoint l = CGPointMake(9, 559); 
     if (CGPointEqualToPoint(balla.center,l)) { 

      balla.hidden = YES; 
      balla.center = CGPointMake(9, 559); 
      self.ball8.center = CGPointMake(self.ball8.center.x + n, 559); 
      ball8.hidden = NO; 
     } 
     if (ball8.center.x > 9) { 
      self.ball8.center = CGPointMake(self.ball8.center.x + n, 559); 
      balla.hidden = YES; 
      balla.center = CGPointMake(9, 559); 
     } 

     if (ball8.center.x < 10) { 
      ball8.center = CGPointMake(9, 559); 

      ball8.hidden = YES; 
      balla.hidden = NO; 
     } 
     if (ball8.center.x > 311) { 
      ball8.center = CGPointMake(311, 559); 
      ball5a.center = CGPointMake(311, 559); 
      ball5a.hidden = YES; 
      ball.center = CGPointMake(311, 9); 
      ball8.hidden = NO; 
     } 
     if (ball8.center.x < 311) { 
      ball5a.center = CGPointMake(311, 9); 
      ball5a.hidden = YES; 
     } 

    } 

然而,当我尝试移动进行七次行到第5列我可以让它传递,但第5列中的球总是以坐标(311,9)而不是我在多个地方指定的坐标(311,481)结束。

//连续7 START

 CGPoint k = CGPointMake(9, 481); 
     if (CGPointEqualToPoint(balla.center,k)) { 
      ball5a.center = CGPointMake(311, 481); 
      balla.hidden = YES; 
      balla.center = CGPointMake(9, 481); 
      self.ball7.center = CGPointMake(self.ball7.center.x + n, 481); 
      ball7.hidden = NO; 
     } 
     if (ball7.center.x > 9) { 
      self.ball7.center = CGPointMake(self.ball7.center.x + n, 481); 
      balla.hidden = YES; 
      balla.center = CGPointMake(9, 481); 
     } 

     if (ball7.center.x < 10) { 
      ball7.center = CGPointMake(9, 481); 
      ball5a.center = CGPointMake(311, 481); 
      ball7.hidden = YES; 
      balla.hidden = NO; 
     } 
     if (ball7.center.x > 310) { 
      ball.center = CGPointMake(311, 9); 
      ball5a.center = CGPointMake(311, 481); 
      ball7.center = CGPointMake(311, 481); 

      ball5a.hidden = YES; 
      balla.center = CGPointMake(9, 481); 
      ball7.hidden = NO; 

     } 
     if (ball7.center.x < 310) { 
      ball5a.center = CGPointMake(311, 481); 
      ball5a.hidden = YES; 
     } 

任何想法,为什么这不工作的权利?

+0

你不能简单地在网格中移动一个球实例吗?或者这是你在与什么挣扎?你如何代表你的网格? – ArniDat

+0

正如我上面所述,我有5列上升和下降与每列UIImageView(球)。 balla,ball2a,ball3a,ball4a和ball5a。我也有一个UIImageView(球)八行中的每一行。球,ball1,ball2等 – user1114881

+0

你使用的是数组吗?你目前的代码是什么?如果你的球在一个数组中(或者大概是一个双数组),你可以简单地通过在数组中移动它来移动球。数组[i] [j] =数组[a] [b],将球从(a,b)移动到(i,j),然后根据数组进行绘制,就像您已经在做的那样。 – ArniDat

回答

0

您可以使用双数组或矩阵(这里同样的东西,只是另一个名称),其中一个条目可以是null或您的球。 当你绘制你将遍历数组并查看每个条目,如果条目为空;你什么也没画。如果条目不是空的,即它是某物,即你的球,那么在条目表示的位置绘制它。

我们可以使用double数组来描述一个坐标系或者一个带有列和行的网格。
考虑一个条目(i,j)为您的网格中的第i列和第j行。因此,如果球进入(2,4),则意味着该球当前在第2列和第4列,如果我们想要将球移动到另一列或行,我们只需将入口(2,4)设置为为空,并设置所需的条目,例如(2,5)是我们的球。
另一件事,我们可以简单地让null = 0和ball = 1在我们的数组中,因为球可以以某种方式作为全局变量保存。

int matrix[20][20]; 

上面一行将创建int类型的基质/双阵列20列和20行的大小。
请注意,最好的做法是遍历每个条目,并将它们设置为某个初始值,在我们的例子中为0,我不会在这里显示。把它作为一个练习;)
现在我们可以某处定位球:

matrix[2][4] = 1; 

现在我们的球是在第2列和第4行
如果我们想将它移动到第10列和行15:

matrix[2][4] = 0; // Remember to remove the ball from its last position 
matrix[10][15] = 1; 

当你想画就可以通过矩阵/阵列运行,并期待在每个条目,如果该条目包含即使您发布后数1

只画出了球,球你的代码我仍然对你确切的问题/问题有些困惑,但我希望这是有道理的并且有帮助!

+0

我还没有尝试过,因为我认为这会将球从一个地点瞬间移动到另一个地点,而我试图从一个地方移动到另一个地点。把我的网格想象成街道,把球当成汽车。汽车沿着街道移动并转弯。这就是我想要做的,我已经完成了。我感谢你的信息,并且知道它的功能是正确的,我很可能会在某一天使用它。 – user1114881