在我的cocos2d项目中,我使用CCMoveBy动作将精灵从最左角移动到最右角。这是代码
CCSprite* sprite1 = [CCSprite spriteWithFile:@"Icon.png"];
sprite1.position = ccp(100, 100);
[self addChild:sprite1];
[sprite1 runAction:[CCSequence actions:
[CCMoveBy actionWithDuration:4 position:ccp(300, 0)],
[CCMoveBy actionWithDuration:2 position:ccp(0, 200)],
[CCMoveBy actionWithDuration:4 position:ccp(-300, 0)],
[CCMoveBy actionWithDuration:2 position:ccp(0, -200)], nil]];
精灵没有顺利移动,而是在移动时有时会卡住。 有人在cocos2d论坛上问过类似的问题
但在我的游戏中,我在很多地方使用动作序列,通过安排更新或自定义选择器来编码每个动作序列太多了。
答案 0 :(得分:0)
我认为您可以通过以下代码
来实现这一目标MovingSprite.h
#import <Foundation/Foundation.h>
#import "cocos2d.h"
@interface MovingSprite : CCSprite {
float _vx;
float _vy;
}
-(void) update:(ccTime)dt;
@property (nonatomic, assign) float vx;
@property (nonatomic, assign) float vy;
@end
MovingSprite.m
#import "MovingSprite.h"
@implementation MovingSprite
@synthesize vx = _vx;
@synthesize vy = _vy;
-(void)update:(ccTime)dT
{
self.vy -= (kGravity * dT); //optionally apply gravity
self.position = ccp(self.position.x + (self.vx*dT), self.position.y + (self.vy*dT));
}
并添加[self scheduleUpdate];到游戏图层的init方法。然后在游戏层中添加一个更新方法,在其中为所有移动的精灵调用update。