Cocos2d-x 3.0rc0 新特性 鼠标响应机制 如何实现鼠标悬停

前几天,为了做一个新的安卓项目,因为涉及到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!

很棒的东西,之前刚刚有小伙伴在问悬停功能怎么实现。。。

斑竹竟然漏过这个帖子:12::12::12:真心抱歉。

如果有任何干货的话,可以加我好友,在发帖的时候@我就行了。

额 悬停?用来表现什么样的功能呢 费解啊 不过能实现就好

我就是那个小伙伴:12: 研究了半天终于弄出来了:2:
所以赶紧和小伙伴们一起分享一下。:14:

:2: 谢谢楼主的分享 刚学习呢 正好想了解这方面功能 感谢:7:

有什么问题可以跟我讨论