2010-09-28 77 views
4

我能够使目标沿着屏幕的顶部随机产生并消失在屏幕的底部。唯一的问题是每次只有目标移动到一个固定点。我希望他们移动到屏幕底部的随机点。有任何想法吗? 谢谢。随机雪碧目的地

下面是代码:

- (无效)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]]; 
} 
+1

海伪装这是怎么回事? – Will 2010-09-29 11:40:04

+0

感谢您的支持。更好地去除噪音。 :-) – 2010-09-29 14:09:56

回答

1

(说实话,这很可能是减少混乱张贴另一个问题,但我会在这里反正回答这个问题: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)。这样,当你想在未来调整事情时,你只需要在一个花边中更改这些数字,而不是遍及你的代码!

希望这会有所帮助。祝你好运!

+0

对不起,我很困惑。很多人只是告诉我编辑同一个问题,而不是创建一个新问题。 – tallen11 2010-10-01 00:14:58

+0

非常感谢。这解决了我的问题! – tallen11 2010-10-01 00:17:56

+0

不用担心。很高兴你得到它运行:) – 2010-10-01 00:20:58

0

不管我改变,没有什么 真的发生。

你试过什么改变?

具体而言,我没有看到任何代码检查横向与纵向模式的代码,或有条件地尝试根据某些查询属性更改坐标。

+0

这是我不明白的。 Hmmmm。 – tallen11 2010-09-29 00:05:38

+1

也许如果你添加一个链接到代码片段的源代码,我们可以看到一个小的上下文。 – 2010-09-29 00:09:57

+0

在这里,你去... http://www.raywenderlich.com/352/how-to-make-a-simple-iphone-game-with-cocos2d-tutorial – tallen11 2010-09-29 00:10:53

1

下面的代码设定目标

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); 

当前,通过randomises的范围内可变actualY设置为随机数y位置的开始位置。 要更改它以使y位置始终位于屏幕的底部,您需要更改actualY变量。

int actualY = target.contentSize.height/2; 

这应该将目标放置在屏幕底部开始。请注意,由于我没有对x参数进行任何更改,因此它将始终显示在右下角。我相信你可以弄清楚如何改变x参数!

至于改变它的移动方向,这是在下面的行。

id actionMove = [CCMoveTo actionWithDuration:actualDuration position:ccp(-target.contentSize.width/2, actualY)]; 

这创建了Cocos2D调用Action的内容。这个特殊的是将精灵移动到指定的位置。该位置在该函数调用中设置。

如果你尝试:

id actionMove = [CCMoveTo actionWithDuration:actualDuration position:ccp(-target.contentSize.width/2, winSize.height)]; 

它应该开始向上移动,因为移动现在的目标是高于一切的起点。请注意,使用此函数调用时,其向左移动将继续,因为我没有在x方向上定义不同的目标 - 我认为您可以根据其余的方法找出如何使其停止的方法!

祝你好运,希望这有助于!

+0

非常感谢!这解决了几个小时的挫折! – tallen11 2010-09-29 22:55:14