在用到3.0的時候會有很多函數用法的改變,下面只是自己在使用的過程中常出現的。
單點觸摸:
auto listener = EventListenerTouchOneByOne::create();
listener->setSwallowTouches(true);
listener->onTouchBegan = CC_CALLBACK_2(AnimationCollide::onTouchBegan, this);
_eventDispatcher->addEventListenerWithSceneGraphPriority(listener, this);
同樣下面這種也是:
// Make sprite1 touchable
auto listener1 = EventListenerTouchOneByOne::create();
listener1->setSwallowTouches(true);
listener1->onTouchBegan = [](Touch* touch, Event* event)
{
auto target = static_cast<Sprite*>(event->getCurrentTarget());
Point locationInNode = target->convertToNodeSpace(touch->getLocation());
Size s = target->getContentSize();
Rect rect = Rect(0, 0, s.width, s.height);
if (rect.containsPoint(locationInNode))
{
//target->setOpacity(180);
return true;
}
return false;
};
listener1->onTouchMoved = [](Touch* touch, Event* event)
{
// auto target = static_cast<Sprite*>(event->getCurrentTarget());
// target->setPosition(target->getPosition() + touch->getDelta());
};
listener1->onTouchEnded = [=](Touch* touch, Event* event)
{
auto target = static_cast<Sprite*>(event->getCurrentTarget());
log("sprite onTouchesEnded.. ");
//target->setOpacity(255);
if (target == sprite2)
{
sprite2->setLocalZOrder(100);
}
else
{
sprite2->setLocalZOrder(20);
}
if(target == sprite1)
{
sprite1->setLocalZOrder(100);
}
else
{
sprite1->setLocalZOrder(10);
}
if(target == sprite3)
{
sprite3->setLocalZOrder(100);
}
else
{
sprite3->setLocalZOrder(30);
}
};
這個方法是在Testcpp裏面,具體的效果是點擊到那張圖片後可以拖動,同時它的Zorder會升高。
在上面的代碼中出現了 CC_CALLBACK_2 和
listener1->onTouchBegan = [](Touch* touch, Event* event)、
listener1->onTouchEnded = [=](Touch* touch, Event* event)
第一個:
CC_CALLBACK_0
CC_CALLBACK_1
CC_CALLBACK_2
CC_CALLBACK_3
關於上面我簡單的理解就是回調函數中所使用的幾個參數。更加詳細的可以看這個位置 詳細講解
第二個:
listener1->onTouchBegan = [](Touch* touch, Event* event)、
listener1->onTouchEnded = [=](Touch* touch, Event* event)
關於onTouchBegan 的不明白的 詳細的講解 點擊打開鏈接
暫時寫這麼多。。。