`
wangweike
  • 浏览: 66639 次
  • 性别: Icon_minigender_1
  • 来自: Mars
社区版块
存档分类
最新评论

CCTouchDispatcher,ccTouchBegan

 
阅读更多
1.在CCLayer中注册CCTouchDispatcher来让Layer处理Touch事件。

1).在init中self.isTouchEnabled=YES;

2).重写 CCLayer的 registerWithTouchDispatcher方法,代码如下:
 -(void) registerWithTouchDispatcher

{
   
CCTouchDispatcher* dispatch = [CCTouchDispatcher sharedDispatcher];
[dispatch addTargetedDelegate:self priority:INT32_MIN+1 swallowsTouches:YES];

}

查看CCLayer中对registerWithTouchDispatcher的相关调用,可以看到在CCLayer中的OnEnter中调用了registerWithTouchDispatcher,而在OnExit也实现了对self在 CCTouchDispatcher中的移除。

也可以直接只在init最后调用[[[CCDirector sharedDirector] touchDispatcher] addTargetedDelegate:self priority:0 swallowsTouches:YES];

2.ccTouchBegan
- (BOOL)ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event
{   
    CGPoint touchLocation = [self convertTouchToNodeSpace:touch];     
    return YES;   
}

ccTouchBegan返回YES,表示用户界面层处理了当前的触摸事件,此事件不应该再被其它拥有低优先级的目标触摸代理的层进行处理。

在ccTouchBegan中,调用CCNode的一个辅助函数convertTouchToNodeSpace,把touch坐标点从屏幕坐标系转换成了节点坐标系。
这个方法做了以下三件事:
- (CGPoint)convertTouchToNodeSpace:(UITouch *)touch
{
//1.计算touch视图(也就是屏幕)的touch点位置(使用locaitonInView方法)
CGPoint point = [touch locationInView: [touch view]];
//2.转换touch坐标点为OpenGL坐标点(使用convertToGL方法)
point = [[CCDirector sharedDirector] convertToGL: point];
//3.转换OpenGL坐标系为指定节点的坐标系(使用convertToNodeSpace方法)
//注意它convertToNodeSpace和convertTouchToNodeSpace名称的区别
point=[self convertToNodeSpace:point];
        return point;
}


3.ccTouchMoved
//移动精灵
- (void)ccTouchMoved:(UITouch *)touch withEvent:(UIEvent *)event
{      
//oldTouchLocation
    CGPoint oldTouchLocation = [touch previousLocationInView:touch.view];
    oldTouchLocation = [[CCDirector sharedDirector] convertToGL:oldTouchLocation];
    oldTouchLocation = [self convertToNodeSpace:oldTouchLocation];

//new touchLocation
    CGPoint touchLocation = [self convertTouchToNodeSpace:touch];
   
   
//计算点差
    CGPoint offset = ccpSub(touchLocation, oldTouchLocation);   

//移动精灵
     sprite.position = ccpAdd(sprite.position, offset);
}

20.
标准触碰协议
目标触碰协议

只要保证只有一个层响应触摸,然后做selector事件分发。




分享到:
评论

相关推荐

    cocos2d-x 触摸事件 讲解

    在`registerWithTouchDispatcher`方法中,开发者通过`addTargetedDelegate`或`addStandardDelegate`方法将自定义的`CCTouchDelegate`实例添加到`CCTouchDispatcher`的分发列表中。 3. **创建CCTouchHandler对象** ...

    iOS游戏应用源代码——jotaeme1212-Ejemplos-en-Cocos2D.zip

    在这些示例中,你将学习到如何使用` CCTouchDispatcher`来分发触摸事件,以及如何在`CCNode`的子类中重写`ccTouchBegan`、`ccTouchMoved`和`ccTouchEnded`方法来实现具体的触摸交互。 物理引擎也是Cocos2D的一大...

    Cocos2d-x 3.3 API离线文档

    Cocos2d-x提供了一系列的触摸事件处理函数,如ccTouchBegan、ccTouchMoved、ccTouchEnded,使开发者能够轻松实现交互式游戏元素。 6. **音频管理**:Cocos2d-x支持音频播放,包括背景音乐和音效。如...

    cocos2d事件响应总结

    cocos2d使用`CCTouchDispatcher`类来分发从iOS获取的触摸事件。该类支持两种不同的触摸事件分发方式: 1. **标准触摸委托** (`CCStandardTouchDelegate`) - 这种方式将所有的触摸信息直接传递给实现了该协议的对象...

    cocos2d入门cocos2d入门

    当用户触摸屏幕时,`-(void)ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event;`方法会被调用。 2. **Targeted Touch**:导入`CCTouchDispatcher.h`,注册针对性的触摸代理。`addTargetedDelegate`方法用于...

    cocos2d for iphone0.99源代码

    1. **Core**:这是框架的核心部分,包括基本的图形渲染(如CCSprite、CCScene等)、动画(CCAction)、事件处理(CCTouchDispatcher)以及物理引擎(Box2D或Chipmunk)等。 2. **Extensions**:扩展库提供了额外的...

    cocos2D-iPhone游戏开发

    7. **音频支持**:游戏中的音效和背景音乐可以通过`CCTouchDispatcher`进行播放和管理。Cocos2D-iPhone支持MP3、WAV等多种音频格式。 8. **性能优化**:理解内存管理和渲染优化至关重要,避免过度绘制和不必要的...

    iOS开发中使用cocos2d添加触摸事件的方法

    [[CCTouchDispatcher sharedDispatcher] addTargetedDelegate:self priority:kCCMenuTouchPriority swallowsTouches:YES]; } ``` 这里的`priority`参数定义了事件处理的优先级,而`swallowsTouches`设置为`YES`...

    cocos2d-iphone之魔塔20层第二部分

    5. **事件处理**:学习如何通过 CCTouchDispatcher 和 CCMenuItem 实现触摸事件响应,创建游戏的交互性,例如玩家点击楼层移动或进行战斗。 6. **物理引擎**:如果魔塔游戏中包含碰撞检测,可能需要用到cocos2d-...

    Cocco2D-iPhone-04.rar_Cocco2D iPhone_cocos2d_cocos2d-x_iphone 游戏

    这通常涉及 CCTouchDispatcher 和 CCCallFuncN 类,以及如何注册触摸监听器。 5. **音频处理**:了解如何在Cocos2D中集成音频,使用如CCTexture2D和CCLabelTTF进行文本显示,以及如何播放背景音乐和音效。 6. **...

    cocos2d-x 地图的缩放和拖动

    这通常在`CCTouchDispatcher`中处理,注册对应的触摸事件监听器,并将Android的触摸事件转换为cocos2d-x可以理解的格式。 在提供的`TestDoubleTouch`文件中,可能包含了实现双指缩放和拖动的示例代码。这个测试用例...

    cocos2dx 3.0rc 2048

    cocos2dx提供了 CCTouchDispatcher 和 CCKeyboardDispatcher,分别用于处理触摸和键盘事件。玩家的滑动操作可以通过监听触摸事件,计算滑动方向,然后驱动棋盘上的格子相应地移动。当两个相同数字的格子相遇时,它们...

    cocos2d-x_学习文档

    音效和音乐可以通过`CCTouchDispatcher`进行播放控制。 总之,cocos2d-x是一个功能丰富的2D游戏开发框架,它提供了完善的图形渲染、事件处理、资源管理等机制,使得开发者能够快速构建跨平台的游戏应用。在深入学习...

    COCOS2D 弹球效果

    通过 CCTouchDispatcher,我们可以注册触摸事件处理器,对用户的输入做出实时响应,调整挡板的位置,以便于控制球的发射角度和力度。 最后,资源管理是游戏中不可或缺的一环。在"Resources"目录下,通常会存放游戏...

    cocos2dx 学习资料

    Cocos2d-x通过`CCTouchDispatcher`来管理和分发触摸事件。你可以通过继承`CCNode`并重写`onTouchBegan`, `onTouchMoved`, `onTouchEnded`等方法来实现触摸事件的监听。这些方法会在用户触摸屏幕时被调用,让你能够...

    Cocco2D-iPhone开发教程part03

    5. CCTouchDispatcher:处理触摸事件,让游戏能够响应用户的触控操作。 三、动画与动作 Cocos2D-iPhone通过CCAction类实现动画效果。常见的动作包括: 1. MoveBy:使节点移动到指定位置。 2. RotateBy:旋转指定...

    IOS应用源码之Cocos2D 进度条T01.zip

    Cocos2D提供了 CCTouchDispatcher 类来管理触摸事件,我们可以注册触摸监听器并在用户点击时响应。 6. **纹理 atlases**:为了优化性能,Cocos2D支持纹理atlases,这是一种将多个小图合并成一张大图的技术。在创建...

    Cocos2D-X2.2.3学习笔记15(回调动作/动画/加速度)

    `CCTouchDispatcher`类可以监听用户的触摸事件,而`CCAccelerometerDispatcher`则可以监听设备的加速度变化。开发者需要注册监听器,并实现相应的回调函数,如`didAccelerate`,在这个函数中处理加速度数据。这些...

    DrawPicture

    用户在屏幕上的每一个触控动作,通过` CCTouchDispatcher `进行监听和分发,然后转化为绘图指令,这些指令可能包括开始绘制、移动和结束绘制等。 在处理触控事件时,我们可以使用`CCPoint`对象来存储触摸位置,并...

    learn iphone and ipad cocos2d game development 源码1

    我们可以通过CCTouchDispatcher来控制音频的播放,实现游戏的音效增强。 6. **性能优化**:Cocos2D允许开发者控制渲染优先级、批量绘制和延迟加载等策略,以优化游戏在不同设备上的运行效率。 7. **内存管理**:...

Global site tag (gtag.js) - Google Analytics