我已经得到了我以前使用过的代码,但是现在我已经将我的sprite子类化了,我需要对它进行修改。下面是:
-(void)moveRandom:(CCSprite*)mos
{
CGPoint randomPoint = ccp(arc4random()%480, arc4random()%320);
NSLog(@"%@", NSStringFromCGPoint(randomPoint));
CGPoint start = mos.position;
CGPoint end = randomPoint;
float distance = ccpDistance(start, end);
float duration = distance/450;
[mos runAction:
[CCSequence actions:
[CCMoveTo actionWithDuration:duration position: randomPoint],
[CCCallBlock actionWithBlock:^{
[self performSelector:@selector(moveRandom:) withObject:mos afterDelay:0.5];
}],
nil]
];
}它所做的是在屏幕上选择一个随机点,然后使它在两个点之间以恒定的速度移动,然后移动精灵,然后重新调用这个方法。
编辑:我之所以想这么做,是因为我会在我的sprite层中执行这个sprite的实例,并且他们都将执行这个方法。
不应该将它合并到我的CCSprite子类中,而应该更像我的精灵层吗?
发布于 2012-02-27 15:17:34
通常,以面向对象的方式,CCSprite的子类将对自己负责(封装)。因此,当您希望雪碧移动您(或CCSprite的子类公开的对象)时,将调用它的moveRandom方法。然后,它将独自完成所有的移动,而没有CCLayer,它知道它是如何实现移动的。
CCSprite子类中的方法如下所示:
@interface AnotherSprite : CCSprite {}
-(void) moveRandom;
@implementation AnotherSprite
-(void)moveRandom
{
CGPoint randomPoint = ccp(arc4random()%480, arc4random()%320);
NSLog(@"%@", NSStringFromCGPoint(randomPoint));
CGPoint start = self.position;
CGPoint end = randomPoint;
float distance = ccpDistance(start, end);
float duration = distance/450;
[self runAction:
[CCSequence actions:
[CCMoveTo actionWithDuration:duration position: randomPoint],
[CCCallBlock actionWithBlock:^{
[self performSelector:@selector(moveRandom) withObject:nil afterDelay:0.5];
}],
nil]
];
}
@end发布于 2014-07-06 19:32:09
为了满足所有明显的需求,我将对CCSprite类本身进行扩展,这将需要:
@interface CCSprite ( MyClassExtensions )
- ( void ) moveRandom;
@end并在@Jon的响应中使用相同的实现,适当地修改@implementation行.通过这种方式,您可以将此方法用于all精灵,而不管它们在应用程序中发生在何处。
希望这能帮上忙..。
https://stackoverflow.com/questions/9440106
复制相似问题