cocos2d横版游戏之摇杆控制

以上是一个控制摇杆,分为一个底座和摇杆小圈圈,我们的目的是通过算出摇杆小圈跟底座中心的偏移来控制任务的走向,我们计算出一个偏移量来,然后在场景update(foat dt)...每一帧的位置上加上这个偏移量,不停的播放行走动画(当然人物的朝向要对),就可以达到控制任务行走的效果了,这一点你可能一下子就会想到高中学过的向量的加减处理了......坐标象限....之类的。

void DirectionControlButton::controlTargetMove(CCTouch *pTouch){
    /*****以摇杆中心为坐标系原点,计算出原点到触摸点的向量在坐标系中的角度0~180,-180~0***/
    CCPoint location = convertTouchToNodeSpace(pTouch); //转换成节点坐标系,因为pTouch是世界坐标系(也就是屏幕的坐标系),转换成当前摇杆底座节点的坐标系
    this->getTinyCircleSprite()->setPosition(location);//将摇杆小圈设置到该位置
    CCPoint _direction = CCPoint(ccp(0,0));

    if(global->hero->getAllowMove())
    {
        float radians = ccpToAngle(ccpSub(location, this->getPosition()));//算出的是弧度
        float degrees =  CC_RADIANS_TO_DEGREES(radians);//,这里转换成角度0~180,-180~0
        float Speed = 2;//速度
        float sqrtSpeed = sqrt(Speed);//速度的平方根 为了让斜着走45度也能保持相同的速度

        if (degrees <= 22.5 && degrees >= -22.5)
        {
            //右
            _direction = ccp(Speed, 0.0);
        }
        else if (degrees > 22.5 && degrees < 67.5)
        {
            //右上
            _direction = ccp(sqrtSpeed, sqrtSpeed);
        }
        else if (degrees >= 67.5 && degrees <= 112.5)
        {
            //上
            _direction = ccp(0.0, Speed);
        }
        else if (degrees > 112.5 && degrees < 157.5)
        {
            //左上
            _direction = ccp(-sqrtSpeed, sqrtSpeed);
        }
        else if (degrees >= 157.5 || degrees <= -157.5)
        {
            //左
            _direction = ccp(-Speed, 0.0);
        }
        else if (degrees < -22.5 && degrees > -67.5)
        {
            // 右下
            _direction = ccp(sqrtSpeed, -sqrtSpeed);
        }
        else if (degrees <= -67.5 && degrees >= -112.5)
        {
            // 下方
            _direction = ccp(0.0, -Speed);
        }
        else if (degrees < -112.5 && degrees > -157.5)
        {
            // 左下
            _direction = ccp(-sqrtSpeed, -sqrtSpeed);
        }

        //判断本次是否需要反转(因为我们的帧动画只有一个朝向),这是给后续动画用的        //另外global是个全局的单例对象,该对象保存了当前所控制角色的指针
        if((degrees >= 0 && (degrees <= 90)) || (degrees >= -90 && degrees < 0)){
            if(global->hero->getRoleDirection() == RolelTurnLeft){
                global->hero->setFlipX(false);
                global->hero->setRoleDirection(RolelTurnRight);
            }
        }else{

            if(global->hero->getRoleDirection() == RolelTurnRight){
                global->hero->setFlipX(true);
                global->hero->setRoleDirection(RolelTurnLeft);
            }
        }
        //设置偏移量
        this->setDirection(_direction);
        //判断下一次移动点是否还在瓦片地图的floor层上,防止精灵移动出地图
        if(false == tileAllowMove(global->hero->getPosition()+_direction)){
            global->hero->setAllowMove(false);
        }
    }

}

好了这里就计算出主角下一帧所需要加上的偏移量了,连精灵是否需要反转都设置出来了了

cocos2d横版游戏之摇杆控制

时间: 2024-08-09 03:09:27

cocos2d横版游戏之摇杆控制的相关文章

在cocos2dx中,横版游戏关于相机移动的方式整理

