完成了精灵自己移动之后,我们开始着手实现按住精灵拖动的功能.

要想处理触摸事件,我们需要做2件事:

1.在类的初始化中打开触摸接收属性

2.实现触摸处理回调方法

我们依次来做这2件事.

首先要搞清楚在哪里打开触摸接收.是在MainScene场景中吗?也不是不可以,但是那样你必须要判断触摸位置是否在精灵节点上,然后再调整精灵的位置.

我们这里直接在精灵的Player类中开启触摸.首先在Player的初始化方法中开启触摸:

-(void)didLoadFromCCB{
    self.userInteractionEnabled = YES;
}

接着我们添加3个触摸回调方法:

-(void)touchEnded:(CCTouch )touch withEvent:(CCTouchEvent )event{

self.color = _orgColor;

}

-(void)touchMoved:(CCTouch )touch withEvent:(CCTouchEvent )event{

CGPoint location = [[CCDirector sharedDirector] convertTouchToGL:touch];

location = [self positionToPercentage:location];

[self stopAllActions];

self.position = location;

}

-(void)touchBegan:(CCTouch )touch withEvent:(CCTouchEvent )event{

_orgColor = self.color;

self.color = [CCColor yellowColor];

}

_orgColor实例变量用来保存原来的颜色,其实原来的颜色就是白色.

下面大致说说上面3个方法做了哪些事.玩家首次触摸到精灵时,touchBegan被调用,它修改了精灵的颜色,表示精灵目前处在被按下的状态.

当玩家按住精灵不放并且同时移动手指时,touchMoved方法被调用,我们首先将精灵的位置转换为整个屏幕的坐标,然后计算其实际的百分比的位置.因为在SpriteBuilder中我们设置该精灵的位置为百分比类型,所以这里要做一下转换.然后停止精灵的一切动作,如果有的话.最后我们设置精灵位置为触摸点的位置,这样就完成了移动精灵.

最后当玩家抬起手指时,我们将精灵颜色还原到正常状.

编译运行App,可以发现精灵现在受我们的手指摆布了:

(NO.00002)iOS游戏精灵战争雏形(五)的更多相关文章

  1. (NO.00002)iOS游戏精灵战争雏形(一)

    原本想做一个复杂点的平面动作游戏,可以觉得还是有点把握不了.还是先从简单的原型开始吧. 构思中的精灵战争(SpriteWar)是一个类似FC时代的小游戏,可以造兵,可以捕获敌兵.原本还想加上保卫老巢的 ...

  2. (NO.00002)iOS游戏精灵战争雏形(十二)

    首先要声明的是,前几篇实现的shoot方法不是一定会命中目标,这取决于目标运行的速度,子弹的速度,子弹发射的时机以及弹道路径中是否有障碍物等等. 这也是符合实际情况的.如果你的要求是一旦发出子弹必定击 ...

  3. (NO.00002)iOS游戏精灵战争雏形(二)

    在SpriteBuilder中新建Images文件夹,将所需要的图片素材全部拖入其中: 别忘了将其转换为智能精灵图表文件夹. 因为我们不需要为ipad和安卓设计,所以在项目设置里将所有出iphone以 ...

  4. (NO.00002)iOS游戏精灵战争雏形(十一)

    为了在子弹触碰到目标时做一些事情,我们必须要设置碰撞回调. 首先在MainScene.h的类接口中添加碰撞协议: @interface MainScene : CCNode <CCPhysics ...

  5. (NO.00002)iOS游戏精灵战争雏形(八)

    子弹的初始化工作前2篇基本做好了,下面就是如何射出子弹. 通常来说,子弹射向目标对象,需要走一条直线.直线由2点定位,分别为发射点和目标点. 发射点就是开枪精灵自身的位置,目标点则为敌方精灵的位置,大 ...

  6. (NO.00002)iOS游戏精灵战争雏形(六)

    接下来我们给MainScene场景再添加一个精灵,作为敌人. 双击SpriteBuilder中的MainScene.ccb,从控件库拖入一个CCSprite到CCPhysicsNode中,设置精灵帧为 ...

  7. (NO.00002)iOS游戏精灵战争雏形(四)

    在Xcode打开MainScene,添加初始化代码如下: -(void)didLoadFromCCB{ NSAssert(_sprite1, @"_sprite1 must not nil& ...

  8. (NO.00002)iOS游戏精灵战争雏形(三)

    在Sprite中新建Sprites文件夹,在其中添加Player.cc文件,确保其类型为Sprite. 将其Root节点的CCSprite的精灵帧设置为Image/sprite-2.png,然后打开物 ...

  9. (NO.00002)iOS游戏精灵战争雏形(十)

    到目前为止,子弹是有去无回.如果子弹击中目标或者飞出屏幕,那么子弹也就没必要存在了. 这里的不存在不是把它从屏幕中删除,因为前面提到了子弹缓存的作用,所以这里仅仅将其设置为不可见就可以了. 首先处理飞 ...

随机推荐

  1. 转:linux/unix命令行终端的光标及字符控制快捷键

    from:http://linux.chinaunix.net/techdoc/system/2007/11/23/973027.shtml 在使用linux/unix的命令行终端时,有时候会碰到键盘 ...

  2. 0428css样式

    CSS样式表|-引入的三种方式|--内联样式|----标签内部(空格style)|--内嵌样式|----<head></head>标签内部(<style></ ...

  3. css 中calc无效属性值问题

    width:calc(50%-20px); 这样书写是无效的因为calc中计算的两个因子同运算符号之间必须存在空格:

  4. Matlab中数据的存储方式

    简介 MATLAB提供了丰富的算法以及一个易于操作的语言,给算法研发工作者提供了很多便利.然而MATLAB在执行某些任务的时候,执行效率偏低,测试较大任务量时可能会引起较长时间的等待.未解决这个问题, ...

  5. Bootstrap3 排版-缩略语

    当鼠标悬停在缩写和缩写词上时就会显示完整内容,Bootstrap 实现了对 HTML 的 <abbr> 元素的增强样式.缩略语元素带有 title 属性,外观表现为带有较浅的虚线框,鼠标移 ...

  6. Xcode 8新功能介绍

    概述 Xcode 8正式版在9月13日已经推送给开发者下载,下载之后就出现了很多编译错误,之前的插件也不能用了,但是发现Xcode8把好多不错的插件功能整合到自身了,感觉这点也挺不错. 结合自己遇到的 ...

  7. 开源框架Volley的使用《二》[NetWorkImageView&&LruCache&ImageLoader]

    转载本专栏每一篇博客请注明转载出处地址,尊重原创.此博客转载链接地址:小杨的博客    http://blog.csdn.net/qq_32059827/article/details/5278849 ...

  8. velocity map list 数组操作

    Velocity生成模板的时候,经常需要使用到map.list对象,然后遍历输出对象的属性值.当你需要遍历的时候记录遍历的步长的时候,可以使用$velocityCount内置变量进行输出.下面demo ...

  9. 剑指offer-面试题7:俩个栈实现队列(c)

  10. SSH深度历险(十一) AOP原理及相关概念学习+xml配置实例(对比注解方式的优缺点)

    接上一篇 SSH深度历险(十) AOP原理及相关概念学习+AspectJ注解方式配置spring AOP,本篇我们主要是来学习使用配置XML实现AOP 本文采用强制的CGLB代理方式 Security ...