0

我正在使用 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 行动的持续时间。

4

1 回答 1

0

有2种可能:

背景移动速度是恒定的,就像你现在拥有的一样。不要在 addTargetFibre 中使用 dt,因为你不想每帧都调用它。如果你知道initialPosition、finalPosition和speed,就写个程序计算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 来检查您的精灵是否已离开屏幕,如果已离开,则将其从父级中删除。

于 2014-04-30T11:03:36.733 回答