我对objective-c和iPhone编程非常陌生(虽然我有更多的C#背景),我正在边做边学。
我目前正在尝试制作一个迷你平台游戏而不是自己检查每个平台以查看我的玩家是否与它相交,我想制作一个数组和一个for语句来处理它。 (如果我错了,请纠正我,但NSMutableArray
似乎与C#中的List
功能非常相似)
我输入了我认为可行的内容,但它没有,任何想法为什么?在我的@interface
我有:
@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;
在我的@implementation中我有:
- (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
}
}
}
另外,当我输入时:
if(CGRectIntersectsRect(platform1.frame,player.frame))
{
BOOL doubleCHECK = YES;
}
有效。
答案 0 :(得分:2)
您未能分配平台阵列。 objective-c中的所有对象都是指针,因此,可能在您的viewDidLoad
方法中,您需要一行代码:
platforms = [[NSMutableArray alloc] init];
答案 1 :(得分:0)
如果您在循环之前检查platforms
,我相信您会发现它是nil
。您需要在使用它之前创建它(viewDidLoad
可能是最好的位置,除非您在加载视图之前需要它) - 并且与某些语言不同,对null对象进行操作将默默返回0,而不是抛出异常。