Touch Handling in Cocos2D 3.x(六)

使英雄变成可触碰的对象

这是另一个非常有用的特性.很多用户需要捡起已经存在的英雄然后满屏幕移动它们.让我们按以下步骤实现该功能:

  • 如果用户触摸屏幕空白位置,一个新的英雄将被创建
  • 如果用户触摸一个已经存在的英雄,不会有新英雄被创建,相反Ta可以移动已存在的那个英雄

为了实现这些,我们需要创建一个CCSprite的子类.前进去创建一个名为CCDragSprite的类,该类继承自CCSprite:

在CCDragSprite.h中添加以下一行导入Cocos2d的头文件:

#import "cocos2d.h"

现在我们可以在CCDragSprite.m中关注实现部分了!我想你保证它将惊人的简单.我们需要做如下步骤:

  • 一旦CCDragSprite出现在屏幕就打开用户交互选项
  • 让CCDragSprite跟随着触摸而移动

在CCDragSprite.m中的@implementation和@end之间添加如下代码:

- (void)onEnter {
    self.userInteractionEnabled = TRUE;
}
- (void)touchBegan:(UITouch *)touch withEvent:(UIEvent *)event
{
}
- (void)touchMoved:(UITouch *)touch withEvent:(UIEvent *)event
{
    // we want to know the location of our touch in this scene
    CGPoint touchLocation = [touch locationInNode:self.parent];
    self.position = touchLocation;
}

现在你应该大致了解上面的代码了.当我们的CCDragSprite进入屏幕时,我们打开它的交互选项.我们需要增加一个touchBegan方法的空白实现,这是为了让Cocos2d知道我们想要认领该触摸(否则下一层的responder将会接收到这次触摸).

时间: 2024-08-01 17:53:54

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(二)

接受触摸 在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 将会知道我们想要在这个场景

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

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

时趣Social Touch张锐:创业路上,不忘初心

张锐,时趣http://www.aliyun.com/zixun/aggregation/13666.html">Social Touch CEO,2011年创办时趣Social Touch,联想之星第六期学员,将于3721.html">2014年9月参加第二届创业戈壁行. 创业,究竟是为了得到物质上的满足?还是为了收获心灵的升华? 谈到即将启程的2014联想之星创业戈壁行,他说:"联想之星让同道者同行,一起交流学习和分享:戈壁行,不仅是徒步活动,更是一次蜕变之旅