请帮忙!在对象完成任务后创建新对象(来自数组?)

时间:2011-05-12 16:56:52

标签: iphone ios4 iphone-sdk-3.0

我正在编写一个iPhone应用程序,这是整个概要: 一个物体在屏幕上并根据加速度计输入移动 - 我有这个工作 - 它移动到屏幕的边缘并且不会关闭=完美。现在,我想要发生的是,一旦该对象击中四个屏幕边缘中的任何一个,它应该停止并保持在屏幕上,并且新对象应该“出现”并且由于加速度计输入而开始移动,所以现在两个对象将在屏幕上,但只有1个移动。最终可能会在边缘周围建立20个对象,但一次只能移动1个对象。

所以我现在已经获得了检查边缘命中等所需的帮助,但我现在正试图改变我在屏幕上显示框的方式。我最初是通过视图控制器将图像放在屏幕上,但现在我要做的是从中间的一个框开始,当它碰到边缘时,它应该停止并停留,并且新图像将出现在中心并且如上所述由于加速输入而开始移动。那么我只是使用一个数组从中提取图像?我甚至不把.png放在视图控制器上,我应该编写它吗?以下是我尝试通过数组执行此操作的一些内容:

//In my .h
UIImageView *blocks;
NSString *blockTypes[3];

//In my .m
blockTypes[0] = @"greenBox1.png";
blockTypes[1] = @"greenBox2.png";
blockTypes[2] = @"greenBox3.png";

提前感谢您的帮助!到目前为止帮助很大!

1 个答案:

答案 0 :(得分:0)

你不应该测试newX和newY是否等于30和50.你应该测试它们是否分别小于30和50。

编辑: 我会这样做:

loat newX = [mutableBoxArray lastObject].center.x + (accel.x * 12);
float newY = [mutableBoxArray lastObject].center.y + (accel.y * -12);
if(newX > 30 && newY > 50 && newX < 290 && newY < 430) {
    [[mutableBoxArray lastObject] setCenter: CGPointMake(newX, newY)];
} else {
    MyBox *myBox = [[MyBox alloc] init];
    [mutableBoxArray addObject: myBox];
    [myBox release];
}

编辑2: 在接口文件中添加以下内容

NSMutableArray *mutableBoxArray;
NSArray *imageNamesArray;

然后在loadView add

中的实现文件中
mutableBoxArray = [[NSMutableArray alloc] init];
imageNamesArray = [[NSArray alloc] initWithObjects: @"orangeBox1.png", 
                   @"blueBox1.png", @"greenBox1.png", @"pinkBox1.png", nil];

然后将上述方法改为

static NSInteger imageInt = 0;
loat newX = [mutableBoxArray lastObject].center.x + (accel.x * 12);
float newY = [mutableBoxArray lastObject].center.y + (accel.y * -12);
if(newX > 30 && newY > 50 && newX < 290 && newY < 430) {
    [[mutableBoxArray lastObject] setCenter: CGPointMake(newX, newY)];
} else {
    if (imageInt < [imageNamesArray count]) {
        UIImage *image = [UIImage imageNamed: [imageNamesArray objectAtIndex: imageInt++]];
        UIImageView *imageView = [[UIImageView alloc] initWithImage: image];
        [imageView setCenter: CGPointMake(100.0f, 100.0f)];
        [mutableBoxArray addObject: imageView];
        [imageView release];
    }
}