2015年02月26日

cocos2d-xでのgetLocationInView()とgetLocation()

cocos2d-xでどうもY座標の取得がうまくいかなかったのですがgetLocationInView()とgetLocation()で挙動が異なるのが原因でした。詳しくは以下を参照

参考:cocos2d-xでの座標系(getLocationとgetLocationInViewについて) | ふつーのエンジニアのブログ

getLocation()はOpenGLの座標系(左下)でとるが、getLocationInView()は画面の座標(左上)で座標を取るようです。

Point touchPoint = Vec2(touch->getLocationInView().x, touch->getLocationInView().y);


Point touchPoint = touch->getLocation();
posted by ねこまんま at 08:29
Comment(0) | TrackBack(0) | cocos2d

2015年02月25日

cocos2d-x v3.2でスプライトがタップされたか判定

以下のようにaddEventListenerWithSceneGraphPriority時にスプライト画像とイベントを関連付けるとタップ時にgetCurrentTarget()でスプライト画像を取得しスプライトがタップされたか判定できるようになる。

bool HelloWorld::init()
{
if ( !Layer::init() )
{
return false;
}
Size visibleSize = Director::getInstance()->getVisibleSize();
auto sprite = Sprite::create("card_back.png");
sprite->setPosition(Point(visibleSize.width/2,visibleSize.height/2));
addChild(sprite,0);

//イベントリスナーを作成
auto listener = EventListenerTouchOneByOne::create();

//タッチ開始
listener->onTouchBegan = [](Touch* touch, Event* event){
//target : ターゲットのスプライト
auto target = (Sprite*)event->getCurrentTarget();

//targetBox : タッチされたスプライトの領域
Rect targetBox = target->getBoundingBox();

//touchPoint : タッチされた場所
Point touchPoint = Vec2(touch->getLocationInView().x, touch->getLocationInView().y);

//touchPointがtargetBoxの中に含まれているか判定
if (targetBox.containsPoint(touchPoint))
{
log("tapped!!");
return true;
}

return false;
};



//イベントリスナーを登録
this->getEventDispatcher()->addEventListenerWithSceneGraphPriority(listener, sprite);

return true;
}


参考:Cocos2d-x v3:スプライトのタップ | Lady Wendy
posted by ねこまんま at 01:29
Comment(0) | TrackBack(0) | cocos2d

cocos2d-x v3.2でタップを制御2

cocos2d-x v3.2でタップを制御とは異なるタップ制御方法

hに以下の記述をします。

class HelloWorld : public cocos2d::Layer
{
public:
(中略)
bool onTouchBegan(cocos2d::Touch* touch,cocos2d::Event* event);
void onTouchMoved(cocos2d::Touch* touch, cocos2d::Event* event);
void onTouchEnded(cocos2d::Touch* touch, cocos2d::Event* event);
};


cppには以下を記述します。

bool HelloWorld::init()
{
if ( !Layer::init() )
{
return false;
}
//イベントリスナーを作成
auto listener = EventListenerTouchOneByOne::create();
listener->onTouchBegan = CC_CALLBACK_2(HelloWorld::onTouchBegan, this);
listener->onTouchMoved = CC_CALLBACK_2(HelloWorld::onTouchMoved, this);
listener->onTouchEnded = CC_CALLBACK_2(HelloWorld::onTouchEnded, this);
//イベントリスナーを登録
this->getEventDispatcher()->addEventListenerWithSceneGraphPriority(listener, this);
return true;
}
bool HelloWorld::onTouchBegan(Touch *touch, Event *event)
{
log("TouchBegan");
return true;
}
void HelloWorld::onTouchMoved(Touch *touch, Event *event)
{
log("Touch Moved!");
}
void HelloWorld::onTouchEnded(Touch *touch, Event *event)
{
log("Touch Ended!");
}


参考 : Cocos2d-x v3:シングルタッチを受け付ける | Lady Wendy
posted by ねこまんま at 00:19
Comment(0) | TrackBack(0) | cocos2d

2015年02月24日

cocos2d-x v3.2でタップを制御

cocos2d-x v3.2でタップを制御する方法。.cpp内のHelloWorld::init()などで宣言しておくとタップ時にログが出力されます。

//イベントリスナーを作成
auto listener = EventListenerTouchOneByOne::create();

//タッチ開始
listener->onTouchBegan = [](Touch* touch, Event* event){
log("TouchBegan");
return true;
};

//タッチ中
listener->onTouchMoved = [](Touch* touch, Event* event){
log("TouchMoved");
};

//タッチ終了
listener->onTouchEnded = [](Touch* touch, Event* event){
log("TouchEnded");
};

//イベントリスナーを登録
this->getEventDispatcher()->addEventListenerWithSceneGraphPriority(listener, this);


参考: Cocos2d-x v3:シングルタッチを受け付ける | Lady Wendy
posted by ねこまんま at 00:42
Comment(0) | TrackBack(0) | cocos2d

2015年02月23日

cocos2d-x v3.2で定数宣言

cocos2d-x v3.2では#defineで定数宣言を行う。(当然大文字で_区切り)

#define FUGA 1
#define HOGE "HOGE"


出力はそのまま利用できる

CCLOG("FUGA is %d",FUGA);
CCLOG("HOGE is %s",HOGE);
posted by ねこまんま at 09:51
Comment(0) | TrackBack(0) | cocos2d

広告


この広告は60日以上更新がないブログに表示がされております。

以下のいずれかの方法で非表示にすることが可能です。

・記事の投稿、編集をおこなう
・マイブログの【設定】 > 【広告設定】 より、「60日間更新が無い場合」 の 「広告を表示しない」にチェックを入れて保存する。