这篇博客来总结下cocos单点触控的相关内容:

我们在Layer类的源代码中能够看到。Layer类提供了一下4个与屏幕单点触控相关的回调方法:

onTouchBegan()、onTouchMoved()、onTouchEnded()和onTouchCancelled()分别表示接收屏幕触摸的開始、移动、结束和取消的回调函数。什么是回调函数?就是发生屏幕触摸的这些事件时这些函数会被调用运行。

那么接下来我们就通过使用这4个回调方法来了解一下cocos的单点触控:

1.首先在头文件里声明这4个方法

//触摸開始
virtual bool onTouchBegan(Touch *touch, Event *unused_event);
//触摸移动
virtual void onTouchMoved(Touch *touch, Event *unused_event);
//触摸结束
virtual void onTouchEnded(Touch *touch, Event *unused_event);
//触摸取消
virtual void onTouchCancelled(Touch *touch, Event *unused_event);

2.然后。要进行触摸事件监听的绑定,分3

第一步:创建触摸监听对象

auto eventTouch = EventListenerTouchOneByOne::create();

第二步:绑定触摸监听对象的触摸函数

//通过宏函数CC_CALLBACK_2实现
//宏函数參数:1.类中定义的函数 2.类本身
//宏函数CC_CALLBACK_2的定义在base/ccMacros.h文件里能够找到。 //绑定触摸開始
eventTouch->onTouchBegan = CC_CALLBACK_2(HelloWorld::onTouchBegan,this);
//绑定触摸移动
eventTouch->onTouchMoved = CC_CALLBACK_2(HelloWorld::onTouchMoved, this);
//绑定触摸结束
eventTouch->onTouchEnded = CC_CALLBACK_2(HelloWorld::onTouchEnded, this);
//绑定触摸取消
eventTouch->onTouchCancelled = CC_CALLBACK_2(HelloWorld::onTouchCancelled, this);

第三步,将触摸监听对象加入到事件监听分发器中

//參数:1.触摸监听对象 2.类本身
_eventDispatcher->addEventListenerWithSceneGraphPriority(eventTouch,this);

通过以上三步,我们就完毕了触摸事件监听的绑定。

3.接下来就要实现之前在头文件里声明的4个方法

//触摸開始函数的实现
bool HelloWorld::onTouchBegan(cocos2d::Touch *touch,cocos2d::Event *unused_event)
{
log("onTouchBegan!!!");
//假设不返回true,其它的触摸函数不会接收到触摸消息
return true;
} //触摸移动函数的实现
void HelloWorld::onTouchMoved(cocos2d::Touch *touch, cocos2d::Event *unused_event)
{
log("onTouchMoved!!!");
} //触摸结束函数的实现
void HelloWorld::onTouchEnded(cocos2d::Touch *touch, cocos2d::Event *unused_event)
{
log("onTouchEnded!!!");
} //触摸取消函数的实现
void HelloWorld::onTouchCancelled(cocos2d::Touch *touch, cocos2d::Event *unused_event)
{
log("onTouchCancelled!!!");
}

执行程序。我们随便在模拟器屏幕上划一下。能够看到例如以下输出:

在这里还能够看出触摸事件的调用顺序:首先会调用onTouchBegan()方法,然后随着触摸移动的过程中会一直调用onTouchMoved()方法。最后在手指或鼠标指针抬起的时候会调用onTouchEnded()方法,标志触摸结束。

那么你可能会有疑问onTouchCancelled()方法是在什么时候调用的呢?事实上这种方法基本没什么用,它唯一会被用到的情况就是当我们在触摸的时候不小心按到了手机的home键。游戏退出后台有可能会调用该方法。

好了。接下来我们就利用以上知识做一个小demo:让一个精灵跟着我们的鼠标点击位置来移动。

首先完毕精灵相关初始化:

#define TAG 10
//创建一个精灵
auto sprite = Sprite::create("haha.jpg");
//向父节点加入精灵
this->addChild(sprite);
//设置精灵tag
sprite->setTag(TAG);
//设置精灵坐标
sprite->setPosition(Vec2(480,320));

然后改动4个触摸函数。向当中加入例如以下一段代码:

//获得触摸坐标
Vec2 vec = touch->getLocation();
//通过tag获得精灵
Sprite *sprite = (Sprite*)this->getChildByTag(TAG);
//设置sprite坐标
if (sprite) {
sprite->setPosition(vec);
}

touch就是触摸函数传入的Touch类型的參数。我们就是通过其getLocation()方法获得的触摸点坐标。另外我们是通过设置的tag得到精灵的。

//触摸開始函数的实现
bool HelloWorld::onTouchBegan(cocos2d::Touch *touch,cocos2d::Event *unused_event)
{
Vec2 vec = touch->getLocation();
Sprite *sprite = (Sprite*)this->getChildByTag(TAG);
if (sprite) {
sprite->setPosition(vec);
}
return true;
} //触摸移动函数的实现
void HelloWorld::onTouchMoved(cocos2d::Touch *touch, cocos2d::Event *unused_event)
{
Vec2 vec = touch->getLocation();
Sprite *sprite = (Sprite*)this->getChildByTag(TAG);
if (sprite) {
sprite->setPosition(vec);
}
} //触摸结束函数的实现
void HelloWorld::onTouchEnded(cocos2d::Touch *touch, cocos2d::Event *unused_event)
{
Vec2 vec = touch->getLocation();
Sprite *sprite = (Sprite*)this->getChildByTag(TAG);
if (sprite) {
sprite->setPosition(vec);
}
}

这样。执行程序。我们所创建的精灵就会随着鼠标点击位置来移动了,因为执行效果是动态的这里我就不传效果图了。

总结一下:

