用SpriteBuilder简化"耕牛遍地走"的动画效果(四)

写到这突然有童鞋质疑,你这哪里是牛,分明是熊嘛!

仔细看了下,还真像牛.反正是这个意思.怪本猫猪牛熊不分,好在道理是一样的.

下面继续,言归正传.

添加一个空白的touchBegan方法,如果没有这个方法,其他触摸回调也不会被响应.

接着是重点部分来了:

-(void)touchEnded:(CCTouch *)touch withEvent:(CCTouchEvent *)event{
    CGPoint location = [[CCDirector sharedDirector] convertTouchToGL:touch];
    location = [self convertToNodeSpace:location];
    CGSize viewSize = [CCDirector sharedDirector].viewSize;
    float bearVelocity = viewSize.width/3.0;
    CGPoint diff = ccpSub(location, _bear.position);
    float distance = ccpLength(diff);
    float moveDuration = distance/bearVelocity;
    //根据玩家点击的位置设置熊头的方向
    if (diff.x < 0) {
        _bear.flipX = NO;
    }else{
        _bear.flipX = YES;
    }

    [_bear stopAction:_moveAction];
    if (!_bearMoving) {
        [_bear runAction:_walkAction];
    }

    CCActionMoveTo *move = [CCActionMoveTo actionWithDuration:moveDuration position:location];
    CCActionCallBlock *block = [CCActionCallBlock actionWithBlock:^{
        [_bear stopAction:_walkAction];
        _bearMoving = NO;
    }];
    CCActionSequence *seq = [CCActionSequence actions:move,block,nil];
    _moveAction = seq;

    [_bear runAction:_moveAction];
    _bearMoving = YES;
}

原文中seq行为最后用来回调方法,这里直接用回调block即可,不用再另外写一个方法了.

代码没啥好说的,主要是计算实际移动时间,是否翻转熊头,然后根据熊的状态确定是否播放动画等行为.

在编译执行之前,现将didLoadFromCCB方法中的:

[_bear runAction:_walkAction];

一行注释掉,否则会发生重复播放动画的错误.
现在编译运行app,效果如下:

时间: 2024-08-03 18:25:53

用SpriteBuilder简化&quot;耕牛遍地走&quot;的动画效果(四)的相关文章

用SpriteBuilder简化&amp;quot;耕牛遍地走&amp;quot;的动画效果(三)

接下来的代码和原文差不多,建立一个数组用来存放动画帧,然后用数组来初始化一个CCAnimation动画对象.接着将牛放在屏幕中心,然后运行动画: NSMutableArray *walkAnimFrames = [NSMutableArray array]; for (int i = 1; i <= 8; i++) { spriteFrame = [[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName: [NSString s

用SpriteBuilder简化&amp;quot;耕牛遍地走&amp;quot;的动画效果(一)

这又是一个使用SpriteBuilder带来便捷的例子 原文地址在: http://www.raywenderlich.com/32045/how-to-use-animations-and-sprite-sheets-in-cocos2d-2-x 作者是Tony Dahbura,写的十分精彩.尤其是那些牛传神的动画素材,非本猫猪这类画痴(不是花痴哦)所及啊! 大家可以去看一下具体实现,主要几个关键点: 用的是Cocos2D v2.x,非v3.x版本 没有用SpriteBuilder 使用了Te

用SpriteBuilder简化&amp;quot;耕牛遍地走&amp;quot;的动画效果(二)

首先使用SpriteBuilder新建一个项目,将之前下载的资源文件夹拖入SpriteBuilder的文件视图. 这里我们只需要一步操作就可以完成原文中在Texture Packer中的那么多操作:即把BearImageHD文件夹设置为智能精灵表文件夹(Smart Sprite Sheet): 接下来在Xcode中打开对应的项目,将原文中放在init方法中的代码移至didLoadFromCCB方法中.init方法运行时机太早,不能满足要求.有时太快也不好,欲速则不达! 首先打开触摸: self.

jsp truts-&amp;amp;lt;div class=&amp;amp;quot;error_mes&amp;amp;quot;&amp;amp;gt;${message}&amp;amp;lt;/div&amp;amp;gt;

问题描述 <div class="error_mes">${message}</div> ${message}什么意思?${message}通常在哪实现? 解决方案 ${message}是java中el表达式 可以获取域中的值 四大作用域 application request session pageContext 建议百度看下el表达式就ok了 解决方案二: jsp中的EL表达式,具体看下这里面.http://blog.csdn.net/chinacshar

ajax-兄弟伙我的OnSuccess=&amp;amp;quot;afterLogin&amp;amp;quot;咋调用不起

问题描述 兄弟伙我的OnSuccess="afterLogin"咋调用不起 兄弟伙我的OnSuccess="afterLogin"咋调用不起,直接返回return Content类容到页面 @{ Layout = null; } <!DOCTYPE html> 网上超市管理系统 </p> <pre><code> //就是执行controller方法以后执行的方法 function afterLogin(data) {

safari-MacBook的Safari下type=&amp;amp;quot;submit&amp;amp;quot;点击后显示不出div

问题描述 MacBook的Safari下type="submit"点击后显示不出div 如题,按钮点击的时候在window浏览器这个红色背景的div会一闪而过,但是在macbook的Safari中什么效果都没有,return false的时候div可以显示出来,但表单还怎么提交啊,return true时页面中div已经加载变成block了,感觉是还没来得及被浏览器渲染页面就刷新了一下,有没有什么办法可以让它有一闪而过的效果? html: <div id="divTes

jquery mobile中使用data-role=&amp;amp;quot;dialog&amp;amp;quot;弹出对话框的问题

问题描述 jquery mobile中使用data-role="dialog"弹出对话框的问题 如图,当页面除了一个"page"和"dialog"还有其它的 容器时,对话框后的背景就会显示没有样式的这个容器内容, 这是为什么呢,怎样才能让背景中不显示任何东西 解决方案 试试把背景内容放到另一个page中 你说的data-role =dialog 我没注意到 这个属性... 另外 可以看看 . data-role=popup http://www.

java web-&amp;amp;lt;c:forEach items=&amp;amp;quot;${salesProducts }&amp;amp;quot; var=&amp;amp;quot;pro&amp;amp;quot;&amp;amp;gt;

问题描述 <c:forEach items="${salesProducts }" var="pro"> ${pro.goodsName}特价:¥${pro}/c:forEach pro的bean类属性都设了getter和setter方法,但是${pro.goodsName}没值,${pro}却有值 解决方案 检查一下goodsName属性名称有没写错. 解决方案二: private String goodsName;public String getG

SpriteBuilder中使用Node类型的ccb动画节点删除时崩溃的问题

因为节点需要呈现动画效果,虽然只有两个不同帧. 在SpriteBuilder中新建Bullet.ccb文件,类型为node. 添加如上2张图片,并制作动画效果帧. 在游戏中子弹遇到障碍物会被删除,时机是随机的.子弹在飞出屏幕时也会被删除. 实际运行App会发现必定崩溃,在子弹随机删除几秒后. 发现Xcode总是中断在动画管理器(CCAnimationManager)中,遂将Bullet.ccb的动画效果删除,没有问题了. 因为Bullet的类型是Node,其self.userObject总为ni