我想创建一些目标精灵,让它们可以随机的在屏幕顶部出现,底部消失。问题是,这些精灵每次只会移向一个固定点,而不是随机自由的活动,我该如何解决这个问题呢?现在我的用的代码是:
-(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]];
答:Andrew Natoli
(最佳答案)
你的代码中:
是用来说明精灵的移动方向。如果你想要让精灵随机移动,就要在x轴方向上设置相应的随机移动的功能。
arc4random()功能会衍生出一系列的随机数,这样你只需要算出,让它可以在屏幕的x轴方向上显示的确定参数,就可以让精灵按照你的设定随机移动。
至于代码方面,最好不要用160, 0,之类的原始数,而是将它们设定成不同的变量,这样,即使将来想要做数据调整的时候,也不需要花费大量时间去改正所有的代码。
答:Andrew Natoli
下述代码可以设定精灵的初始位置:
可以通过设定赋予变量actualY一个随机参数,可以让精灵在y轴方向上随机运动。
因为我没有改变x轴方向上的相关参数,所以精灵始终会出现在屏幕的右下侧。当然,你也可以改变x轴方向上的参数,让精灵完成随机运动。下述代码讲述的就是改变精灵运动的方法:
这种方法可以创建cocos2d中的Action,将精灵移动到目标位置(已经在function call中提前设定)。
如果调用如下代码:
精灵应该会向上移动,因为目标移动方向是在起点之上。调用function call,精灵会持续向左移动,因为我没有在x轴方向上定义其它的目标位置,所以,你可以尝试编写一些让精灵停止运动的代码。