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

前端之家收集整理的这篇文章主要介绍了Cocos2D将v1.0的tileMap游戏转换到v3.4中一例(五)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处.
如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;)


为了暂时不影响原来的cat移动方法,我们在CatSprite.m中新建一个移动方法,内容如下,其中考虑了与地图的碰撞情况:

-(void)moveTowardOneTile:@H_403_11@(CGPoint@H_403_11@)location{
    CGPoint@H_403_11@ diff = ccpSub(location,self@H_403_11@.position);
    CGPoint@H_403_11@ desiredTileCoord = [_mainScene tileCoordForPosition:@H_403_11@self@H_403_11@.position];

    if@H_403_11@ (fabsf(diff.x) > fabsf(diff.y)) {
        if@H_403_11@ (diff.x > 0@H_403_11@) {
            desiredTileCoord.x += 1@H_403_11@;
            [self@H_403_11@ runAnimation:@H_403_11@_facingRightAnimation];
        } else@H_403_11@ {
            desiredTileCoord.x -= 1@H_403_11@;
            [self@H_403_11@ runAnimation:@H_403_11@_facingLeftAnimation];
        }
    } else@H_403_11@ {
        if@H_403_11@ (diff.y > 0@H_403_11@) {
            desiredTileCoord.y -= 1@H_403_11@;
            [self@H_403_11@ runAnimation:@H_403_11@_facingBackAnimation];
        } else@H_403_11@ {
            desiredTileCoord.y += 1@H_403_11@;
            [self@H_403_11@ runAnimation:@H_403_11@_facingForwardAnimation];
        }
    }

    if@H_403_11@ ([_mainScene isWallAtTileCoord:@H_403_11@desiredTileCoord]) {
        //@H_403_11@[[SimpleAudioEngine@H_403_11@ sharedEngine] playEffect:@H_403_11@@"hitWall.wav"@H_403_11@];
    } else@H_403_11@ {
        self@H_403_11@.position = [_mainScene positionForTileCoord:@H_403_11@desiredTileCoord];

        if@H_403_11@ ([_mainScene isBoneAtTileCoord:@H_403_11@desiredTileCoord]) {
            //@H_403_11@[[SimpleAudioEngine@H_403_11@ sharedEngine] playEffect:@H_403_11@@"pickup.wav"@H_403_11@];
            _numBones++;
            //@H_403_11@[_mainScene showNumBones:@H_403_11@_numBones];
            [_mainScene removeObjectAtTileCoord:@H_403_11@desiredTileCoord];
        } else@H_403_11@ if@H_403_11@ ([_mainScene isDogAtTileCoord:@H_403_11@desiredTileCoord]) {
            if@H_403_11@ (_numBones == 0@H_403_11@) {
                //@H_403_11@[_layer loseGame];
            } else@H_403_11@ {
                _numBones--;
                //@H_403_11@[_layer showNumBones:@H_403_11@_numBones];
                [_mainScene removeObjectAtTileCoord:@H_403_11@desiredTileCoord];
                //@H_403_11@[[SimpleAudioEngine@H_403_11@ sharedEngine] playEffect:@H_403_11@@"catAttack.wav"@H_403_11@];
            }
        } else@H_403_11@ if@H_403_11@ ([_mainScene isExitAtTileCoord:@H_403_11@desiredTileCoord]) {
            //@H_403_11@[_layer winGame];
        } else@H_403_11@ {
            //@H_403_11@[[SimpleAudioEngine@H_403_11@ sharedEngine] playEffect:@H_403_11@@"step.wav"@H_403_11@];
        }
    }
}

注意代码中将原代码的与音效相关的部分统统省略,因为本猫的mini在调试声音的App时有点问题,大家如果加上音效代码也是没问题的,请随意 ;)

回到MainScene.m中将touchBegan方法中对cat移动的代码改为新的方法:

[_cat moveTowardOneTile:location]@H_403_11@;@H_403_11@

现在编译运行app,效果如下:

现在我们可爱的鼠大盗已经不能穿墙行走了,下一篇中我们将原来所有的游戏逻辑全部补全(除去音乐和音效),下篇见 ;)

猜你在找的Cocos2d-x相关文章