我能够使目标沿着屏幕顶部随机生成并消失在屏幕的底部.唯一的问题是目标每次只移动到一个固定点.我希望他们移动到屏幕底部的随机点.有任何想法吗?
谢谢.
这是代码:
– (void)addTarget {
CCSpriteSheet *sheet = [CCSpriteSheet spriteSheetWithFile:@"meteorImgs.png" capacity:50];
[self addChild:sheet];
[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"metImg.plist"];
target = [CCSprite spriteWithFile:@"Frame2.png" rect:CGRectMake(0, 0, 60, 120)];
CGSize winSize = [[CCDirector sharedDirector] winSize];
int minY = target.contentSize.height/2;
int maxY = winSize.width*1.5 - target.contentSize.height/2;
int rangeY = maxY - minY;
int actualY = (arc4random() % rangeY) + minY;
target.position = ccp(actualY, target.contentSize.height*5); //- (-target.contentSize.height/2), actualY);
[self addChild:target];
int minDuration = 2.0;
int maxDuration = 4.0;
int rangeDuration = maxDuration - minDuration;
int actualDuration = (arc4random() % rangeDuration) + minDuration;
id actionMove = [CCMoveTo actionWithDuration:actualDuration position:ccp(160,0)];
id actionMoveDone = [CCCallFuncN actionWithTarget:self selector:@selector(spriteMoveFinished:)];
[target runAction:[CCSequence actions:actionMove, actionMoveDone, nil]];
}
以前:
你好,
我用了Ray Wenderlich’s code.我的问题是,如何在纵向模式下在屏幕顶部生成目标,并移动到屏幕的底部.无论我改变什么,都没有真正发生.现在,正如教程所说的那样,目标从右向左移动.
我想要做的(应该更具体)是,不是让目标从屏幕的右侧移动到左边,我希望它们从顶部移动到屏幕的底部.底部).不知何故,代码告诉目标在右侧产生,但我不知道它在哪里.这是代码的主要内容,没有任何其他因素可以影响目标的位置.
-(void)addTarget {
CCSprite *target = [CCSprite spriteWithFile:@"dude_jump.png"
rect:CGRectMake(0, 0, 30, 60)];
CGSize winSize = [[CCDirector sharedDirector] winSize];
int minY = target.contentSize.width/2;
int maxY = winSize.width - target.contentSize.width/2;
int rangeY = maxY - minY;
int actualY = (arc4random() % rangeY) + minY;
target.position = ccp(winSize.width + (target.contentSize.width/2), actualY);
[self addChild:target];
int minDuration = 2.0;
int maxDuration = 4.0;
int rangeDuration = maxDuration - minDuration;
int actualDuration = (arc4random() % rangeDuration) + minDuration;
id actionMove = [CCMoveTo actionWithDuration:actualDuration position:ccp(-target.contentSize.width/2, actualY)];
id actionMoveDone = [CCCallFuncN actionWithTarget:self selector:@selector(spriteMoveFinished:)];
[target runAction:[CCSequence actions:actionMove, actionMoveDone, nil]];
}
最佳答案 (老实说,这可能不那么令人困惑了另一个问题,但无论如何我会在这里回答:P)
你的路线:
id actionMove = [CCMoveTo actionWithDuration:actualDuration position:ccp(160,0)];
是什么告诉精灵在哪里移动.如果你想随机化它,你需要确保在x的位置包含某种随机函数.
arc4random()函数生成一个随机数.您需要做的是一些数学运算,以确保它选择一个仍会显示在屏幕上的x位置,并将其提供给您的移动动作.
int randomX = arc4random() % something; // fill in how you want to restrict your x value so that the sprite stays on the screen!
id actionMove = [CCMoveTo actionWithDuration:actulDuration position:ccp(randomX, 0)];
另一方面,就像编码练习一样,你最好不要在你的代码中使用160,0等原始数字.将它们放入变量(如果它们在多个文件中使用,则为#defines).这样,当您想要在未来调整内容时,您只需要在一个花边中更改这些数字,而不是在您的代码中更改!
希望这可以帮助.祝好运!