一.触摸事件 为了处理屏幕触摸事件,Cocos2d-x 提供了非常方便.灵活的支持.在深入研究 Cocos2d-x 的触摸事件分发机制之前,我们利用 CCLayer 已经封装好的触摸接口来实现对简单的触摸事件的响应. (1).使用 CCLayer 响应触摸事件 为了处理屏幕输入事件,最简单的解决方案是利用 CCLayer 开启内建的触摸输入支持.在介绍 CCLayer 的时候提到过,它的一个十分重要的作用就是接收输入事件,因此层封装了触摸输入的处理接口.一般情况下,我们可以通过 TouchEna…
(一) Android平台下: cocos2dx 版本3.2,先导入一个android工程,然后看下AndroidManifest.xml <application android:label="@string/app_name" android:icon="@drawable/icon"> <!-- Tell Cocos2dxActivity the name of our .so --> <meta-data android:nam…
[续] cocos2d-x游戏引擎核心之八——多线程 这里介绍cocos2d-x的一种消息/数据传递方式,内置的观察者模式,也称消息通知中心,CCNotificationCenter. 虽然引擎没有为我们封装线程类,但还是提供了一些组件,辅助我们进行并发编程.除了上面提到的异步加载图片,引擎还提供了消息中心 CCNotificationCenter.这是一个类似 Qt 中消息槽的机制,一个对象可以注册到消息中心,指定要接收的消息:而某个事件完成时,则可以发送对应的消息,之前注册过的对象会得到通知…
一.OpenGL基础 游戏引擎是对底层绘图接口的包装,Cocos2d-x 也一样,它是对不同平台下 OpenGL 的包装.OpenGL 全称为 Open Graphics Library,是一个开放的.跨平台的高性能图形接口.OpenGL ES 则是 OpenGL 在移动设备上的衍生版本,具备与 OpenGL 一致的结构,包含了常用的图形功能.Cocos2d-x 就是一个基于 OpenGL 的游戏引擎,因此它的绘图部分完全由 OpenGL 实现.OpenGL 是一个基于 C 语言的三维图形 AP…
今天, 我们来学习cocos2dX里面的触摸事件与触摸事件合集, 如今的手机游戏交互基本上都是通过触摸交互的, 所以大家明确这节的重要性了吧, 本节篇幅比較大, 所以我就不扯闲话了 先来看看经常使用函数: 触摸事件: addTargeteDelegate( 谁使用, 优先级, 是否拦截触摸消息); //注冊单点触摸 virtual bool ccTouchBegan(CCTouch * touch,CCEvent * event); //触摸開始 virtual void ccTouchMove…
v3.0 亮点 使用 C++(C++11) 的特性取代了 Objective-C 的特性 优化了 Labels 优化了渲染器(比 v2.2 更快) 新的事件分发机制 物理引擎集成 新的 UI 对象 JavaScript 远程调试器 支持远程控制台 使用 cocos console创建和运行项目 重构 Image - 及时释放内存,统一了支持文件格式的 API 自动生成 Lua 绑定,添加了 LuaJavaBridge 和 LuaObjcBridge 模板容器 使用 cocos2d::Map<>…
cocos2d-x:OpenGL坐标系.绝对坐标系.相对坐标系.屏幕坐标系 cocos2d-x采用的是笛卡尔平面坐标系,也就是平面上两条垂直线构成的坐标系,平面上任意一点都可以用(x,y)来表示. (1)就坐标系方向而言,cocos2d-x分为屏幕坐标系和OpenGL坐标系. (2)就节点本身而言,cocos2d-x分为绝对坐标系和相对坐标系. 1.屏幕坐标系 屏幕坐标系,也叫UIKit坐标系,原点在屏幕左上,x轴向右,y轴向下.cocos2d-x的屏幕触摸事件传入的位置坐标就是采用了屏幕坐标系…
1.只有CCLayer及其派生类才有触摸功能. 2.开启触摸 setTouchEnable(true); 3.设置触摸模式,单点,多点(仅IOS支持) setTouchMode(kCCTouchesOneByOne);//单点触摸 4.需要重载(override)的四个触摸事件函数 bool ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent);//点触事件,返回false,表示触摸事件不往下传递了 void ccTouchMoved(CCTouch *p…
(1) 首先,这里以win32平台下为例子.win32下游戏的启动都是从win32目录下main文件开始的,即是游戏的入口函数,如下: #include "main.h" #include "AppDelegate.h" #include "cocos2d.h" USING_NS_CC; int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCm…
一.多线程原理 (1)单线程的尴尬 重新回顾下 Cocos2d-x 的并行机制.引擎内部实现了一个庞大的主循环,在每帧之间更新各个精灵的状态.执行动作.调用定时函数等,这些操作之间可以保证严格独立,互不干扰.不得不说,这是一个非常巧妙的机制,它用一个线程就实现了并发,尤其是将连续的动作变化切割为离散的状态更新时,利用帧间间隔刷新这些状态即实现了多个动作的模拟. 但这在本质上毕竟是一个串行的过程,一种尴尬的场景是,我们需要执行一个大的计算任务,两帧之间几十毫秒的时间根本不可能完成,例如加载几十张图…
一.游戏主循环 在介绍游戏基本概念的时候,我们曾介绍了场景.层.精灵等游戏元素,但我们却故意避开了另一个同样重要的概念,那就是游戏主循环,这是因为 Cocos2d 已经为我们隐藏了游戏主循环的实现.读者一定会对主循环的作用有疑问,为了解答这个问题,我们首先来讨论游戏实现的原理. 游戏乃至图形界面的本质是不断地绘图,然而绘图并不是随意的,任何游戏都需要遵循一定的规则来呈现出来,这些规则就体现为游戏逻辑.游戏逻辑会控制游戏内容,使其根据用户输入和时间流逝而改变.因此,游戏可以抽象为不断地重复以下动作…
一.cocos2d-x跨平台 cocos2d-x到底是怎样实现跨平台的呢?这里以Win32和Android为例. 1. 跨平台项目目录结构 先看一下一个项目创建后的目录结构吧!这还是以HelloCpp为例. 从左边目录可以看到,Classes和Resource已经平台无关了,而Classes中包含了AppDelegate类,因此我们可以认为AppDelegate是与平台最接近的类,在它以上就要区分平台了. 2. Win32下的实现 在前一篇就介绍了Win32怎么开始cocos2dx,Win32平…
一.XML与JSON XML 和 JSON 都是当下流行的数据存储格式,它们的共同特点就是数据明文,十分易于阅读.XML 源自于 SGML,是一种标记性数据描述语言,而 JSON 则是一种轻量级数据交换格式,比 XML 更为简洁.鉴于 C++对 XML 的支持更为完善,Cocos2d-x选择了 XML 作为主要的文件存储格式. XML 文档的语法非常简洁.文档由节点组成,节点的定义是递归的,节点内可以是一个字符串,也可以是由一组<tag></tag>包围的若干节点,其中 tag 可…
一.动作机制的用法 在深入学习动作机制在 Cocos2d-x 里是如何实现的之前,我们先来学习整套动作机制的用法,先知道怎么用,再深入学习它如何实现,是一个很好很重要的学习方法. (1)基本概念 CCAction 是动作类的基类,所有的动作都派生自这个类,它创建的一个对象代表了一个动作.动作作用于 CCNode,因此,任何一个动作都需要由 CCNode 对象来执行.CCAction 作为一个基类,其实质是一个接口(即抽象类),由它派生的实现类(如运动和转动等)才是我们实际使用的动作.CCActi…
(一) cocos2d-x 内存管理 cocos2d里面管理内存采用了引用计数的方式,具体来说就是CCObject里面有个成员变量m_uReference(计数); 1, m_uReference的变化 对象初始化:m_uReference = 1 retain:++m_uReference release:--m_uReference,if(m_uReference == 0) delete 对象 addxxx:一般具有add语义代码会retain对象,比如说addChild removexx…
一.建立基本的http通信并得到返回信息 1.创建cocos2dx工程 2.项目引用外部库 如果要使用cocos2dx的CCHttpClient来进行网络访问,则需要引入cocos2dx的相关库,详细步骤如下: 右键单击项目->属性->c/c++->常规,在右边的附件包含目录中添加cocos2dx的extensions目录对应的路径. 然后,右键单击项目->属性->链接器->输入,在右边的附件依赖项中添加libcurl_imp.lib和libExtensions.lib…
开发者工具 在移动开发中,一种较为容易的做法是,先在桌面上开始原型设计,然后再在打算要支持的设备上处理移动特有的部分.多点触摸正是难以在PC上进行测试的那些功能之一,因为大部分的PC都没有触摸输入. 不得不在移动设备上进行的测试有可能会拉长你的开发周期,因为你所做的每项改变都需要提交代码到服务器上,接着再加载到设备上.然后,一旦运行后,对应用也就没有太多的调试了,因为平板电脑和智能手机都很缺乏web开发者所用的工具. 这个问题的一个解决方案是在开发机器上模拟触发事件.对于单点触摸,触摸事件可以基…
一.iOS的输入事件 UIKit可识别三种类型的输入事件: 触摸事件 运动(加速计)事件 远程控制事件 二.UIEvent iOS中许多事件对象都是UIEvent类的实例,记录事件产生的时刻和类型 UIEvent类事件类型的enum常量: typedef NS_ENUM(NSInteger, UIEventType) { UIEventTypeTouches, UIEventTypeMotion, UIEventTypeRemoteControl, }; 由UIEvent对象的type属性可以获…
前言 上一篇讲了Android触摸事件的传递机制,具体可以看这里 初识Android触摸事件传递机制.既然知道Android中触摸事件的传递分发,那么它能解决什么样的问题,在我们实际开发中如何应用,这点很重要,知道原理是为了解决问题而准备的.这篇文章的核心讲的如何解决View的滑动冲突,这个问题在日常开发中很常见,比如内部嵌套Fragment视图是左右滑动,外部用一个ScrollView来包含,可以上下滑动,如果不进行滑动冲突处理的话,就会造成外部滑动方向和内部滑动方向不一致. 目录 常见的滑动…
触摸常见的事件有以下几种,触摸事件一般写在view文件中,因为viewController文件有可能控制不止一个view,不适合写触摸事件 // 开始触摸 - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event { NSLog(@"开始触摸touch"); } // 触摸结束 - (void)touchesEnded:(NSSet<UITouch *> *)touch…
触摸屏幕是iOS设备接受用户输入的主要方式,包括单击.双击.拨动以及多点触摸等,这些操作都会产生触摸事件. 在Cocoa中,代表触摸对象的类是UITouch.当用户触摸屏幕后,就会产生相应的事件,所有相关的UITouch对象都被包装在事件中,被程序交由特定的对象来处理.UITouch对象直接包括触摸的详细信息. UITouch类中包含5个属性: window:    触摸产生时所处的窗口.由于窗口可能发生变化,当前所在的窗口不一定是最开始的窗口. view:              触摸产生时…
iOS中--触摸事件详解及使用 (一)初识 要想学好触摸事件,这第一部分的基础理论是必须要学会的,希望大家可以耐心看完. 1.基本概念: 触摸事件 是iOS事件中的一种事件类型,在iOS中按照事件划分还可以分出另外两类:加速计事件和远程控制事件,我们现在只学习一下触摸事件,也是iOS中最常用的事件. 注意:我们并不是可以随意给任何对象添加触摸事件,只可以给 响应者对象添加,响应者对象是指继承自UIResponder的对象. 所以我们可以给UIView.UIapplication.UIViewCo…
要使精灵能够接收到触摸事件,无非要做三件事. 注册触摸事件; 接收触摸事件; 处理触摸事件. 下面就从这三点出发,来了解一下精灵如何响应触摸事件. 1.注册触摸事件 精灵类Poker继承Sprite和CCTargetedTouchDelegate,并重写CCTargetedTouchDelegate的三个函数ccTouchBegan,ccTouchMoved,ccTouchEnded 同时加入辅助函数rect()和containTouchPoint(CCTouch* touch)用于后面的判断.…
文件夹 文件夹 概述 关于更新 2016-08-31 2016-06-20 关于单点触摸事件singleTouch 单击的两种方式 关于双击事件 双击事件的检測逻辑 双击事件触发的时机 关于多点触摸事件multiTouch 两点触摸中的移动事件 两点触摸事件的触发过程 两点触摸的事件 实现 变量定义 触摸事件流程 自己定义事件计时方案 自己定义事件触发区域 触摸事件处理规则 关于回调的方法 触摸事件处理源代码 双击事件的优化处理 怎样检測当次触摸事件的单击事件 怎样检測触发双击事件 辅助补充逻辑…
iOS学习笔记之触摸事件&UIResponder 触摸事件 与触摸事件相关的四个方法如下: 一根手指或多根手指触摸屏幕 -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event; 一根手指或多根手指在屏幕上移动(随着手指的移动,相关的对象会持续发送该消息) -(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event; 一根手指或多根手指离开屏幕 -(void)…
• iOS中的事件可以分为3大类型 触摸事件 加速计事件 远程控制事件 响应者对象 • 在iOS中不是任何对象都能处理事件,只有继承了UIResponder的对象才能接收并处理事 件.我们称之为“响应者对象” • UIApplication.UIViewController.UIView都继承自UIResponder,因此它们 都是响应者对象,都能够接收并处理事件 UIResponder • UIResponder内部提供了以下方法来处理事件 ➢ 触摸事件 - (void)touchesBega…
前言 在自己定义ViewGroup中.有时候须要实现触摸事件拦截.比方ListView下拉刷新就是典型的触摸事件拦截的样例. 触摸事件拦截就是在触摸事件被parent view拦截,而不会分发给其child.即使触摸发生在该child身上.被拦截的事件会转到parent view的onTouchEvent方法中进行处理. 可是这个交互过程还是挺复杂的,有多种情况,今天我们就来分析一下吧.这篇分析文章已经放了一段时间了,假设有不论什么问题请高人指出. 触摸事件的分发 简单来说触摸事件的分发会经过这…
1. EventTouch 触摸事件的成员变量:枚举EventCode.存储Touch的容器. 不同的EventCode代表不同时机的触摸事件,能让监听器调用不同的回调函数. enum class EventCode { BEGAN, MOVED, ENDED, CANCELLED }; static const int MAX_TOUCHES = 15; EventCode _eventCode; std::vector<Touch*> _touches; 这里涉及到了Touch类: Tou…
AJ分享,必须精品 iOS中的事件 在用户使用app过程中,会产生各种各样的事件;iOS中的事件可以分为3大类型: 响应者对象–UIResponder 在iOS中不是任何对象都能处理事件,只有继承了UIResponder的对象才能接收并处理事件.我们称之为“响应者对象” UIApplication.UIViewController.UIView都继承自UIResponder,因此它们都是响应者对象,都能够接收并处理事件 UIResponder内部提供了以下方法来处理事件 /*触摸事件*/ - (…
屏幕捕捉到触摸消息的派发流程: 如果有一个组件如果想要接收触摸事件,会通过继承一个CCTouchDelegate接口注册给CCTouchDispatcher,CCTouchDispatcher 中维护了一个CCTouchHandler的队列.CCTouchHandler 是CCTouchDelegate两个派生类的包装类.在接到触摸事件之后,遍历 所维护的CCTouchHandler 队列,并按触摸事件类型,调用对应的方法(began/move/cancel/end),CCTouchDelega…