知易Cocos2D-iPhone 游戏开发教程004-01

 从本章开始,我们开始讲解Cocos2d-iPhone引擎的用户输入处理机制(User Input),也称为事件响应机制(Event-handle)。iPhone上用户的输入有两种:触摸输入(Touch)和运动感知(Accelerometer),本章的重点是前者。

 交互性是游戏与传统艺术(文学、音乐、电影)之间最大的差别,设计良好的游戏首先就是要让用户获得良好的操作体验。魔兽世界绚丽多彩的世界又吸引了千万玩家多少的注意力呢?Wower的大多数时间不都是在忙碌的跑路、打怪、采集和交易中度过的么?因此,直接、便捷、精心设计的交互是一个成功游戏的关键。

 iPhone上的多点并发触摸输入是我们之前在PC上没有遇到的,为此iPhone OS的编程接口提供了一个集合类((NSSet *)touches)来传递用户当前的输入。如何解析这个类,并正确的做出反应是本章的第一部分要解决的问题。

 基于iPhone OS的事件相应模式, Cocos-2D-iPhone引擎又是如何将用户的输入传递到每一个Layer中,并允许程序按照什么样的既定的规则来处理的呢?从0.8.0开始,使用Targeted touch的触摸处理模式是系统的推荐模式,这种模式帮助程序员分解了(NSSet *)touches提供的信息,并提供了有针对性的层响应分发机制。这是本章第二部分要重点讲解的内容。

 本章最后提供了一个比较完整的触摸处理示例。

iPhone OSTouche事件

基础知识

 在开始介绍iPhone OS4个触摸响应事件之前,我们首先学习一下Cocoa 基类库提供的集合类:NSSet和该类的派生类NSMutableSetiPhone OS通过NSSet传递硬件传感器传来的各种组合触摸信息。

事件处理框架

 iPhone OS提供了关于触摸(Touch)的以下4个事件响应函数:

l (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {}

l (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {}

l (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {}

l (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event {}

以上依次表示手指触摸、移动(手指未抬起)、手指抬起、取消。每一个UIView对象都会接收到系统触发的上述4个事件。

以上4个事件的处理函数框架基本都是一样的:

1) 获取所有触摸信息。

可以直接使用 touches参数:

NSMutableSet *mutableTouches = [touches mutableCopy];

也可以通过 event参数获得:

NSSet *allTouches = [event allTouches];

2) 依次处理每一个触摸点

通过[allTouches count]来判断是多触点还是单触点,获取第一个触摸点方法:

UITouch *touch = [[allTouches allObjects] objectAtIndex:0];

获取第二个触摸点:

UITouch *touch2 = [[allTouches allObjects] objectAtIndex:1];

第三、第四多点触摸以此类推。

3) 针对每个触摸点的处理

通过以下函数考察每个触摸点是单击还是双击:

[touch tapCount]

你可能感兴趣的:(cocos2d)