【问题标题】:Please help! Creating new objects (from array?) after an object completes task请帮忙!在对象完成任务后创建新对象(从数组?)
【发布时间】:2011-05-12 16:56:52
【问题描述】:

我正在编写一个 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";

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

【问题讨论】:

    标签: iphone ios4 iphone-sdk-3.0


    【解决方案1】:

    您不应该测试 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中添加

    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];
        }
    }
    

    【讨论】:

    • 好的,谢谢!但是我如何让该对象停止并停留在它撞击的边缘(而不是消失),然后创建另一个相同的对象来接管加速度计输入?
    • 为什么会消失?首先,您如何在屏幕上绘制它?你应该继续画它。如果第一个对象碰到边缘,您可以通过调用创建新对象的方法来创建新对象。这可以在 else 语句中完成。
    • 不,它目前没有消失,但我无法让它停止接受加速度计输入并切换到第一个碰到边缘时需要创建的新对象。所以现在,它撞到墙上,然后如果你把手机从墙上倾斜,它就会继续移动。但我希望它撞墙,靠墙停下,然后创建一个接管加速度输入的新对象。
    • 好的,所以 mutableBoxArray 数组将在数组中包含我的每个盒子颜色图像(例如,我有 orangeBox1.png、blueBox1.png、greenBox1.png、pinkBox1.png),然后是lastObject 会一次得到一个吗?它将从一个开始,然后当它碰到边缘时,会出现一个新框并根据加速度输入四处移动,而另一个则保持锁定在边缘上?如何声明数组并添加图像?我非常感谢您的帮助,感谢您的帮助,并提前感谢您。编码对我来说是如此令人沮丧,但你的帮助帮助我想克服这个!谢谢!
    • 好的,我认为应该可以。我目前遇到两个错误。错误是相同的并且已读取;对成员“中心”的请求不是一个结构或工会,他们正在这些方面......
    猜你喜欢
    • 1970-01-01
    • 2012-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-06
    • 1970-01-01
    • 2019-04-30
    • 1970-01-01
    相关资源
    最近更新 更多