我想创建一个简单的游戏,水果将从顶部掉落,用户通过点击收集它们。 我的问题是例如点击时落下的苹果消失,所以到目前为止只收集了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)];
}
}
任何帮助将不胜感激! 感谢
答案 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;
}
}
}