Sprite和ImageView区别

ImageView 

1.ImageView是继承于Widget,是Cocostudio中的基类.

class CC_GUI_DLL Widget : public ProtectedNode, public LayoutParameterProtocol

class  CC_DLL ProtectedNode : public Node


2.继承于Widget的ImageVIew实现了类似按钮的监听事件,通过addTouchEventListener添加事件.

  1. ImageView* _pPokerImageView;
  2. _pPokerImageView = ImageView::create(tmpStr);
  3. _pPokerImageView->setAnchorPoint(Vec2( 0, 0));
  4. _pPokerImageView->setTouchEnabled( true);
  5. addChild(_pPokerImageView);
  6. _pPokerImageView->addTouchEventListener([ this](Ref* pSender,Widget::TouchEventType type)
  7. {
  8. if (type == Widget::TouchEventType::ENDED)
  9. {
  10. PokerEventStatus tmpStatus = (getStatusValue() == SelectedStatus) ? NormalStatus : SelectedStatus;
  11. updateSelectedSigned(tmpStatus);
  12. if (getStatusValue() == SelectedStatus)
  13. {
  14. updateSelectedSigned(SelectedStatus);
  15. }
  16. else
  17. {
  18. updateSelectedSigned(NormalStatus);
  19. }
  20. }

Sprite

1.Sprite继承于Node,是cocos2dx中的渲染基类。

2.需要通过EventListenerTouchOneByOne方式手动实现监听事件代码,而且需要根据坐标,size去做精灵点击区域判断,写起来稍微复杂点,不过条条道路通罗马,多点方式,多种选择

  1. _spriteListener = EventListenerTouchOneByOne::create();
  2. _spriteListener->onTouchBegan = [ this](Touch* touch, Event* event) -> bool {
  3. /* 获取事件所绑定的 target */
  4. auto target = event->getCurrentTarget();
  5. /* 获取当前点击点所在相对按钮的位置坐标 */
  6. Vec2 locationInNode = target->convertToNodeSpace(touch->getLocation());
  7. Size targetSize = target->getContentSize();
  8. Rect rect = Rect(_pPokerSprite->getPositionX(), _pPokerSprite->getPositionY(), COCOSNODE_WIDTH(_pPokerSprite), COCOSNODE_HEIGHT(_pPokerSprite));
  9. bool isClicked = rect.containsPoint(locationInNode);
  10. /* 点击范围判断 */
  11. if (isClicked)
  12. {
  13. PokerEventStatus tmpStatus = (getStatusValue() == SelectedStatus) ? NormalStatus : SelectedStatus;
  14. updateSelectedSigned(tmpStatus);
  15. if (getStatusValue() == SelectedStatus)
  16. {
  17. updateSelectedSigned(SelectedStatus);
  18. }
  19. else
  20. {
  21. updateSelectedSigned(NormalStatus);
  22. }
  23. }
  24. /* 此处一定要动态设置事件吞噬,否则层只会响应最后一张加入精灵的事件 */
  25. _spriteListener->setSwallowTouches(isClicked);
  26. return isClicked;
  27. };
在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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值