在本文中,我们将为您详细介绍cocos2dx多点触控onTouches侦听细节的相关知识,并且为您解答关于15/11/10的疑问,此外,我们还会提供一些关于AboutstaticcontructorA
在本文中,我们将为您详细介绍cocos2dx 多点触控onTouches侦听细节的相关知识,并且为您解答关于15/11/10的疑问,此外,我们还会提供一些关于About static contructor API changes in cocos2d-...、Android onTouch onClick 屏蔽多点触控、Cocos2d 卡牌塔防 游戏 cocos2d-x游戏开发之旅 第14 15 16 章 源代码调试 注意点 出现无法打开包括文件:“cocos2d.h”: No such file or direct、Cocos2d-3.x_触摸事件(单点触摸和多点触摸)的有用信息。
本文目录一览:- cocos2dx 多点触控onTouches侦听细节(15/11/10)(cocos creator触摸移动)
- About static contructor API changes in cocos2d-...
- Android onTouch onClick 屏蔽多点触控
- Cocos2d 卡牌塔防 游戏 cocos2d-x游戏开发之旅 第14 15 16 章 源代码调试 注意点 出现无法打开包括文件:“cocos2d.h”: No such file or direct
- Cocos2d-3.x_触摸事件(单点触摸和多点触摸)
cocos2dx 多点触控onTouches侦听细节(15/11/10)(cocos creator触摸移动)
最近在研究cocos2dx的多点触控,发觉网上的资料大部分只局限在侦听器和侦听函数上,对于多点触控touches[]数组的描述比较少,在这个帖子里可以总结一下。
void ontouchesBegan(const std::vector<Touch*>& touches,cocos2d::Event *unused_event){}
这个函数会在屏幕被点击的时候被调用,需要注意的是虽然参数列表传入的是一个touches数组,但是实际上绝大部分情况下每次函数调用时只会有一个Touch对象,两个手指同时点击出现两个Touch对象是不存在的。
void ontouchesMoved(const std::vector<Touch*>& touches,cocos2d::Event *unused_event){}
这个函数会在手指接触到屏幕并且移动时被调用。调用时,不管手指是否移动,只要接触了屏幕,都会被传入touches数组。对于单点触控,touches[0]就是触控点。而对于多点触控,touches数组有一个颇为复杂的“记忆机制”。
我们从一个典型的多点触控情况来分析这个“记忆机制”。
左手拇指接触屏幕并移动,此时touches数组长度为1,touches[0]是第一个接触点。
右手拇指接触屏幕并移动,此时touches数组长度为2,touches[0]是第一个接触点、touches[1]就是第二个接触点。
保持两个手指的接触,无论两个手指如何滑动,数组下标和接触点的对应关系不变。
此时如果右手拇指脱离接触,那么touches数组长度为1,touches[0]是第一个接触点。如果右手拇指重新接触, 那么touches数组长度为2,touches[0]是第一个接触点。touches[1]是第二个接触点。
此时如果左手拇指脱离接触,那么touches数组长度为1,touches[0]是第二个接触点。如果左手拇指重新接触,
那么touches数组长度为2,touches[0]是第一个接触点。touches[1]是第二个接触点。
记忆机制出现在这里,touches会记忆单次触控的touch下标,在多点触控中,如果前面的touches[0]对应的触摸停止了,数组长度-1,touches[1]..[2]的下标会暂时前移成..[0]..[1],而当有新的触摸事件之后,新的触摸点会重新绑定到touches[0],而..[0]..[1]会重新回到最初的touches[1]..[2]。这种记忆会在一次连续的触摸中保持存在,如果触摸停止了,记忆机制不会继续延续。
About static contructor API changes in cocos2d-...
大家应该看到新版本了,但不知有没有注意到这个改变,我在这简单翻译下,由于 e 文水平不咋样,不足还请指正:
之前,我们用 OBJ-C 风格的 API 来创建对象,例如创建一个精灵:
CCSprite* pSprite = CCSprite::spriteWithFile ("filename.png");
但是这种风格对于C++语言来说是不友好的!因此我们给绝大多数类添加了一个静态生成器
。现在,创建一个对象,你只需要记住一个名为create的生成器。
像''CCSprite::create'',''CCNode::create'',''CCMoveTo::create'',''CCCallfunc::create''等等.
例如:
CCSprite *spr = CCSprite::create("Images/grossini.png");
spr->setPosition(ccp(100, 100));
addChild(spr);
CCMoveBy* act1 = CCMoveBy::create(0.5, ccp(100, 0));
CCMoveBy* act2 = (CCMoveBy*)act1->reverse();
CCFiniteTimeAction* act3 = CCSequence::create(act1, act2, NULL);
CCRepeat* act4 = CCRepeat::create(act3, 2);
spr->runAction(act4);
所有用create创建的对象是autorelease的,除非你调用了retain方法,否则它是不需要手动release的。
虽然我们为绝大多数类添加了create API,但我们也保留了 obj-c 风格的API;但我们标记了它们为@deprecated。
并且在这些旧的API开头创建了一个名为CC_DEPRECATED_ATTRIBUTE的宏,他们在你用这些旧的API创建对象时发出警告。
假如你正在使用旧的API来创建对象,我们强烈建议你更换成使用新的API,因为旧的API迟早会被丢弃。
Android onTouch onClick 屏蔽多点触控
项目实际需要,一个组件需要同时相应OnCLickListener和OnTouchListener,导致一个问题是:按住一个控件不动,另外一个控件并不受影响,可以随意点击,并相应相应的事件。即使界面跳转后,点击仍然在响应上一个Activity的按钮时间。很诡异。到处Google,然后找到了问题所在,这里写个Demo,说明下问题。oschina博客越来越不好用了,代码很简单,不贴了,说说过程和结论就可以了。
在一个Activity AA里面写两个Button,分别是A和B,两个Button都setOnClickListener,setOnTouchListener,setOnLongClickListener。假设点击Button B以后界面跳转到Activity BB,那么,有如下现象:按住Button A不动,连续点击Button B,将会跳出多个Activity BB界面出来。即使在Activity BB界面已经在当前最顶端,点击仍然在相应Activity AA的事件。
这是因为(测试机器为Android5.0)多点触控在当前界面默认是开启的,只要在Button所在组件的父容器添加如下属性即可:
android:splitMotionEvents="false"
根据测试,相应顺序为:ACTION_DOWN-->onClick-->onLongClick-->ACTION_UP
Cocos2d 卡牌塔防 游戏 cocos2d-x游戏开发之旅 第14 15 16 章 源代码调试 注意点 出现无法打开包括文件:“cocos2d.h”: No such file or direct
Cocos2d 卡牌塔防 游戏 cocos2d-x游戏开发之旅 第14 15 16 章 源代码调试 注意点
出现无法打开包括文件:“cocos2d.h”: No such file or directory
第一步:把书中源代码文件夹拷贝到以下目录。
打开此文件夹后,显示如下:
用VS2012打开proj.win32里边的Chapter16_2_CardDefence08.win32.vcxproj,按下图打开:
第二步:在附加包含目录中,添加如下代码:
如果出现fatalerror C1083: 无法打开包括文件:“cocos2d.h”:No such file or directory
解决方法如下:选择项目属性--》C/C++--》附件包含目录设置为:
复制:$(ProjectDir)..\..\..\cocos2dx;$(ProjectDir)..\..\..\cocos2dx\include;$(ProjectDir)..\..\..\cocos2dx\kazmath\include;$(ProjectDir)..\..\..\cocos2dx\platform\win32;$(ProjectDir)..\..\..\cocos2dx\platform\third_party\win32\OGLES;..\Classes;%(AdditionalIncludeDirectories);
同时注意把E:\cocos2d-x-2.2.3\extensions
E:\cocos2d-x-2.2.3\cocosDenshion\android
E:\ cocos2d-x-2.2.3\cocos2dx\platform\third_party\win32\libraries
加到C/C++--》附件包含目录中去。
第三步:把E:\cocos2d-x-2.2.3\Debug.win32下的所有lib文件和dll文件拷贝至自己项目的Debug.win32下面。
最终运行成功画面如下:
Cocos2d-3.x_触摸事件(单点触摸和多点触摸)
关于cocos2dx 多点触控onTouches侦听细节和15/11/10的介绍已经告一段落,感谢您的耐心阅读,如果想了解更多关于About static contructor API changes in cocos2d-...、Android onTouch onClick 屏蔽多点触控、Cocos2d 卡牌塔防 游戏 cocos2d-x游戏开发之旅 第14 15 16 章 源代码调试 注意点 出现无法打开包括文件:“cocos2d.h”: No such file or direct、Cocos2d-3.x_触摸事件(单点触摸和多点触摸)的相关信息,请在本站寻找。
本文标签: