Cocos2d将目标速度与滚动背景相匹配



我正在使用Cocos2d Android。

我在Cocos2d中有一个滚动背景,我使用这种方法使其工作:

public void moveBackground(float dt) {
    bg1.setPosition(CGPoint.ccp(bg1.getPosition().x, bg1.getPosition().y
            - speed));
    bg2.setPosition(CGPoint.ccp(bg2.getPosition().x, bg2.getPosition().y
            - speed));
    if (bg1.getPosition().y < -(bg1.getBoundingBox().size.height)) {
        bg1.setPosition(CGPoint.ccp(bg1.getPosition().x,
                bg2.getPosition().y + bg2.getBoundingBox().size.height - 1));
    }
    if (bg2.getPosition().y < -(bg2.getBoundingBox().size.height)) {
        bg2.setPosition(CGPoint.ccp(bg2.getPosition().x,
                bg1.getPosition().y + bg1.getBoundingBox().size.height - 1));
    }
}

速度=5或10或其它。它之所以被称为,是因为每一帧都有一个时间表。

我想以与我的背景滚动相同的速度删除目标,添加目标我使用这种方法:

public void addTargetFibre(float dt) {
    Random rand = new Random();
    CCSprite target = CCSprite.sprite(RessourcesManager.Players.blue_ball);
    target.setScale(0.3f);
    CGSize winSize = CCDirector.sharedDirector().displaySize();
    int actualX = (int) a;
    int n = rand.nextInt(4);
    switch (n) {
    case 0:
        actualX = (int) a;
        break;
    case 1:
        actualX = (int) b;
        break;
    case 2:
        actualX = (int) c;
        break;
    case 3:
        actualX = (int) d;
        break;
    }
    target.setPosition(actualX, winSize.height
            + (target.getContentSize().height / 2.0f));
    addChild(target, 1);
    float d = ((win_size.height+target.getContentSize().height/2)/(60*speed));
    d = d+(d*(float)1/60);
    CCMoveTo actionMove = CCMoveTo.action(d,
            CGPoint.ccp(actualX, -target.getContentSize().height / 2.0f));
    CCCallFuncN actionMoveDone = CCCallFuncN.action(this,
            "removeSprite");
    CCSequence actions = CCSequence.actions(actionMove, actionMoveDone);
    target.runAction(actions);
}

我想要的是我需要在CCMoveTo操作中投入的持续时间。

有两种可能性:

背景移动速度是恒定的,就像你现在所拥有的那样。不要在addTargetFibre中使用dt,因为您不想在每帧都调用它。如果你知道initialPosition、finalPosition和速度,只需编写一个程序来计算2个点之间的距离(ccpDistance存在于iOS版本的Cocod2D中,我相信有一个适用于Android的对应程序(

int d = ccpDistance(intialPosition, finalPosition)/speed;
CCMoveTo actionMove = CCMoveTo.action(d, finalPosition);

背景移动速度是可变的(例如:玩家通过操纵杆控制背景移动(。如果是这样的话,你必须每帧移动精灵,并且你必须有一个从更新中调用的方法来固定位置。

public void updateTargetFibres(float dt) 

每帧更新位置的公式是

sprite.position = CGPointMake(sprite.position.x, sprite.position.y - speed*dt)

在这种方法中,您还可以通过检查位置的y来检查您的精灵是否已离开屏幕,如果已离开,则将其从父对象中删除。

最新更新