TouchableSpriteTest

auto winSize = Director::getInstance()->getWinSize();

    Point origin = Director::getInstance()->getVisibleOrigin();

    auto containerForSprite1 = Node::create();
auto sprite1 = Sprite::create("CyanSquare.png");
sprite1->setPosition(origin + Point(winSize.width / 2, winSize.height / 2) + Point(-80, 80));
containerForSprite1->addChild(sprite1);
addChild(containerForSprite1,10); auto sprite2 = Sprite::create("MagentaSquare.png");
sprite2->setPosition(origin + Point(winSize.width / 2, winSize.height / 2));
addChild(sprite2,20); auto sprite3 = Sprite::create("YellowSquare.png");
sprite3->setPosition(Point(0, 0));
sprite2->addChild(sprite3, 1); 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)) {
log("sprite began... x = %f, y = %f",locationInNode.x , locationInNode.y);
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 onTouchedEnded"); target->setOpacity(255);
if (target == sprite2) {
containerForSprite1->setLocalZOrder(100); }
else if (target == sprite1)
{
containerForSprite1->setLocalZOrder(0);
}
}; _eventDispatcher->addEventListenerWithSceneGraphPriority(listener1, sprite1);
_eventDispatcher->addEventListenerWithSceneGraphPriority(listener1->clone(), sprite2);
_eventDispatcher->addEventListenerWithSceneGraphPriority(listener1->clone(), sprite3); auto removeAllTouchItem = MenuItemFont::create("Remove All Touch Listeners", [this](Ref* sender){ auto senderItem = static_cast<MenuItemFont*>(sender);
senderItem->setString("Only Next item could be clicked"); _eventDispatcher->removeEventListenersForType(EventListener::Type::TOUCH_ONE_BY_ONE); auto nextItem = MenuItemFont::create("Next", [=](Ref* sender){ }); }); removeAllTouchItem->setFontSizeObj(16);
removeAllTouchItem->setPosition(Point(100, 50)); auto menu = Menu::create(removeAllTouchItem, NULL);
menu->setPosition(Point(0, 0));
menu->setAnchorPoint(Point(0, 0));
addChild(menu);

效果:

CustomEventTest

Point origin = Director::getInstance()->getVisibleOrigin();
Size size = Director::getInstance()->getVisibleSize(); MenuItemFont::setFontSize(20); auto statusLabel = Label::createWithSystemFont("No custom event 1 received!", "", 20);
statusLabel->setPosition(origin + Point(size.width/2, size.height-90));
addChild(statusLabel); _listener = EventListenerCustom::create("game_custom_event1", [=](EventCustom* event){
std::string str("Custom event 1 received, ");
char* buf = static_cast<char*>(event->getUserData());
str += buf;
str += " times";
statusLabel->setString(str.c_str());
}); _eventDispatcher->addEventListenerWithFixedPriority(_listener, 1); auto sendItem = MenuItemFont::create("Send Custom Event 1", [=](Ref* sender){
static int count = 0;
++count; char* buf = new char[10];
sprintf(buf, "%d",count);
EventCustom event("game_custom_event1");
event.setUserData(buf);
_eventDispatcher->dispatchEvent(&event);
CC_SAFE_DELETE_ARRAY(buf); });
sendItem->setPosition(origin + Point(size.width / 2, size.height / 2)); auto menu = Menu::create(sendItem, NULL);
menu->setPosition(Point(0, 0));
menu->setAnchorPoint(Point(0, 0));
addChild(menu , -1);

RemoveAndRetainNodeTest

    Point origin = Director::getInstance()->getVisibleOrigin();
Size size = Director::getInstance()->getVisibleSize(); _sprite = Sprite::create("CyanSquare.png");
_sprite->setPosition(origin+Point(size.width/2, size.height/2));
addChild(_sprite, 10); // 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)) {
log("sprite began... x = %f, y = %f",locationInNode.x,locationInNode.y);
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(25);
}; _eventDispatcher->addEventListenerWithSceneGraphPriority(listener1, _sprite); this->runAction(Sequence::create(DelayTime::create(5.0f),CallFunc::create([this](){
_spriteSaved = true;
_sprite->retain();
_sprite->removeFromParent();
}),DelayTime::create(5),CallFunc::create([this](){
_spriteSaved = false;
this->addChild(_sprite);
_sprite->release();
})
, NULL));

RemoveListenerAfterAddingTest

