我正在使用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动作中加入的持续时间。
答案 0 :(得分:0)
有两种可能性:
背景移动速度是恒定的,就像你现在所拥有的那样。不要在addTargetFibre中使用dt,因为你不想每帧都调用它。如果您知道initialPosition,finalPosition和speed,只需编写一个程序来计算2点之间的距离(在iOS版本的Cocod2D中存在ccpDistance,我确信它是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来检查您的精灵是否已离开屏幕,如果已经离开,则将其从父项中删除。