2

私は C++ と cocos2d-x の初心者なので、なぜ間違っているのかわかりません。コード

void
MainLayer::ccTouchesBegan(CCSet *pTouches, CCEvent *pEvent)
{
    // Get any touch and convert the touch position to in-game position.
    CCTouch* touch = (CCTouch*)pTouches->anyObject();
    CCPoint position = touch->locationInView();
    position = CCDirector::sharedDirector()->convertToGL(position);

   __pShip->setMove(position);
}

これは関数のコードです。

Ship::setMove(CCPoint *newPosition)
{
    __move=*newPosition;
}

ご覧のとおり、 CCPointタイプをパラメーターとして使用していますが、位置 ヘッダーで失敗します。

class Ship : public AnimatedObject
{
public:
    Ship();
    bool init(const char* frameName, CCSpriteBatchNode* pSpriteSheet);
    void setMove(CCPoint* newPosition);
    void move();

 private:
     /**
     * A CCMoveTo action set in the move() method.
     */
    cocos2d::CCFiniteTimeAction* __pMoveAction;

    /**
    * This value specifies the ship's speed.
    */
    float   __speed;

     /**
     * This value specifies position to which the ship should move.
     * It's set in touch events callbacks in MainLayer class.
     */
    CCPoint  __move;    
};

私は何を間違っていますか?このコードが CCPoints の変換に失敗するのはなぜですか?

4

1 に答える 1

1

使用する:

__pShip->setMove(&position);  // Address-of

または、関数自体を変更します。

Ship::setMove(CCPoint newPosition) // better: const CCPoint& newPosition
{
    __move = newPosition;
}

が小さいクラスの場合CCPointは、(示されているように) 値で使用するか、大きい場合 (コピーはコストがかかる) は、コメント付きのプロトタイプを使用します。

于 2012-11-28T09:03:51.877 に答える