cocos2dx中精灵点击事件处理的两种方式——Sprite和ImageView
来源:互联网 发布:linux如何安装程序 编辑:程序博客网 时间:2024/05/18 03:52
1. ImageView 的方式:封装的Widget组件ImageVIew实现了类似按钮的监听事件,所以处理起来很方便直接
在init时同时初始化精灵,加入层
然后在onEnter里加入监听:
ImageView*_pPokerImageView;_pPokerImageView = ImageView::create(tmpStr);_pPokerImageView->setAnchorPoint(Vec2(0, 0));_pPokerImageView->setTouchEnabled(true);addChild(_pPokerImageView);_pPokerImageView->addTouchEventListener([this](Ref* pSender,Widget::TouchEventType type){if (type == Widget::TouchEventType::ENDED){PokerEventStatus tmpStatus = (getStatusValue() == SelectedStatus) ? NormalStatus : SelectedStatus;updateSelectedSigned(tmpStatus);if (getStatusValue() == SelectedStatus){updateSelectedSigned(SelectedStatus);}else{updateSelectedSigned(NormalStatus);}}
2.Sprite的方式:需要手动实现监听事件代码,而且需要根据坐标,size去做精灵点击区域判断,写起来稍微复杂点,不过条条道路通罗马,多点方式,多种选择
</pre><pre name="code" class="cpp">EventListenerTouchOneByOne* _spriteListener;Sprite*_pPokerSprite;
/* 添加事件监听 */_spriteListener = EventListenerTouchOneByOne::create();_spriteListener->onTouchBegan = [this](Touch* touch, Event* event) -> bool {/* 获取事件所绑定的 target */auto target = event->getCurrentTarget();/* 获取当前点击点所在相对按钮的位置坐标 */Vec2 locationInNode = target->convertToNodeSpace(touch->getLocation());Size targetSize = target->getContentSize();Rect rect = Rect(_pPokerSprite->getPositionX(), _pPokerSprite->getPositionY(), COCOSNODE_WIDTH(_pPokerSprite), COCOSNODE_HEIGHT(_pPokerSprite));bool isClicked = rect.containsPoint(locationInNode);/* 点击范围判断 */if (isClicked){PokerEventStatus tmpStatus = (getStatusValue() == SelectedStatus) ? NormalStatus : SelectedStatus;updateSelectedSigned(tmpStatus);if (getStatusValue() == SelectedStatus){updateSelectedSigned(SelectedStatus);}else{updateSelectedSigned(NormalStatus);}}/* 此处一定要动态设置事件吞噬,否则层只会响应最后一张加入精灵的事件 */_spriteListener->setSwallowTouches(isClicked);return isClicked;};
在init时同时初始化精灵,加入层
_pPokerSprite = Sprite::createWithTexture(pChessTexture, tmpRect);_pPokerSprite->setAnchorPoint(Vec2(0, 0));addChild(_pPokerSprite);
然后在onEnter里加入监听:
void TBBullFightPoker::onEnter(void){Node::onEnter();do {CC_BREAK_IF(!_pPokerSprite);_eventDispatcher->addEventListenerWithSceneGraphPriority(_spriteListener, _pPokerSprite);} while (0);}同样在onExit里删除监听:
void TBBullFightPoker::onExit(void){_eventDispatcher->removeEventListener(_spriteListener);Node::onExit();}
0 0
- cocos2dx中精灵点击事件处理的两种方式——Sprite和ImageView
- cocos2dx 精灵点击事件
- [cocos2dx-lua]Cocos2dx-Lua中Sprite精灵的3种创建方法
- 两种方式处理ViewPager点击事件
- 精灵sprite的创建方式
- cocos2dx 处理精灵触摸事件
- cocos2dx lua Sprite和ImageView切换图片
- Cocos2dx 精灵类-Sprite
- 【cocos2dx】创建精灵的两种方法
- 安卓基础开发两种点击事件处理方式
- cocos2dx创建精灵的五种方式
- cocos2dx 创建精灵的5种方式
- JS处理事件的两种方式
- JS事件处理的两种方式
- imageview的点击事件
- cocos2dx-3.0(4)------Sprite 精灵
- cocos2dx-3.0以上版本之 创建Sprite精灵的6种形式
- 关于scrollView滚动和sprite点击事件冲突的问题
- Windows系统的mstsc版本升级
- CentOS开机取消图形界面(直接进入文本模式)以及文本模式启动图形界面
- java操作ftp时单个用户对应多个目录问题
- 动态加载
- 【笔记】 事务管理中的脏读, 幻读,不可重复读
- cocos2dx中精灵点击事件处理的两种方式——Sprite和ImageView
- laravel 安装
- UIImageView 的contentMode属性
- android studio中ADB启动失败
- [其它]在eclipse中运行Junit报错NullPointerException
- Cuda Test
- UITableView的部分自定义设置
- Java中怎样简便的保留小数点后两位
- Linux 系统内核参数调优