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

大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处.
如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! 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方法.

时间: 2024-12-27 07:47:40

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

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

大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 首先说一下为什么要转换,这是为了后面的A*寻路算法做准备.由于在v1.0中,可能是Cocos2D本身有问题,以下 touchLocation = [_tileMap convertTouchToNodeSpace:touch]; 方法在执行到地图左边缘附近时,返回的CGPoint的x轴值不会再减小了.导致游戏主角不能再往地图左边靠近了.示意图如下(注意日志里输出

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

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

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

大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 回到Xcode中,新建一个EndLayer类,继承于CCNode.因为我们得在其类方法中创建实例变量,所以我们得建立几个实例变量的属性.打开EndLayer.h文件,修改内容如下: #import "CCNode.h" @class MainScene; @interface EndLayer : CCNode @property (nonatomic

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

大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 在Xcode中打开MainScene.h文件,在接口中添加2个方法: -(void)winGame; -(void)loseGame; 回到MainScene.m文件中,转换对应的实现代码: -(void)endScene{ [_cat runAction:[CCActionSequence actions: [CCActionScaleBy actionWit

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

大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 为了暂时不影响原来的cat移动方法,我们在CatSprite.m中新建一个移动方法,内容如下,其中考虑了与地图的碰撞情况: -(void)moveTowardOneTile:(CGPoint)location{ CGPoint diff = ccpSub(location, self.position); CGPoint desiredTileCoord = [

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

大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 下面看一下CatSprite中最复杂的moveToward方法,我们一开始只是想要确保cat在屏幕上正确显示出来,动画正确播放出来,所以可以先不管与地图碰撞检测的问题.于是简化到如下代码: -(void)moveToward:(CGPoint)targetLocation{ CGPoint diff = ccpSub(targetLocation, self.p

Game Faster V1.0

以内存驻留键盘激活的方式控制游戏的速度,在游戏中按Ctrl-F9激活,效果明显!!(未作键盘的解封锁处理,有兴趣可加上) 源码: code segmentassume cs:code,ds:codeorg 100hbegin:jmp initzd db 'FAST V1.0 ZDsoft 1995',0dh,0ah,'$'mes db 'Press CTRL-F9 to fast!',0dh,0ah,'$'mes1 db 'Already Install!$'int9 dd ?mark db '

炎黄播放器v1.0发布,免费观看上万部高清DVD电影

&http://www.aliyun.com/zixun/aggregation/37954.html">nbsp;      炎黄播放器v1.0是 一款功能强大的播放软件,可观看上万部高清电影.电视剧,全部DVD画质音效,一点就播,还能播放DVD高清视频,具有视频格式转换.在线播放.视频下载. 视频搜索.视频加速等功能,并且有国内知名的炎黄在线影视社区的强大支持,是您看视频装机必备工具. 本软件由国内知名网络运营商炎黄网络(china35.com)和开心网DVD(kaixindv

Linux常用命令大全 Linux Commands Line - v1.0

The most complete and updated list of commands on linux by LinuxGuide.it - over 350 commands!          COMMAND DESCRIPTION    System information arch show architecture of machine uname -r show used kernel version dmidecode -q show hardware system com