Touch Handling in Cocos2D 3.x(二)

接受触摸

在Cocos2d 3.0中每一个CCNode和每一个CCNode的子类都可以接收触摸.你只需要开启一个选项.让我们在定制的初始化器里完成它.替换MainScene.m中init方法的代码:

- (id)init
{
    if (self = [super init])
    {
        // activate touches on this scene
        self.userInteractionEnabled = TRUE;
    }
    return self;
}

现在Cocos2d 将会知道我们想要在这个场景中处理触摸

处理触摸
Cocos2d 会通知我们4种不同的触摸事件:

  • 当触摸开始时
  • 当触摸移动时
  • 当触摸结束时
  • 当触摸被取消时

这些不同的方法使得你可以在屏幕上跟踪触摸,对于我们第一个例子来说,我们只需要被通知触摸开始的事件.

增加下面代码到MainScene.m中:

- (void)touchBegan:(UITouch *)touch withEvent:(UIEvent *)event
{
    CCLOG(@"Received a touch");
}

当用户开启一个Node的交互时,所有实现的触摸处理方法将会被调用.我们现在实现了touchBegan方法,它将在不管任何时候一个触摸开始时被调用.当触摸发生时我们使用CCLOG往console上打印调试信息.

现在运行app,每一次你触摸屏幕,一条”Received a touch”消息将显示在控制台中.现在你知道在你的游戏中如何接收任何节点的触摸了-这将是非常强大的功能.

时间: 2024-10-10 13:10:09

Touch Handling in Cocos2D 3.x(二)的相关文章

Touch Handling in Cocos2D 3.x(五)

实现新英雄的放置功能 首先我们需要一个变量来保持我们当前移动英雄的引用,因此我们将添加一个私有实例变量.修改MainScene.m中的代码. 用: @implementation MainScene { // this is the section to place private instance variables! CCSprite *currentHero; } 替换原来的代码: @implementation MainScene 现在我们有了一个新的私有变量.该变量将总是持有我们当前拖

Touch Handling in Cocos2D 3.x(六)

使英雄变成可触碰的对象 这是另一个非常有用的特性.很多用户需要捡起已经存在的英雄然后满屏幕移动它们.让我们按以下步骤实现该功能: 如果用户触摸屏幕空白位置,一个新的英雄将被创建 如果用户触摸一个已经存在的英雄,不会有新英雄被创建,相反Ta可以移动已存在的那个英雄 为了实现这些,我们需要创建一个CCSprite的子类.前进去创建一个名为CCDragSprite的类,该类继承自CCSprite: 在CCDragSprite.h中添加以下一行导入Cocos2d的头文件: #import "cocos2

Touch Handling in Cocos2D 3.x(四)

创建触摸生命周期 让我们改善我们的应用程序.如果玩家可以触摸屏幕并且拖放英雄到指定位置不是更好吗? 为了完成这个功能我们必须使用Cocos2d 3.0提供的所有的触摸事件: touchBegan:在用户触摸屏幕时调用 touchMoved:在用户在屏幕上移动手指时调用 touchEnded:在用户停止触摸屏幕时调用 touchCancelled:在用户依然触摸屏幕但是一些其他问题停止你的节点处理触摸事件时调用(e.g. 触摸移动到你节点的边界之外时). 我们新的英雄放置算法将会按如下方式工作:

Touch Handling in Cocos2D 3.x(一)

原帖地址 Cocos2d 3.0 带来经过完全修正后的触摸处理系统.本篇博文将提供所有触摸相关的信息: 接收触摸 取得触摸位置 处理不同个触摸生命周期中的事件 实现一个拖放机制 让我们开始吧 ;) 通过下载开始项目开始我们的旅程: starter project 一旦你下载运行项目,你可以运行App看到如下屏幕: Cocos2D 3.3+ 需要注意的地方 如果你使用Cocos2D 3.3+ (它是SpriteBuilder 1.3+的一部分) 你必须分别使用CCTouch和CCTouchEven

Touch Handling in Cocos2D 3.x(三)

取得触摸位置 最有趣的部分是触摸的位置.接下来我们将使用触摸位置在玩家每次点击的屏幕位置上添加精灵.为了完成这项功能我们需要修改touchBegan的实现,替换旧的代码如下: - (void)touchBegan:(UITouch *)touch withEvent:(UIEvent *)event { // we want to know the location of our touch in this scene CGPoint touchLocation = [touch locatio

Touch Handling in Cocos2D 3.x(七)

在touchMoved方法中寻找触摸在父节点(CCScene)中的位置并且移动CCDragSprite到其父节点的相应位置中去. 在我们在动作中观赏拖放机制之前,我们需要使用这个新实现的类.打开MainScene.m并且在文件开头增加如下导入语句: #import "CCDragSprite.h" 现在我们将改变创建英雄的代码:用新的类替代CCSprite. 将以下一行: currentHero = [CCSprite spriteWithImageNamed:@"hero.

Cocos2D v2.0至v3.x简洁转换指南(二)

触摸处理 我们在稍后将完成Cocos2d 3.0中触摸处理的完整教程.而现在最重要的是知道如何去启用触摸处理在你的CCNode中: self.userInteractionEnabled = TRUE; 去捕捉一个触摸以及触摸的位置: - (void)touchBegan:(UITouch *)touch withEvent:(UIEvent *)event { CGPoint touchLocation = [touch locationInNode:self]; // put your to

对MBProgressHUD进行二次封装并精简使用

对MBProgressHUD进行二次封装并精简使用 https://github.com/jdg/MBProgressHUD 几个效果图: 以下源码是MBProgressHUD支持最新的iOS8的版本,没有任何的警告信息 MBProgressHUD.h 与 MBProgressHUD.m // // MBProgressHUD.h // Version 0.9 // Created by Matej Bukovinski on 2.4.09. // // This code is distrib

Cocos2D-X入门(4)Touch 事件:移动精灵

在.h中声明: virtual void registerWithTouchDispatcher(void); virtual bool ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent); virtual void ccTouchMoved(CCTouch *pTouch, CCEvent *pEvent); virtual void ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent); virtual voi