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

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.

主站蜘蛛池模板: 密云县| 永仁县| 康平县| 新绛县| 巩义市| 凤冈县| 青龙| 旅游| 报价| 彩票| 元氏县| 留坝县| 林西县| 鸡西市| 新建县| 新昌县| 敖汉旗| 微博| 琼结县| 峨边| 蒲江县| 孟津县| 济源市| 响水县| 阳朔县| 天祝| 兴义市| 阿尔山市| 大邑县| 阳泉市| 江阴市| 双峰县| 墨竹工卡县| 青岛市| 盈江县| 清水县| 阿合奇县| 息烽县| 喀喇| 行唐县| 临西县|