我正在尝试构建一个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;
}
我可以使用此
将最后一行移到最后一列// ROW EIGHT START
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列,但第5列中的球总是以坐标(311,9)结束,而不是我在多个位置指定的坐标(311,481)。
// ROW SEVEN 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 :(得分:0)
你可以使用双数组或矩阵(这里也是同一个东西,只是另一个名字),其中一个条目可以是null或你的球。 绘制时,如果条目为空,您将遍历数组并查看每个条目;什么都没画。如果条目不为空,即它是某个东西,即你的球,那么在该位置绘制该条目表示。
我们可以使用双数组来描述具有列和行的坐标系或网格 将条目(i,j)视为网格中的第i列和第j行。因此,如果球在入口(2,4)中,则表示球当前位于第2列和第4行,如果我们想将球移动到另一列或行,我们只需将条目(2,4)设置为为null并设置所需的条目,例如(2,5)为我们的球 另外,我们可以简单地让null = 0并且在我们的数组中球= 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时才绘制球。
即使您发布了代码,我仍然对您的确切问题/问题感到有些困惑,但我希望这有意义并且有所帮助!