auto item1 = MenuItemFont::create("Click Me 1", [this](Ref* sender){
auto listener = EventListenerTouchOneByOne::create();
listener->onTouchBegan = [](Touch* touch,Event* event)->bool{
CCASSERT(false, "Should not come here!");
return true;
}; _eventDispatcher->addEventListenerWithFixedPriority(listener, -1);
_eventDispatcher->removeEventListener(listener); }); item1->setPosition(Point(0, 80)); auto addNextButton = [this](){ auto next = MenuItemFont::create("Please Click Me To Reset!", [this](Ref* sender){ }); next->setPosition(Point(100, 100)); auto menu = Menu::create(next, NULL);
menu->setPosition(Point(300, 100));
menu->setAnchorPoint(Point::ZERO);
this->addChild(menu); }; auto item2 = MenuItemFont::create("Click Me 2", [=](Ref* sender){
auto listener = EventListenerTouchOneByOne::create();
listener->onTouchBegan = [](Touch* touch, Event* event) -> bool{
CCASSERT(false, "Should not come here!");
return true;
}; _eventDispatcher->addEventListenerWithFixedPriority(listener, -1);
_eventDispatcher->removeEventListenersForType(EventListener::Type::TOUCH_ONE_BY_ONE); addNextButton();
}); item2->setPosition( Point(0, 40)); auto item3 = MenuItemFont::create("Click Me 3", [=](Ref* sender){
auto listener = EventListenerTouchOneByOne::create();
listener->onTouchBegan = [](Touch* touch, Event* event) -> bool{
CCASSERT(false, "Should not come here!");
return true;
}; _eventDispatcher->addEventListenerWithFixedPriority(listener, -1);
_eventDispatcher->removeAllEventListeners(); addNextButton();
});
item3->setPosition(Point(90, 90)); auto menu = Menu::create(item1,item2,item3, NULL);
menu->setPosition(Point(160, 160));
addChild(menu);

DirectorEventTest

bool HelloWorld::init()
{
//////////////////////////////
// 1. super init first
if ( !Layer::init() )
{
return false;
} Size s = Director::getInstance()->getWinSize(); TTFConfig ttfConfig("arial.ttf", 20); _label1 = Label::createWithTTF(ttfConfig, "Update: 0");
_label1->setAnchorPoint(Point::ANCHOR_BOTTOM_LEFT);
_label1->setPosition(30,s.height/2 + 60);
this->addChild(_label1); _label2 = Label::createWithTTF(ttfConfig, "Visit: 0");
_label2->setAnchorPoint(Point::ANCHOR_BOTTOM_LEFT);
_label2->setPosition(30,s.height/2 + 20);
this->addChild(_label2); _label3 = Label::createWithTTF(ttfConfig, "Draw: 0");
_label3->setAnchorPoint(Point::ANCHOR_BOTTOM_LEFT);
_label3->setPosition(30,30);
_label3->setPosition(30,s.height/2 - 20);
_label3->retain();
this->addChild(_label3); _label4 = Label::createWithTTF(ttfConfig, "Projection: 0");
_label4->setAnchorPoint(Point::ANCHOR_BOTTOM_LEFT);
_label4->setPosition(30,30);
_label4->setPosition(30,s.height/2 - 60); this->addChild(_label4); _count1 = 0;
_count2 = 0;
_count3 = 0;
_count4 = 0; auto dispatcher = Director::getInstance()->getEventDispatcher(); auto event1 = dispatcher->addCustomEventListener(Director::EVENT_AFTER_UPDATE, std::bind(&HelloWorld::onEvent1, this,std::placeholders::_1));
auto event2 = dispatcher->addCustomEventListener(Director::EVENT_AFTER_VISIT, std::bind(&HelloWorld::onEvent2, this,std::placeholders::_1));
auto event3 = dispatcher->addCustomEventListener(Director::EVENT_AFTER_DRAW, [&](EventCustom* event){
char buf[20];
snprintf(buf, sizeof(buf) - 1, "Draw: %d",_count3++);
_label3->setString(buf); });
event1->retain();
event2->retain();
event3->retain(); scheduleUpdate(); return true;
} void HelloWorld::update(float delta)
{
static float time = 0; time += delta;
if(time > 0.5) {
Director::getInstance()->setProjection(Director::Projection::_2D);
time = 0;
}
} void HelloWorld::onEvent1(EventCustom *event)
{
char buf[20];
snprintf(buf, sizeof(buf) - 1, "Update: %d",_count1++); _label1->setString(buf);
}
void HelloWorld::onEvent2(EventCustom *event)
{
char buf[20];
snprintf(buf, sizeof(buf)-1, "Visit: %d", _count2++);
_label2->setString(buf);
}

