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

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.

主站蜘蛛池模板: 蛟河市| 治县。| 金门县| 和平县| 正定县| 新化县| 北川| 宜黄县| 荥经县| 华安县| 荔波县| 琼中| 霍州市| 六安市| 静宁县| 禄劝| 普兰店市| 甘孜县| 行唐县| 长白| 富川| 高邑县| 威宁| 万荣县| 双城市| 大丰市| 孟州市| 通化市| 嵊州市| 青冈县| 五台县| 洛浦县| 定结县| 镇原县| 龙山县| 舒兰市| 禄丰县| 安仁县| 济阳县| 桦甸市| 大英县|