1.Layer类提供onTouchBegan()、onTouchMoved()、onTouchEnded()和onTouchCancelled()4个方法,这4个方法事实上就是触摸事件的回调函数。

2.假设想要使用这4个触摸事件回调函数,我们就要在之前要进行触摸事件监听的绑定;

3.触摸事件监听的绑定分3步:1).创建触摸监听对象eventTouch 2).通过宏函数CC_CALLBACK_2绑定触摸监听对象的触摸函数3).将触摸监听对象eventTouch 加入到事件监听分发器_eventDispatcher中;

4.触摸函数Touch类型的參数touch,我们通过其getLocation()方法获得的触摸点坐标。

以上。

COCOS学习笔记--单点触控的更多相关文章

  1. Windows phone 8 学习笔记(1) 触控输入

    原文:Windows phone 8 学习笔记(1) 触控输入 Windows phone 8 的应用 与一般的Pc应用在输入方式上最大的不同就是:Windows phone 8主要依靠触控操作.因此 ...

  2. Windows phone 8 学习笔记(1) 触控输入(转)

    Windows phone 8 的应用 与一般的Pc应用在输入方式上最大的不同就是:Windows phone 8主要依靠触控操作.因此在输入方式上引入一套全新的触控操作方式,我们需要重新定义相关的事 ...

  3. WPF-学习笔记 动态修改控件Margin的值

    原文:WPF-学习笔记 动态修改控件Margin的值 举例说明:动态添加一个TextBox到Grid中,并设置它的Margin: TextBox text = new TextBox(); t_gri ...

  4. 新鲜出炉:appium2.0+ 单点触控和多点触控新的解决方案

    在 appium2.0 之前,在移动端设备上的触屏操作,单手指触屏和多手指触屏分别是由 TouchAction 类,Multiaction 类实现的. 在 appium2.0 之后,这 2 个方法将会 ...

  5. cocos学习笔记:快速上手

    cc.Class({ //奇怪的语法风格,cc.class, extends: cc.Component, //扩展自cc.Component properties: { //类的属性设置 jumpH ...

  6. COCOS学习笔记--Button类及其相关控件属性

    一.Button介绍 Button就是button.Cocos中提供了Button类对button进行相关的操作.我们看一下Button类继承关系图: 能够看到.Button是继承自Widget类,W ...

  7. 【jQuery UI 1.8 The User Interface Library for jQuery】.学习笔记.4.Tabs控件

    之前,我们已经介绍了 jQuery UI 库,CSS 框架.下面,我们将学习这些有增强可视化效果,高度可配置的用户交互组件. Tab 的特性是,点击 tab 后,会高亮该 tab,并显示他的关联con ...

  8. Android学习笔记_30_常用控件使用

    一.状态栏通知(Notification): 如果需要查看消息,可以拖动状态栏到屏幕下方即可查看消息.发送消息的代码如下: public void sendNotice(View v){ int ic ...

  9. COCOS学习笔记--重力感应Acceleration

    Cocos2dx重力感应Acceleration,准确来说叫加速度计,加速度计能够感应设备上X.Y.Z轴方向上线性加速度的变化.事实上叫"重力感应"或"重力加速度计&qu ...

随机推荐

  1. 使IIS服务器支持下载 apk/ipa 安装包

    默认情况下,使用IIS作为Web服务器的无法下载此文件,访问会触发404错误,服务器找不到对应资源. IIS服务器不能下载.apk文件的原因:iis的默认MIME类型中没有.apk文件,所以无法下载. ...

  2. python ATM机 案例代码

    利用目前学的流程控制写的 ''' ATM机 需求: 1.登陆 输入账号输入密码 每日只有3次登陆密码错误的机会,超过3次禁止登陆 2.查询余额 3.存款 4.取款 5.转帐 6.退出 ''' info ...

  3. Excel查询序列所相应的值-vLoopup函数,求比例分子改变但分母不变

    watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveWV3ZWlvdXlhbmc=/font/5a6L5L2T/fontsize/400/fill/I0JBQk ...

  4. 文档翻译第003篇:Process Monitor帮助文档(Part 3,附Process Monitor的简单演示)

    [导入与导出配置] 一旦您配置了一个筛选器,您能够使用"工具(Tools)"菜单中的"保存筛选器(SaveFilters)"菜单项将其保存.Process Mo ...

  5. 9.Spring Boot实战之配置使用Logback进行日志记录

    转自:https://blog.csdn.net/meiliangdeng1990/article/details/54300227 Spring Boot实战之配置使用Logback进行日志记录 在 ...

  6. ES5比较Jquery中的each与map 方法?

    1.each es5: var arr = [1, 5, 7, 8, 9];var arr1 = []; arr.forEach(function (v, i) { arr1.push(v * 4) ...

  7. 软件——机器学习与Python,Python3的输出与输入

    输出 用print()在括号中加上字符串,就可以向屏幕上输出指定的文字.比如输出'hello, world',用代码实现如下: >>> print('hello, world') p ...

  8. amazeui页面分析之登录页面

    amazeui页面分析之登录页面 一.总结 1.tpl命名空间:tpl命名空间的样式都是从app.css里面来的,app.css用用来移动网站开发的样式 2.表单样式:am-form到am-form- ...

  9. 1.2 Python基础知识 - 字符编码

    计算机中的数据是以二进制方式进行存储的,即只有"0"和"1",二进制是属于数据类型的数据,它只可以和其他进制的数据类型进行转换,但是不能存储其他字符,例如:字母 ...

  10. jquery的滚动事件

    $(selector).scroll(function);当滚动到合适的条件下,就触发某个函数. 现在基本就是前端利用AJAX对数据进行拼接操作,渲染进html的DOM结构中.