Cocos2d-x3.0 触摸事件的更多相关文章

  1. cocos2d 3.0自定义事件答疑解惑

    疑惑一:在事件分发中修改订阅者 ,对于这个的理解. 事件的分发是可以嵌套的,cocos2dx使用_inDispatch来保存当前嵌套的深度,当调用第一个dispatchEvent的时候,_inDisp ...

  2. [iOS UI进阶 - 3.0] 触摸事件的基本处理

    A.需要掌握和练习的 1.介绍事件类型2.通过按钮的事件处理引出view的事件处理3.响应者对象 --> UIResponder --> UIView4.view的拖拽* 实现触摸方法,打 ...

  3. Android: 详解触摸事件如何传递

    当视图的层次结构比较复杂的时候,触摸事件的响应流程也变得复杂. 举例来说,你也许有一天想要制作一个手势极其复杂的 Activity 来折磨你的用户,你经过简单思索,认为其中应该包含一个 PageVie ...

  4. [置顶] 使用Android OpenGL ES 2.0绘图之六:响应触摸事件

    传送门 ☞ 系统架构设计 ☞ 转载请注明 ☞ http://blog.csdn.net/leverage_1229 传送门 ☞ GoF23种设计模式 ☞ 转载请注明 ☞ http://blog.csd ...

  5. cocos2d-x触摸事件优先级的探究与实践

    如何让自定义Layer触发触摸事件? bool LayerXXX::init() { this->setTouchEnabled(true); CCTouchDispatcher* td = C ...

  6. cocos2d-x ios游戏开发初认识(八) 触摸事件与碰撞检測

    玩过植物大战僵尸都知道,要在草坪里放一朵向日葵或者其他的植物仅仅需触摸那个植物将其拖入到想要摆放的位置,这事实上就是这节要写的触摸事件.还能够发现当我们的僵尸出来的时候,我们的小豌豆会发子弹攻击僵尸, ...

  7. Cocos2d-x示例:单点触摸事件

    为了让大家掌握Cocos2d-x中的事件机制,以下我们以触摸事件为例.使用事件触发器实现单点触摸事件.该实比如图8-3所看到的,场景中有三个方块精灵,显示顺序如图8-3所看到的,拖拽它们能够移动它们. ...

  8. cocos2d-x触摸事件优先级

     CCTouchDispatcher是管理cocos2d-x中全部Touch事件派发的类, CCTouchDispatcher中包括了两个CCTouchHandler的列表, 分别存储Standa ...

  9. registerWithTouchDispatcher 注册单点触摸事件

    Doc: If isTouchEnabled, this method is called onEnter. Override it to change the way CCLayer receive ...

随机推荐

  1. Oracle的Recyclebin策略

    1.从oracle10g开始删除数据库表的时候并不是真正删除,而是放到了recyclebin中,这个过程类似 windows里面删除的文件会被临时放到回收站中. 2.删除的表系统会自动给他重命名就是你 ...

  2. c# 小小备忘录

    一.简述 备忘录,相信大家生活中都使用过,比如记笔记.手机备忘录等等,这些都是记录自己灵感时所想.定期内想做的事情,好像跑题了,说说我的备忘录吧,我的备忘录功能上也就是增删改查的操作,另加到时提醒.语 ...

  3. 掌握numpy(四)

    数组的累加(拼接) 在前面讲了使用切片方法能够对数组进行切分,使用copy对切片的数组进行复制,那么数组该如何拼接呢? a1 = np.full((2,3),1)#填充数组 a2 = np.full( ...

  4. MySQL GTIDs(global transaction identifiers)

    1.如何定义和生成GTIDs 唯一性:在所有主从库都是唯一的,由二元组构成 每个事务和GTIDs之间都有1:1映射 GTID = source_id:transaction_id source_id标 ...

  5. python变量命名规则

    在Python中使用变量时,需要遵守一些规则和指南.违反这些规则将引发错误,而指南旨在让你编写的代码更容易阅读和理解.请务必牢记下述有关变量的规则.  变量名只能包含字母.数字和下划线.变量名可以字 ...

  6. Cordic算法——圆周系统之向量模式

    旋转模式用来解决三角函数,实现极坐标到直角坐标的转换,基础理论请参考Cordic算法--圆周系统之旋转模式.那么,向量模式则用来解决反三角函数的问题,体现的应用主要是直角坐标向极坐标转换,即已知一点的 ...

  7. JavaScript数据可视化编程学习(二)Flotr2,雷达图

    一.雷达图 使用雷达图显示多维数据. 如果你有多维的数据要展示,那么雷达图就是一种非常有效的可视化方法. 由于雷达图不常用,比较陌生,所以向用户解释的时候有一些难度.注意使用雷达图会增加用户认知负担. ...

  8. PHP strftime()函数输出乱码问题

    直接调用strftime() strftime(time_buf, 80, "%a, %e %b %G %T %z", p_stime);  输出为 Îå, 18 12ÔÂ 201 ...

  9. [动态规划]P1854 花店橱窗布置

    题目描述 某花店现有F束花,每一束花的品种都不一样,同时至少有同样数量的花瓶,被按顺序摆成一行,花瓶的位置是固定的,从左到右按1到V顺序编号,V是花瓶的数目.花束可以移动,并且每束花用1到F的整数标识 ...

  10. 关于svg

    动画:css3动画,canvas(js动画),svg(html动画). svg基本元素 version: 表示 <svg> 的版本,目前只有 1.0,1.1 两种 xmlns:http:/ ...