cocos 2dx getPosition(),总是返回初始位置而不是当前位置

时间:2014-07-14 05:55:08

标签: cocos2d-x

我有一个精灵,有一个动作,通过它向右侧移动。

 CCSprite *spaceShip1=CCSprite::create("ufo_1.png");
 spaceShip1->setPosition(ccp(visibleSize.width/8,visibleSize.height/2));
 this->addChild(spaceShip1, 3);
 CCMoveBy* moveleft1 = CCMoveBy::create(3, ccp(visibleSize.width, 0));
 spaceShip1->runAction(moveleft1);

我想得到sprite的当前视觉位置,因为它因runAction而移动,它应该返回它的更新位置。

我正在使用:

spaceShip1->getPosition();

这个职位在这里使用:

CCParticleSystemQuad* _spaceShip1 = new CCParticleSystemQuad();
_spaceShip1 = CCParticleSystemQuad::create("growingFlare.plist");
_spaceShip1->setPosition(spaceShip1->getPosition());
_spaceShip1->setAngle(180);
_spaceShip1->setScale(5);
_spaceShip1->stopSystem();
this->addChild(_spaceShip1, 4);

粒子效应必须发生在宇宙飞船的当前位置,但它始终在宇宙飞船的初始位置生效。

我试图获得精灵的当前位置。但它总是返回初始位置而不是当前的移动位置。

我需要做些什么才能获得目前的职位?

3 个答案:

答案 0 :(得分:0)

float xPos = spaceShip->getPositionX();
float yPos = spaceShip->getPositionY();
CCLog("%f     %f", xPos, yPos);

在想要获取移动精灵的当前x,y位置的方法中尝试此操作。它不会得到你现在得到的初始位置。

答案 1 :(得分:0)

在init()期间发生粒子初始化。动画不是现场,因此总是会给出初始位置。

您有2个选项。

  1. 在您的更新方法中。粒子系统的SetPosition()每帧到更新的太空船getPostion。
  2. 让粒子系统成为宇宙飞船的孩子。 如果是“this-> addChild()”,请执行“_firstSpaceShip-> addChild(_particleSystem)”并给它一个像-10这样的初始x位置,所以它总是跟在你的宇宙飞船后面。

答案 2 :(得分:0)

可能会帮助你

CCParticleSystemQuad* _spaceShip1 = new CCParticleSystemQuad(); _spaceShip1 = CCParticleSystemQuad::create("growingFlare.plist"); _spaceShip1->setPosition(spaceShip1->getPositionX(), spaceShip1->getPositionY());