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

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.

主站蜘蛛池模板: 裕民县| 缙云县| 辽阳市| 金昌市| 吉安市| 北京市| 余姚市| 南乐县| 磐安县| 阿鲁科尔沁旗| 灌阳县| 广宁县| 成武县| 东光县| 彰化县| 英山县| 金沙县| 炉霍县| 岚皋县| 南靖县| 扶风县| 桐梓县| 金山区| 卓资县| 昌图县| 万宁市| 安远县| 长海县| 若羌县| 双流县| 呼玛县| 加查县| 古蔺县| 巨野县| 新源县| 东光县| 安国市| 祁门县| 黄石市| 哈密市| 康平县|