首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >NSMutableArray不让我访问对象?

NSMutableArray不让我访问对象?
EN

Stack Overflow用户
提问于 2013-07-12 03:48:11
回答 2查看 50关注 0票数 0

我对objective-c和iPhone编程非常陌生(虽然,我对C#有更多一点的背景),我是在实践中学习的。

我目前正在尝试做一个迷你平台游戏,而不是自己检查每个平台,看看我的玩家是否与它相交,我想做一个数组和一个for语句来解决这个问题。(如果我错了,请纠正我,但NSMutableArray看起来很像C#中的List功能)

我输入了我认为可以工作的东西,但它没有,你知道为什么吗?在我的@interface中,我有:

代码语言:javascript
代码运行次数:0
运行
复制
@interface ViewController : UIViewController
{
    NSMutableArray *platforms;
    UIImageView *platform1;
    UIImageView *platform2;
    UIImageView *platform3;
    UIImageView *platform4;
    UIImageView *platform5;
    UIImageView *player;
}

@property (nonatomic) NSInteger GameState;
@property IBOutlet UIImageView *player;
@property IBOutlet UIImageView *platform1;
@property IBOutlet UIImageView *platform2;
@property IBOutlet UIImageView *platform3;
@property IBOutlet UIImageView *platform4;
@property IBOutlet UIImageView *platform5;

在我的@实现中,我有:

代码语言:javascript
代码运行次数:0
运行
复制
- (void)viewDidLoad
{
    [super viewDidLoad];
    [NSTimer scheduledTimerWithTimeInterval:1.0/60 target:self selector:@selector(gameLoop) userInfo:nil repeats:YES];
    gravity = CGPointMake(0,0.195);
    [platforms addObject:platform1];
    [platforms addObject:platform2];
    [platforms addObject:platform3];
    [platforms addObject:platform4];
    [platforms addObject:platform5];
}

- (void)gameLoop
{
    playerVelocity = CGPointMake(playerVelocity.x,playerVelocity.y + gravity.y);
    player.center = CGPointMake(player.center.x + playerVelocity.x,player.center.y + playerVelocity.y);
    for(UIImageView *platform in platforms)
    {
        if(CGRectIntersectsRect(platform.frame,player.frame))
        {
           BOOL check = YES; //break point here to check if it reaches this point
        }
    }    
}

另外,当我简单地输入:

代码语言:javascript
代码运行次数:0
运行
复制
if(CGRectIntersectsRect(platform1.frame,player.frame))
{
    BOOL doubleCHECK = YES;
}

它起作用了。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-07-12 03:52:19

您未能分配平台数组。objective-c中的所有对象都是指针,因此,在您的viewDidLoad方法中,您可能需要这样一行代码:

代码语言:javascript
代码运行次数:0
运行
复制
platforms = [[NSMutableArray alloc] init];
票数 2
EN

Stack Overflow用户

发布于 2013-07-12 03:52:33

如果你在循环之前检查platforms,我相信你会发现它是nil。您需要在使用它之前创建它(viewDidLoad可能是最好的地方,除非您在加载视图之前需要它)-而且与某些语言不同的是,对空对象的操作将静默地返回0,而不是抛出异常。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17602139

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档