在网格xcode中移动一个球

时间:2013-10-21 18:03:08

标签: iphone xcode core-motion uiaccelerometer

我正在尝试构建一个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;
        }

任何想法为什么这不起作用?

1 个答案:

答案 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时才绘制球。

即使您发布了代码,我仍然对您的确切问题/问题感到有些困惑,但我希望这有意义并且有所帮助!