官术网_书友最值得收藏!

Time for action – implementing GameSprite

With the header out of the way, all we need to do is implement our methods.

  1. Select the GameSprite.cpp file and let's start on the instantiation logic of the class:
    #include "GameSprite.h"
    
    GameSprite::GameSprite(void){
        _vector = Vec2(0,0);
    }
    
    GameSprite::~GameSprite(void){
    }
    
    GameSprite* GameSprite::gameSpriteWithFile(const char * pszFileName) {
       auto sprite = new GameSprite();
       if (sprite && sprite->initWithFile(pszFileName)) {
              sprite->autorelease();
              return sprite;
       }
       CC_SAFE_DELETE(sprite);
       return sprite = nullptr;
    }
  2. Next we need to override the Node method setPosition. We need to make sure that whenever we change the position of the sprite, the new value is also used by _nextPosition:
    void GameSprite::setPosition(const Point& pos) {
        Sprite::setPosition(pos);
        if (!_nextPosition.equals(pos)) {
            _nextPosition = pos;
        }
    }
  3. And finally, we implement our new method to retrieve the radius of our sprite, which we determine to be half its texture's width:
    float GameSprite::radius() {
        return getTexture()->getContentSize().width * 0.5f;
    }

What just happened?

Things only begin happening in the static method. We create a new GameSprite class, then we call initWithFile on it. This is a GameSprite method inherited from its super class; it returns a Boolean value for whether that operation succeeded. The static method ends by returning an autorelease version of the GameSprite object.

The setPosition override makes sure _nextPosition receives the position information whenever the sprite is placed somewhere. And the helper radius method returns half of the sprite's texture width.

Have a go hero

Change the radius method to an inline method in the interface and remove it from the implementation file.

主站蜘蛛池模板: 托里县| 霸州市| 漳浦县| 沛县| 孝义市| 安新县| 宾川县| 中山市| 如皋市| 会东县| 田阳县| 邢台市| 宁南县| 子洲县| 海门市| 饶平县| 麟游县| 龙南县| 本溪市| 南召县| 建水县| 广宗县| 永昌县| 乌鲁木齐县| 宣武区| 衡东县| 海阳市| 白城市| 鞍山市| 陵川县| 皮山县| 乌兰察布市| 镇江市| 霍城县| 吉隆县| 洞口县| 鞍山市| 吴旗县| 安福县| 滦南县| 石林|