- Cocos2d-x by Example:Beginner's Guide(Second Edition)
- Roger Engelbert
- 253字
- 2025-04-04 21:05:35
Time for action – implementing GameSprite
With the header out of the way, all we need to do is implement our methods.
- 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; }
- Next we need to override the
Node
methodsetPosition
. 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; } }
- 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.