具有触摸功能的cocos2d中的对象数组

时间:2013-03-07 17:45:43

标签: xcode arrays cocos2d-iphone

我想创建一个简单的游戏,水果将从顶部掉落,用户通过点击收集它们。 我的问题是例如点击时落下的苹果消失,所以到目前为止只收集了1个苹果。我想制作某种类型的数组来存储像5个苹果,它们应该以随机的速度和随机位置。然后当收集最后一个时,它应该消失。

这就是我现在正在尝试的东西,它似乎不起作用: 这是创建CCSprite Apple的地方:

    for (int i = 0; i < 5; i++) {
        Apple = [CCSprite spriteWithFile:@"Apple4.png"];
        [self addChild:Apple];
        int positionX = arc4random()%450;
        [Apple setPosition:ccp(positionX, 768)];
    }

这是从上到下的运动:

-(void) callEveryFrame:(ccTime)dt
{
    Apple.position = ccp(Apple.position.x, Apple.position.y -300*dt);
    if (Apple.position.y < -100+64)
    {
        int positionX = arc4random()%1004;
        [Apple setPosition:ccp(positionX, 768)];
    }
}

任何帮助将不胜感激! 感谢

1 个答案:

答案 0 :(得分:1)

注意:编辑的解决方案添加随机位置和速度。 注2:新版增加触摸检测。

使用单个变量存储五个CCSprites? 最后,您将只有该变量中的最后一个CCSprite。

您需要将CCSprite存储在CCArray(或NSMutableArray)中

在头文件中尝试此操作.h:

@interface xyz : CCLayer {
        CCArray *appleArray;
}

@property (nonatomic, retain) CCArray *appleArray;

在您的实施文件.m:

@synthesize appleArray;

- (id) init
{
    if( (self=[super init])) {

        self.touchEnabled = YES;

        // Inicialize CCArray
        self.appleArray = [CCArray arrayWithCapacity:5];

        for (int i = 0; i < 5; i++) {
            CCSprite *Apple = [CCSprite spriteWithFile:@"Apple4.png"];
            [self addChild:Apple];

            int positionX = arc4random()%450;
            int positionY = 768 + arc4random()%1000;
            // Store speed 
            float speed = 150 + arc4random()%400;
            Apple.tag = speed;
            [Apple setPosition:ccp(positionX, positionY)];

            // Add CCSprite into CCArray
            [appleArray addObject:Apple];
        }

        [self scheduleUpdate];
    }
    return self;
}

- (void) update: (ccTime) dt
{
    for (int i = 0; i < 5; i++) {

        CCSprite *Apple = ((CCSprite *)[appleArray objectAtIndex:i]);

        if (Apple.position.y > -250) {
            Apple.position = ccp(Apple.position.x, Apple.position.y - (Apple.tag*dt));
        }
    }
}

- (void) ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    UITouch *touch = [touches anyObject];
    CGPoint location = [touch locationInView:[touch view]];
    location = [[CCDirector sharedDirector] convertToGL:location];

    for (CCSprite *Apple in self.appleArray)
    {
        if (CGRectContainsPoint(Apple.boundingBox, location))
        {
            Apple.visible = NO;
        }
    }
}