管理提醒: 本帖被 偶尔e网事 执行加亮操作(2014-04-25)
转载自http://www.cocoachina.com/bbs/read.php?tid=198708 @
luckyyangl
前几天,为了做一个新的安卓项目,因为涉及到Cocos2d-x 2.0旧版本的项目移植,所以准备要用2.0版本的做,但是新功能的需求可是难煞我也!因为新功能是 鼠标悬停。
各位移动程序猿们,你们能想象到纠结了吧 不过运气还算不错,前不久推出的Cocos2d-x3.0 好像有了这个功能,可惜,网上并没有看到教程类的东西。经过几天摸索,终于得以实现,现在把我的一些心得写下来。以便有些童鞋也悲催地遇到这个问题,能够有所借鉴!!
先来说一下3.0这次更新版本我认为对我们开发来讲直观上变动最大的地方:触摸响应机制的变化。
熟悉了继承代理,重写touch方法的机制 改版后机制有所改变,下面贴段代码:
复制代码
- //创建一个精灵
- auto m_sprite = Sprite::create("");
- //创建一个触摸监听
- auto listener1 = EventListenerTouchOneByOne::create();
- //触摸分发事件
- listener1->setSwallowTouches(true);//设置是否想下传递触摸
- listener1->onTouchBegan = CC_CALLBACK_1(Pet::touchbegan, this);
- listener1->onTouchMoved = CC_CALLBACK_1(Pet::touchmove, this);
- listener1->onTouchEnded = CC_CALLBACK_1(Pet::touchend, this);
- listener1->onTouchCancelled = CC_CALLBACK_1(Pet::touchcancell, this);
- _eventDispatcher->addEventListenerWithSceneGraphPriority(listener1 ,m_sprite);
|
这是我的一个Pet类
虽然新特性是06.listener->onTouchBegan [](Touch* touch, Event* event) {
do_some_thing(); }; 但是为了代码的可读性 我还是选择了调用其他的方法。这里见仁见智。
好了,接下来说一下鼠标的响应机制:
首先说一下 新特性里 发现了四个新函数
onMouseMove;
onMouseUp;
onMouseDown;
onMouseScroll;
看着是有点熟悉吧 很像2.0的CCTouchBegan CCTouchMoved CCTouchEnded CCTouchCancelled吧 没错, onMouseDown按下,onMouseUp抬起,onMouseMove移动,
onMouseScroll滚轮。
下面来看一下怎么实现鼠标悬停。
复制代码
- //创建一个精灵
- auto m_sprite = Sprite::create("");
- //创建鼠标监听
- auto listener = EventListenerMouse::create();
- //分发MouseMove事件
- listener->onMouseMove = CC_CALLBACK_1(GroundLayer::mousemove, this);
- _eventDispatcher->addEventListenerWithSceneGraphPriority(listener, m_sprite);
|
复制代码
- mousemove函数的声明:
- void mousemove(Event* event);
- mousemove函数的实现:
- void GroundLayer::mousemove(Event* event)
- {
- //CCLog("mouse move!!!!!!!!!!!!!!!!!!!!!!");
- EventMouse* e = (EventMouse*)event;
- CCLog("%f",e->getCursorY());//这句代码输出的是什么呢 就是鼠标的坐标Y了。
- float x = e->getCursorX();
- float y = e->getCursorY();
- }
|
不想JAVA端的鼠标机制 JAVA端有一个hover函数 就是鼠标悬停的接口,而Cocos2d-x3.0的更新却
还保留着之前touch机制的一些模型。这里 在mousemove的函数里 根据鼠标的坐标 我们就可以实现
某个区域的鼠标悬停接口了。
大家在v3.0这个未知多深的坑里,还要继续摸爬滚打,且爬且珍惜吧。GOOD LUCKY!