0

在我的 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论坛上有人问过类似的问题

http://www.cocos2d-iphone.org/forums/topic/ccactions-not-running-smoothly-specifically-ccmoveby-and-ccrotateby/

但是在我的游戏中,我在很多地方都使用了动作序列,通过调度更新或自定义选择器来编写每个动作序列的代码太多了。

4

1 回答 1

0

我认为您可以通过以下代码实现此目的

移动精灵.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

移动精灵.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 方法。然后在游戏层中添加一个更新方法,您可以在其中为所有移动的精灵调用更新。

于 2013-07-07T10:38:12.330 回答