一次性接收所有觸點,適合簡單手勢。
auto listener = EventListenerTouchAllAtOnce::create(); listener->onTouchesBegan = [](const vector&, Event*){ log("onTouchesBegan"); }; listener->onTouchesMoved = [](const vector & ts, Event*){ log("touch count %zu", ts.size()); }; Director::getInstance()->getEventDispatcher()->addEventListenerWithSceneGraphPriority(listener, this);
逐個觸點處理,onTouchBegan 返回 true 表示繼續傳遞,false 停止後續事件。
auto listener = EventListenerTouchOneByOne::create();
listener->onTouchBegan = [](Touch* t, Event*){ log("onTouchBegan"); return true; };
listener->onTouchMoved = [](Touch* t, Event*){ log("onTouchMoved"); };
Director::getInstance()->getEventDispatcher()->addEventListenerWithSceneGraphPriority(listener, this);
需先啟用 Device::setAccelerometerEnabled(true),再註冊監聽。
Device::setAccelerometerEnabled(true);
auto listener = EventListenerAcceleration::create([](Acceleration* a, Event*){
log("x:%g y:%g z:%g", a->x, a->y, a->z);
});
Director::getInstance()->getEventDispatcher()->addEventListenerWithSceneGraphPriority(listener, this);
監聽 EventListenerKeyboard,處理 KEY_BACKSPACE 退出應用。
auto listener = EventListenerKeyboard::create();
listener->onKeyReleased = [](EventKeyboard::KeyCode code, Event*){
if (code == EventKeyboard::KeyCode::KEY_BACKSPACE)
Director::getInstance()->end();
};
Director::getInstance()->getEventDispatcher()->addEventListenerWithSceneGraphPriority(listener, this);