#スプライトをタップしてみる
まずは駒を配置します。とりあえず、王将だけにしておきます。
makePiecesメソッドを実装します。
駒スプライトのTagに1を設定しておきます。
GameScene.h
class GameScene : public cocos2d::Layer
{
private:
void makeBackground();
void makePieces();
GameScene.cpp
bool GameScene::init()
{
if (! CCLayer::init()) {
return false;
}
// 背景を作成する.
makeBackground();
// 駒を配置する.
makePieces();
return true;
}
// 駒を配置する.
void GameScene::makePieces()
{
Size winSize = Director::getInstance()->getWinSize();
Sprite *spPiece = Sprite::create("sgl01.png");
Size pieceSize = spPiece->getContentSize();
spPiece->setPosition(Point(winSize.width * 0.5, winSize.height * 0.5 - 4 * pieceSize.height));
spPiece->setTag(1);
this->addChild(spPiece);
}
実行すると、王将が配置されています。
さらに、タップして駒を動かすためにメンバ変数とイベントを受け取るメソッドを作成します。
タップ中の駒スプライトのTagを覚えておくmovePieceを追加しています。
GameScene.h
class GameScene : public cocos2d::Layer
{
private:
int movePiece;
void makeBackground();
void makePieces();
public:
static cocos2d::Scene *createScene();
virtual bool init();
CREATE_FUNC(GameScene);
virtual bool onTouchBegan(cocos2d::Touch *pTouch, cocos2d::Event *pEvent);
virtual void onTouchMoved(cocos2d::Touch *pTouch, cocos2d::Event *pEvent);
virtual void onTouchEnded(cocos2d::Touch *pTouch, cocos2d::Event *pEvent);
};
タップしたときにイベントを受け取れるように、setTouchEnableとsetTouchModeメソッドで設定しています。
今回はシングルタップにしています。
GameScene.cpp
bool GameScene::init()
{
if (! CCLayer::init()) {
return false;
}
movePiece = 0;
setTouchEnabled(true);
setTouchMode(Touch::DispatchMode::ONE_BY_ONE);
// 背景を作成する.
makeBackground();
// 駒を配置する.
makePieces();
return true;
}
あとは、各イベントに対応する処理を実装します。
GameScene.cpp
bool GameScene::onTouchBegan(cocos2d::Touch *pTouch, cocos2d::Event *pEvent)
{
Director *pDirector = Director::getInstance();
Point touchPoint = pDirector->convertToGL(pTouch->getLocationInView());
Node *pPiece = this->getChildByTag(1);
if (! pPiece) {
return false;
}
Rect pieceRect = pPiece->getBoundingBox();
if (pieceRect.containsPoint(touchPoint)) {
movePiece = 1;
return true;
}
return false;
}
void GameScene::onTouchMoved(cocos2d::Touch *pTouch, cocos2d::Event *pEvent)
{
if (movePiece == 0) {
return;
}
Node *pPiece = this->getChildByTag(movePiece);
if (! pPiece) {
return;
}
Director *pDirector = Director::getInstance();
Point touchPoint = pDirector->convertToGL(pTouch->getLocationInView());
pPiece->setPosition(touchPoint);
}
void GameScene::onTouchEnded(cocos2d::Touch *pTouch, cocos2d::Event *pEvent)
{
movePiece = 0;
}
実行すると、このようにタップして駒を移動させることができます。
今回はここまで。