Touch Handling in Cocos2D 3.x(五)
实现新英雄的放置功能
首先我们需要一个变量来保持我们当前移动英雄的引用,因此我们将添加一个私有实例变量.修改MainScene.m中的代码.
用:
@implementation MainScene {
// this is the section to place private instance variables!
CCSprite *currentHero;
}
替换原来的代码:
@implementation MainScene
现在我们有了一个新的私有变量.该变量将总是持有我们当前拖拽英雄的引用,所以我们可以在屏幕触摸移动时更新它的位置.让我们开始在touchBegan方法中赋值该变量.
将以下代码:
// create a 'hero' sprite
CCSprite *hero = [CCSprite spriteWithImageNamed:@"hero.png"];
[self addChild:hero];
// place the sprite at the touch location
hero.position = touchLocation;
替换为如下代码:
// create a 'hero' sprite
currentHero = [CCSprite spriteWithImageNamed:@"hero.png"];
[self addChild:currentHero];
// place the sprite at the touch location
currentHero.position = touchLocation;
现在当前英创建的同时它的引用也被存储下来.这使得我们可以在整个对象中访问最后创建的英雄并且可以实现其他触摸方法.
当用户在屏幕上移动手指时,我们想要移动刚创建的英雄.因此我们需要实现touchMoved方法,该方法在每次触摸改变位置时被调用.增加该方法到MainScene.m中:
- (void)touchMoved:(UITouch *)touch withEvent:(UIEvent *)event
{
CGPoint touchLocation = [touch locationInNode:self];
currentHero.position = touchLocation;
}
它到底做了什么?每次触摸移动时我们取得触摸的位置并且移动刚才创建的英雄到新的位置.
我们最后一步是当触摸结束或被取消时去复位英雄的引用,因为我们只想保持当前选择英雄的引用.添加如下2个方法到MainScene.m中去:
- (void)touchEnded:(UITouch *)touch withEvent:(UIEvent *)event
{
currentHero = nil;
}
- (void)touchCancelled:(UITouch *)touch withEvent:(UIEvent *)event
{
currentHero = nil;
}
现在你可以再次build和运行你的项目.游戏的行为应该精确和算法轮廓相匹配,并且你应该看到如下画面:
做的不错!你的下一步将是更仔细的在Cocos2d 3.0中掌控触摸处理.
Touch Handling in Cocos2D 3.x(五)的更多相关文章
- Touch Handling in Cocos2D 3.x(六)
使英雄变成可触碰的对象 这是另一个非常有用的特性.很多用户需要捡起已经存在的英雄然后满屏幕移动它们.让我们按以下步骤实现该功能: 如果用户触摸屏幕空白位置,一个新的英雄将被创建 如果用户触摸一个已经存 ...
- Touch Handling in Cocos2D 3.x(二)
接受触摸 在Cocos2d 3.0中每一个CCNode和每一个CCNode的子类都可以接收触摸.你只需要开启一个选项.让我们在定制的初始化器里完成它.替换MainScene.m中init方法的代码: ...
- Touch Handling in Cocos2D 3.x(七)
在touchMoved方法中寻找触摸在父节点(CCScene)中的位置并且移动CCDragSprite到其父节点的相应位置中去. 在我们在动作中观赏拖放机制之前,我们需要使用这个新实现的类.打开Mai ...
- Touch Handling in Cocos2D 3.x(四)
创建触摸生命周期 让我们改善我们的应用程序.如果玩家可以触摸屏幕并且拖放英雄到指定位置不是更好吗? 为了完成这个功能我们必须使用Cocos2d 3.0提供的所有的触摸事件: touchBegan:在用 ...
- Touch Handling in Cocos2D 3.x(三)
取得触摸位置 最有趣的部分是触摸的位置.接下来我们将使用触摸位置在玩家每次点击的屏幕位置上添加精灵.为了完成这项功能我们需要修改touchBegan的实现,替换旧的代码如下: - (void)touc ...
- Touch Handling in Cocos2D 3.x(一)
原帖地址 Cocos2d 3.0 带来经过完全修正后的触摸处理系统.本篇博文将提供所有触摸相关的信息: 接收触摸 取得触摸位置 处理不同个触摸生命周期中的事件 实现一个拖放机制 让我们开始吧 ;) 通 ...
- 【Cocos2d入门教程五】Cocos2d-x动作篇
动作类(Action)是所有动作的基类,它创建的一个对象代表一个动作.动作作用于Node,包括继承于之下的Layer.Sprite.因此每个动作 都需要由Node对象或者其继承者执行.动作类(Acti ...
- Cocos2D v2.0至v3.x简洁转换指南(二)
触摸处理 我们在稍后将完成Cocos2d 3.0中触摸处理的完整教程.而现在最重要的是知道如何去启用触摸处理在你的CCNode中: self.userInteractionEnabled = TRUE ...
- Event Handling Guide for iOS--(二)---Gesture Recognizers
Gesture Recognizers 手势识别器 Gesture recognizers convert low-level event handling code into higher-leve ...
随机推荐
- 【图文详解】Hadoop集群搭建(CentOs6.3)
本文主要详细地描述了hadoop集群的搭建以及一些配置文件的说明,用于自己复习以及供新人学习,若有错误之处还请指出. 前期准备 先给出我的集群架构: 到hadoop官网下载好hadoop安装包http ...
- Java面试17|Java基础
Linux上配置Java基础环境: https://www.cnblogs.com/kerrycode/archive/2015/08/27/4762921.html 1.final相关 (1)fin ...
- CRM客户关系管理系统(五)
第五章.分页功能开发 5.1.修改BaseKingAdmin和完善前段页面显示 现在访问没有注册的model会报错,因为基类中没有写list_display和list_filter. 在基类中设置一个 ...
- ACM 数塔
在讲述DP算法的时候,一个经典的例子就是数塔问题,它是这样描述的: 有如下所示的数塔,要求从顶层走到底层,若每一步只能走到相邻的结点,则经过的结点的数字之和最大是多少? 已经告诉你了,这是个DP的题 ...
- Node.js DNS 模块
Node.js DNS 模块用于解析域名.引入 DNS 模块语法格式如下: var dns = require("dns") 方法 序号 方法 & 描述 1 dns.loo ...
- PHP MySQL Order By 关键词
ORDER BY 关键词用于对记录集中的数据进行排序. ORDER BY 关键词 ORDER BY 关键词用于对记录集中的数据进行排序. ORDER BY 关键词默认对记录进行升序排序. 如果你想降序 ...
- PHP 实例 AJAX 投票
AJAX 投票 在下面的实例中,我们将演示一个投票程序,通过它,投票结果在网页不进行刷新的情况下被显示. Do you like PHP and AJAX so far? Yes: No: 实例解释 ...
- 守护态运行Docker容器
更多的时候,需要让 Docker 容器在后台以守护态(Daemonized)形式运行.此时,可以通过添加 -d 参数来实现. 例如下面的命令会在后台运行容器. $ sudo docker run -d ...
- 转:LINUX/UNIX下的回车换行与WINDOWS下的区别
今天,我总算搞清楚“回车”(carriage return)和“换行”(line feed)这两个概念的来历和区别了.在计算机还没有出现之前,有一种叫做电传打字机(Teletype Model 3 ...
- java自动装箱拆箱总结
对于java1.5引入的自动装箱拆箱,之前只是知道一点点,最近在看一篇博客时发现自己对自动装箱拆箱这个特性了解的太少了,所以今天研究了下这个特性.以下是结合测试代码进行的总结. 测试代码: int a ...