大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处.

如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;)


首先在CatMazeV3中新建CatSprite类,继承于Sprite.其中CatSprite.h文件如下所示:

#import "CCSprite.h"

@class MainScene;

@interface CatSprite : CCSprite

@property (nonatomic,assign,readonly) NSInteger numBones;

-(id)initWithMainScene:(MainScene*)mainScene;
-(void)moveToward:(CGPoint)targetLocation;
-(void)moveTowardOneTile:(CGPoint)location;

@end

和原代码不同的是我将很多实例变量放到了实现m文件中去,所以感觉清爽了不少.同时原来numBones属性在新的Xcode代码中,也不需要再次重新合成了(synthesize).

再看CatSprite.m文件的内容,先是实例变量声明:

@implementation CatSprite{
    MainScene *_mainScene;
    CCAnimation *_facingForwardAnimation;
    CCAnimation *_facingBackAnimation;
    CCAnimation *_facingLeftAnimation;
    CCAnimation *_facingRightAnimation;
    CCAnimation *_curAnimation;
    CCActionMoveTo *_move;
    CCActionAnimate *_curAnimate;
}

注意原来的CCMoveTo和CCAnimate类现在已经不存在了,遂替换为如上所示新的类.

接下来是一些帮助方法和导出方法,没有什么大的改动:

-(id)initWithMainScene:(MainScene *)mainScene{
    self = [super initWithImageNamed:@"cat_forward_1.png"];
    if (self) {
        _mainScene = mainScene;
        _facingForwardAnimation = [self createCatAnimation:@"forward"];
        _facingBackAnimation = [self createCatAnimation:@"back"];
        _facingLeftAnimation = [self createCatAnimation:@"left"];
        _facingRightAnimation = [self createCatAnimation:@"right"];
    }
    return self;
}

-(void)runAnimation:(CCAnimation*)animation{
    if (_curAnimation == animation) {
        return;
    }

    _curAnimation = animation;
    if (_curAnimate) {
        [self stopAction:_curAnimate];
    }

    _curAnimate = [CCActionRepeatForever actionWithAction:
                   [CCActionAnimate actionWithAnimation:animation]];
    [self runAction:_curAnimate];
}

-(CCAnimation*)createCatAnimation:(NSString*)animType{
    CCAnimation *animation = [CCAnimation animation];
    CCSpriteFrameCache *sfCache = [CCSpriteFrameCache sharedSpriteFrameCache];
    for (int i = 1; i <= 2; ++i) {
        [animation addSpriteFrame:[sfCache spriteFrameByName:[NSString stringWithFormat:
                                                              @"cat_%@_%d.png",animType,i]]];
    }
    animation.delayPerUnit = 0.2;
    return animation;
}

注意原来的-(id)initWithLayer:(HelloWorldLayer *)layer方法名称完全改了,因为Layer在v3.4中整个被丢弃了,大家可以看到我写的新的实现,和原来的差不多.

其他的方法中,只是实例变量名和类名发生的变化.我们将在下一篇看如何尝试转换最复杂的moveToward方法.

Cocos2D将v1.0的tileMap游戏转换到v3.4中一例(二)的更多相关文章

  1. Cocos2D将v1.0的tileMap游戏转换到v3.4中一例(一)

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 首先说一下为什么要转换,这是为了后面的A*寻路算法做准备.由于在 ...

  2. Cocos2D将v1.0的tileMap游戏转换到v3.4中一例(四)

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 现在打开MainScene.m文件,首先设置实例变量: @imp ...

  3. Cocos2D将v1.0的tileMap游戏转换到v3.4中一例(八)

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 回到Xcode中,新建一个EndLayer类,继承于CCNode ...

  4. Cocos2D将v1.0的tileMap游戏转换到v3.4中一例(六)

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 在Xcode中打开MainScene.h文件,在接口中添加2个方 ...

  5. Cocos2D将v1.0的tileMap游戏转换到v3.4中一例(五)

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 为了暂时不影响原来的cat移动方法,我们在CatSprite.m ...

  6. Cocos2D将v1.0的tileMap游戏转换到v3.4中一例(三)

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 下面看一下CatSprite中最复杂的moveToward方法, ...

  7. Cocos2D将v1.0的tileMap游戏转换到v3.4中一例(七)

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 打开SpriteBuilder,在文件视图中新建一个文件夹Fon ...

  8. JuiceFS V1.0 RC1 发布,大幅优化 dump/load 命令性能, 深度用户不容错过

    各位社区的伙伴, JuiceFS v1.0 RC1 今天正式发布了!这个版本中,最值得关注的是对元数据迁移备份工具 dump/load 的优化. 这个优化需求来自于某个社区重度用户,这个用户在将亿级数 ...

  9. 【翻译】Selenium IDE v1.0.11 支持转换格式吗?

    原文: http://blog.reallysimplethoughts.com/2011/06/10/does-selenium-ide-v1-0-11-support-changing-forma ...

随机推荐

  1. JVM基础

    1.基础 JDK  将java文件编译成class文件 JRE   包含JVM JVM可以进行内存管理 利用JDK(调用JAVA API)开发了属于我们自己的JAVA程序后,通过JDK中的编译程序(j ...

  2. python函数调用之自我调用与C++比较

    C++下的函数自我自我调用 第一种方法 #include <iostream> using namespace std; int rel_do(){ int a; cout<< ...

  3. vue-cli中配置sass

    第一步, npm install node-sass --save-dev npm install sass-loader --save-dev 第二部,打开webpack.base.config.j ...

  4. JAVA反射之Class类的练习

    package zhang; /** * JAVA反射之CLass类的练习 * * 在面向对象的语言里,万事万物皆对象,那么类是谁的对象呢? * 类的类型是CLass * * */ class Tes ...

  5. Python中enumerate用法详解

    enumerate()是python的内置函数.适用于python2.x和python3.xenumerate在字典上是枚举.列举的意思enumerate参数为可遍历/可迭代的对象(如列表.字符串)e ...

  6. PHP Libxml 函数

    PHP Libxml 简介 Libxml 函数和常量与 SimpleXML.XSLT 以及 DOM 函数一起使用. 安装 这些函数需要 Libxml 程序包. 在 xmlsoft.org 下载 PHP ...

  7. audio session config

    #pragma mark - #pragma mark - audio session config - (void)setAudioSessionConfig { NSError *error; A ...

  8. python复杂网络库networkx:算法

    http://blog.csdn.net/pipisorry/article/details/54020333 Networks算法Algorithms 最短路径Shortest Paths shor ...

  9. 自定义下拉刷新上拉加载View

    MainActivity.java package com.heima52.pullrefresh; import java.util.ArrayList; import com.heima52.pu ...

  10. 微信自定义菜单url默认80端口问题解决

    微信自定义菜单url默认80端口的,但是有些服务器上可能配置了多个tomcat.或者是刚好你服务器上80端口被占用了.在这样的情况下,我们可以通过如下方式解决: 首先安装apache,关于apache ...