在网格 xcode 中移动球
Posted
技术标签:
【中文标题】在网格 xcode 中移动球【英文标题】:moving a ball in a grid xcode 【发布时间】:2013-10-21 18:03:08 【问题描述】:我正在尝试构建一个 iphone 应用程序,该应用程序具有上下 5 列和来回 8 行的网格。我希望有一个球能够连续遍历这些。我敢肯定,必须有某种方法可以做到这一点,如果有人知道,请告诉我。我目前正在为每一列和每一行使用一个球,其中包含隐藏/显示各种球的 if 语句。所以我可以让球在第一行穿过,当它到达一列时,它会被隐藏,并且该列中的球会显示并上下移动。与第一列中的球相同。当它到达一排时它会上下移动,它会被隐藏,并且该排中的球会显示并移动。当它回到第一排时,它被隐藏起来,第一排的球又开始上下移动。我的问题是让球在内部交叉点上显示/隐藏,即第二行第二列,第二行第三列等。 有什么建议么。关于如何做到这一点。 我正在使用加速度计 motion.gravity 来垂直和水平移动球图像。
这是我用来移动球的一些代码
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;
我可以用这个让最后一行移到最后一列
//第八行开始
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;
但是,当我尝试将第 7 行移动到第 5 列时,我可以将其转移,但第 5 列中的球总是以坐标 (311,9) 而不是我在多个位置指定的坐标 (311,481) 结束。
//第七行开始
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;
任何想法为什么这不能正常工作?
【问题讨论】:
您不能简单地在网格中移动单个球实例吗?或者这就是你正在努力解决的问题?你如何代表你的网格? 如上所述,我有 5 列上下移动,每列都有一个 UIImageView(球)。巴拉,ball2a,ball3a,ball4a和ball5a。我还为八行中的每一行提供了一个 UIImageView (球)。球,球1,球2等 你在使用数组吗?您当前的代码是什么?如果你的球在一个数组中(或者可能是一个双数组),你可以简单地通过在数组中移动它来移动球,即。 array[i][j] = array[a][b],将球从 (a,b) 移动到 (i,j),然后像您似乎已经在做的那样根据数组进行绘制。 我编辑了我的帖子以显示我在做什么。我不确定如何编写或使用双数组。你能给我一个例子,我也会做一些研究。谢谢 【参考方案1】:您可以使用双数组或矩阵(此处相同,只是另一个名称),其中条目可以为空或您的球。 绘制时,您将遍历数组并查看每个条目,如果条目为空;你什么也没画。如果条目不为空,即它是某物,即您的球,则将其绘制在条目表示的位置。
我们可以使用双精度数组来描述具有列和行的坐标系或网格。 考虑一个条目 (i,j) 是网格中的第 i 列和第 j 行。因此,如果球在入口 (2,4) 中,则表示球当前在第 2 列第 4 行,如果我们想将球移动到另一列或另一行,我们只需将入口 (2,4) 设置为为 null 并设置所需的条目,例如 (2,5) 为我们的球。 还有一件事,我们可以简单地让数组中的 null = 0 和 ball = 1,因为可以以某种方式将 ball 作为全局变量保存。
int matrix[20][20];
上面的行将创建一个大小为 20 列和 20 行的 int 类型的矩阵/双数组。 请注意,最好遍历每个条目并将它们设置为某个初始值,在我们的例子中为 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 时才绘制球。
即使在您发布代码之后,我仍然对您的确切问题/问题感到有些困惑,但我希望这有意义并有所帮助!
【讨论】:
我还没有尝试过这个,因为我认为这会将球从一个点瞬间移动到另一个点,而我正在尝试为从一个点到另一个点的移动设置动画。把我的网格想象成街道,把球想象成汽车。汽车沿着街道行驶并转弯。这就是我想要做的,我已经完成了。感谢您提供的信息,我知道它适合它的用途,我很可能有一天会使用它。以上是关于在网格 xcode 中移动球的主要内容,如果未能解决你的问题,请参考以下文章