在做横版游戏的时候,不可避免的要使用到相机移动,并且一般在2D横版游戏中为了能够模拟一些3D的效果,会使用分层移动的方式(即每一层的移动速度有一定的区别,以模拟3D中的物体越远移动越缓慢的效果. 在cocos2d中,提供了parallaxNode来实现不同层次有不同的移动速度的功能.这个node通过对加入的物体设置一个移动的scale来控制其移动速度,其实现原理是当对parallaxNode设置位置的时候,parallaxNode会根据其子节点的移动速度比例,重新设置其子节点为位置,已达到不同节

横版游戏制作之英雄技能CD遮罩,人物头像血条属性

上图就是技能CD的一个效果,在此我需要给介绍下,cocosStuido这个工具中的UI Eidtor功能,编辑UI真的是很方便,至于怎么使用它,我相信您可以随便看看网上的东西,自己摸索,参考接下来的代码就知道了 在UI编辑器中,我们的技能是没有CD遮罩效果的,那怎么实现的呢? 答案就是:在点击触摸技能时,我们在技能的上方覆盖一张灰色的图片(这个你可以用PS去制作一张),大小与技能图标相同,然后根据每个技能的CD时间,产生一个扇形进度动画,动画结束后取消定时器跟这个遮罩对象就可以了 至于人物头像的

横版游戏珊瑚CoralSDK游戏案例!

分享游戏珊瑚SDK开发的找你妹!1. 游戏包含体力系统,支付系统,排行榜系统,分享系统,个人资料社交系统:    这部分利用了快速社交游戏开发组件 珊瑚SDK2.游戏过程利用200多个QQ头像来扰乱用户识别,找到系统分配的头像,通过计时的方式来计算用户的分数:  游戏利用珊瑚SDK,分享到社交系统,支持新浪微博登陆,并且可以获取新浪微博的好友关系! 游戏代码完全开放,欢迎下载:(百度网盘)http://pan.baidu.com/s/1dDEdS7R下载之后可以直接编译,无需要任何修改配置,如果

横版游戏跳台的碰撞忽略解决

早上坐车突然想到这个问题,就来试一下 实现: 实现方法很简单,判断当前运动是上升还是下降,如果是上升就隐藏掉某个Collider 注意隐藏最好是重复开关Trigger,否则会触发Unity的一个bug,具体看这篇http://www.cnblogs.com/hont/p/5220005.html 但这么做会有个问题,不能有角色之间的真实碰撞,只能是重叠,也就是触发器状态.否则要解决从下面把敌人顶上去之类的问题 还有就是需要把地面碰撞和主角碰撞做成一根线,这样卡住时Unity会对碰撞进行弹出处理,

cocos2d-x 如何制作一个类马里奥的横版平台动作游戏 1 献给所有对动作游戏有爱的朋友

本文翻译自国外著名IOS源码教学商业网站raywenderlich 的IOS Game Start Kits三件套之一的Platformer Game/平台动作游戏的前奏曲,另一个是Beat'Em up Game/横版格斗游戏,作者是国外著名游戏开发专家Jake Gundersen,曾参与开发过SFC时代的洛克人X系列. 原文网址: http://www.raywenderlich.com/15230/how-to-make-a-platform-game-like-super-mario-br

如何制作一个类马里奥的横版平台动作游戏 续

欢迎回来,上篇我们讲到了物理引擎中重力环境模拟以及主角考拉与地面墙壁的碰撞,相信大家已经对2D世界的物理模拟有了一定的了解,现在我们接着讲如何让考拉动起来吧! 让考拉动起来! 这里控制考拉移动变得非常简单,它只有向前和跳两个能力(源码中我加了考拉向后走功能,建议大家自己加几个虚拟按键来实现更非富的功能)如果你按着屏幕左半部考拉会向前走,按住右半部考拉会跳起来(原文设定考拉不会后退-_-). 我们需要在Player.h里加两个成员变量: bool _forwardMarch;  //是否向前走 b

cocos2d-x 如何制作一个类马里奥的横版平台动作游戏续 2

     欢迎回来,上篇我们讲到了物理引擎中重力环境模拟以及主角考拉与地面墙壁的碰撞,相信大家已经对2D世界的物理模拟有了一定的了解,现在我们接着讲如何让考拉动起来吧! 让考拉动起来!    这里控制考拉移动变得非常简单,它只有向前和跳两个能力(源码中我加了考拉向后走功能,建议大家自己加几个虚拟按键来实现更非富的功能)如果你按着屏幕左半部考拉会向前走,按住右半部考拉会跳起来(原文设定考拉不会后退-_-).    我们需要在Player.h里加两个成员变量:    bool _forwardMar

如何制作一个类马里奥的横版平台动作游戏 献给对动作游戏有爱的朋友

本文翻译自国外著名IOS源码教学商业网站raywenderlich 的IOS Game Start Kits三件套之一的Platformer Game/平台动作游戏的前奏曲,另一个是Beat'Em up Game/横版格斗游戏,作者是国外著名游戏开发专家Jake Gundersen,曾参与开发过SFC时代的洛克人X系列. 原文网址: http://www.raywenderlich.com/15230/how-to-make-a-platform-game-like-super-mario-br

横版格斗游戏 cocos2d-x游戏源码

请大家赏个脸,如果感兴趣的看一下,含金量非常高的横版格斗游戏源码,  我的淘宝网址: Beat 'Em Up Game 名将.恐龙.拳皇.三国战纪.战国传承,一个个响当当的名字,承载了80后多少儿时的梦想.横版格斗过关游戏,曾经是最受大众欢迎的一种类型,拳拳到肉的打击感,轻风飘逸的一招一式,还有怒涛般的连击技,令无数玩家如痴如醉.这种游戏也一度是游戏性最强的游戏,但在卡牌横行,快餐文化泛滥的今天,这种游戏已经失去了往日的光彩,但这不是游戏本身的错,而主要在于游戏厂商的急功近利.这种游戏不同于纯界