`
mmdev
  • 浏览: 13300720 次
  • 性别: Icon_minigender_1
  • 来自: 大连
文章分类
社区版块
存档分类
最新评论

cocos2d-iphone之魔塔20层第三部分

 
阅读更多

接着上一章我们要是我们的勇士移动起来

这部分教程源代码连接

首先我们要添加一个方向控制器,首先在Game01这个类头文件中定义定义四个属性

@property (nonatomic,retain) CCSprite *btnup;
@property (nonatomic,retain) CCSprite *btndown;
@property (nonatomic,retain) CCSprite *btnleft;
@property (nonatomic,retain) CCSprite *btnright;

在定义一个实例变量CCSprite *btnnormal;

然后在Game01.m文件中定义两个全局变量

//移动方向
int direction;
CGPoint point;

在初始化方法里添加如下代码

//方向控制
point = CGPointMake(size.width - 110, 75);
btnnormal = [CCSprite spriteWithFile:@"btn_normal.png"];
self.btnup = [CCSprite spriteWithFile:@"btn_up.png"];
self.btndown = [CCSprite spriteWithFile:@"btn_down.png"];
self.btnleft = [CCSprite spriteWithFile:@"btn_left.png"];
self.btnright = [CCSprite spriteWithFile:@"btn_right.png"]; 
btnnormal.position = self.btnup.position = self.btndown.position = self.btnleft.position = self.btnright.position = point;
[self addChild:btnnormal];
然后再添加其响应事件在这里我指定了四个区域,分别响应上下左右移动事件,点击不同的区域就

切换不同的控制器图片

#pragma mark - 游戏中的触摸响应事件
-(BOOL)ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event
{
    //获取触摸点位置
    CGPoint touchLocation = [self convertTouchToNodeSpace:touch];
    
    //获取矩形区域
    CGRect Rect = CGRectMake(touchLocation.x,
                             touchLocation.y,
                             1,
                             1);
    CGRect RectUp = CGRectMake(point.x - 20,
                               point.y + 20,
                               40,
                               65);
    CGRect RectDown = CGRectMake(point.x - 20,
                                 point.y - 85,
                                 40,
                                 65);
    CGRect RectLeft = CGRectMake(point.x - 85,
                                 point.y - 20,
                                 65,
                                 40);
    CGRect RectRight = CGRectMake(point.x + 20,
                                  point.y - 20,
                                  65,
                                  40);

    if (!_hero.isFighting) 
    {
        direction = 0;
        //检测触点是否在控件区
        if (CGRectIntersectsRect(Rect, RectUp))
        {
            direction = 1;
            curbtn = self.btnup;
            [self addChild:self.btnup];
        }
        if (CGRectIntersectsRect(Rect, RectDown))
        {
            direction = 2;
            curbtn = btndown;
            [self addChild:btndown];
        }
        if (CGRectIntersectsRect(Rect, RectLeft))
        {
            direction = 3;
            curbtn = btnleft;
            [self addChild:btnleft];
        }
        if (CGRectIntersectsRect(Rect, RectRight))
        {
            direction = 4;
            curbtn = btnright;
            [self addChild:btnright];
        }
    }
    return YES;
}
-(void)ccTouchEnded:(UITouch *)touch withEvent:(UIEvent *)event
{
    direction = 0;
    [self removeChild:curbtn cleanup:YES];
}

不要忘记在初始化方法返回前开启触摸,这里我使用来[[CCTouchDispatchersharedDispatcher]addTargetedDelegate:selfpriority:0swallowsTouches:YES];

开启触摸事件

到了这里你会发现勇士还是不会移动,那么接下来我们就让控制器和勇士的移动联系起来

我用一个更新方法来更新勇士的移动位置

-(void)updateMove
{
    CGPoint playerPoint = _hero.position;
    switch (direction) 
    {
        case 1:
            playerPoint = CGPointMake(playerPoint.x, playerPoint.y + 32*_scale);
            break;
        case 2:
            playerPoint = CGPointMake(playerPoint.x, playerPoint.y - 32*_scale);
            break;
        case 3:
            playerPoint = CGPointMake(playerPoint.x - 32*_scale, playerPoint.y);
            break;    
        case 4:
            playerPoint = CGPointMake(playerPoint.x + 32*_scale, playerPoint.y);
            break;    
        default:
            break;
    }
    if ((playerPoint.x <= RIGHTMAX) && (playerPoint.x >= LEFTMIN) && (playerPoint.y <= UPMAX) && (playerPoint.y >= DOWNMIN)) 
    {
        [self setPlayerPosition:playerPoint];
    }      
}
-(void)setPlayerPosition:(CGPoint)position
{
    _hero.position = position;
}

RIGHTMAX UPMAX DOWNMIN LEFTMIN 这四个变量为上下左右边距控制勇士的移动范围

开启触摸事件前添加

[selfschedule:@selector(updateMove)interval:0.1];

这样我们的勇士就可以移动了

但是你会发现勇士可以在地图上任意移动,这显然是不行的,那么接下来我们就要添加勇士的移动检测,

我们必须知道下一个移动位置上的图块信息,如是否有敌人,或墙。这样我们就必须进行地图解析了,

或许你早就注意到了地图上还有两个勇士,其实那两个是在制作地图时添加穿越楼层的勇士位置图块,

在之后的解析地图中我们会把这两个图块删除掉。

上一篇连接 下一篇连接











分享到:
评论

相关推荐

    cocos2d-iphone之魔塔20层第五部分

    《cocos2d-iphone之魔塔20层第五部分》是关于使用cocos2d-iphone框架开发经典游戏——魔塔的一个教程章节。在这个部分,我们将深入探讨如何利用cocos2d-iphone的特性来实现魔塔游戏的第20层的逻辑和交互。 首先,...

    cocos2d-iphone之魔塔20层第四部分

    《cocos2d-iphone之魔塔20层第四部分》是针对移动平台游戏开发的一份教程,主要基于cocos2d-iphone框架。cocos2d-iphone是一款开源的游戏开发框架,它允许开发者使用Objective-C语言来创建2D游戏、演示和其他图形/...

    cocos2d-iphone之魔塔20层第二部分

    《cocos2d-iphone之魔塔20层第二部分》是针对移动平台游戏开发的一份教程,主要基于cocos2d-iphone框架,聚焦于创建一个20层的魔塔游戏。cocos2d-iphone是Cocos2D游戏引擎的iOS版本,它为开发者提供了丰富的图形、...

    cocos2d-iphone之魔塔20层第九部分

    《cocos2d-iphone之魔塔20层第九部分》是针对iOS平台的游戏开发教程,专注于使用cocos2d-iPhone框架制作的一款经典游戏——魔塔的开发过程。cocos2d-iPhone是一个强大的2D游戏开发框架,它基于C++和Objective-C,为...

    cocos2d-iphone之魔塔20层第十部分

    《cocos2d-iphone之魔塔20层第十部分》是针对移动平台游戏开发的一份教程,主要讲解如何利用cocos2d-iphone框架来实现一款经典的魔塔游戏。cocos2d-iphone是一个强大的2D游戏开发框架,它基于Objective-C语言,为iOS...

    cocos2d-iphone之魔塔20层第八部分

    总之,cocos2d-iphone之魔塔20层第八部分的教程将涵盖游戏开发的多个方面,包括但不限于对象和场景的管理、用户交互、性能优化、数据持久化以及调试技术。通过深入学习和实践,开发者可以掌握创建类似“魔塔20层”...

    cocos2d-iphone之魔塔20层第七部分

    在本教程中,我们将深入探讨如何使用Cocos2d-iPhone框架开发一款名为“魔塔20层”的游戏。Cocos2d-iPhone是一个广泛应用于iOS平台的2D游戏开发库,它提供了一系列强大的功能,如图形渲染、动画处理、物理引擎支持...

    cocos2d-iphone2.0之魔塔20层

    《cocos2d-iphone2.0之魔塔20层》是一款基于Cocos2D-iPhone 2.0框架开发的20层魔塔游戏。Cocos2D-iPhone是一个开源的游戏开发库,它是Cocos2D项目的一个分支,专为iOS平台设计,提供了丰富的2D图形渲染和游戏开发...

    cocos2d-iphone 游戏码源 魔塔20层

    《cocos2d-iphone 游戏码源 魔塔20层》是一个基于Cocos2D-iPhone的游戏开发项目,旨在实现一款名为“魔塔20层”的经典策略角色扮演游戏。Cocos2D-iPhone是Cocos2D的一个分支,是一个用于创建2D游戏、演示和其他图形...

    cocos2d-x xcode 魔塔 mota

    【cocos2d-x】是基于C++的开源游戏开发框架,它被广泛用于创建2D游戏、动画以及其他视觉互动内容。cocos2d-x支持多平台开发,包括iOS、Android、Windows等,使得开发者可以编写一次代码,到处运行。 【xcode】是...

    cocos2d-x魔塔源码Xcode版

    【cocos2d-x】是基于C++的开源游戏开发框架,主要用于2D游戏、交互式应用程序和实时视觉效果的开发。它支持多种平台,包括iOS、Android、Windows以及Mac等。cocos2d-x提供了丰富的API接口,使得开发者可以方便地进行...

    cocos2d-x手游开发

    Cocos2d-x是一个基于C++的2D游戏引擎,它源于cocos2d-iphone,并扩展到支持Android、iOS、Windows等多个平台。它提供了一套完整的2D图形渲染、动画、物理引擎、音频处理、资源管理等功能,使得开发者能够快速构建高...

Global site tag (gtag.js) - Google Analytics