【木头Cocos2d-x 013】游戏实例-《跑跑跑》制作教程(第五篇)——主角上下移动
来源:互联网 发布:百度联盟 域名推广 编辑:程序博客网 时间:2024/04/27 22:23
Cocos2d-x游戏实例-《跑跑跑》制作教程(第五篇)——主角上下移动
笨木头花心贡献,啥?花心?不呢,是用心~
转载请注明,原文地址:http://blog.csdn.net/musicvs/article/details/8192245
正文:
注:本文使用到的资源请到这里下载:http://download.csdn.net/detail/musicvs/4769412
嗯,至此我们的《跑跑跑》游戏已经基本完成了…才怪啊喂~!
来,主角不能只往前跑,我们得让他可以上下跑。
1. 制作新的移动控制器
我们要改变主角的移动行为,这很简单,因为聪明的我们早就料到了客户的需求是随时改变的(噗,那个客户说的是我么?),所以,我们使用了组合的方式。
现在是见证组合有多强大的时候了!我们只需要新建一个控制器,然后替换掉原来的SimpleMoveController,绑定到主角身上,就OK了~
2. 三方移动控制器
这个新的移动控制器可以往前、往上、往下移动,所以我给它命名为三方控制器。英文名叫做SanFangController,噗,开玩笑的,还是叫做ThreeDirectionController吧~
首先,我有个糟糕的事情想告诉大家,我们要修改Controller.h文件:
class Controller : public CCLayer {
其实没有修改什么,就是把Controller的父类由CCNode改为CCLayer。为什么呢?因为我们的新控制器希望获得屏幕触摸事件,而CCNode是获取不了这个事件的。
好,我们来创建三方移动控制器吧:
//ThreeDirectionController.h文件#ifndef __THREE_DIRECTION_CONTROLLER_H__#define __THREE_DIRECTION_CONTROLLER_H__#include "Controller.h"#include "cocos2d.h"using namespace cocos2d;class ThreeDirectionController : public Controller {public: CREATE_FUNC(ThreeDirectionController); virtual bool init(); virtual void update(float dt); /* 触屏事件 */ virtual void registerWithTouchDispatcher(); virtual bool ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent); virtual void ccTouchMoved(CCTouch *pTouch, CCEvent *pEvent); virtual void ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent); /* 设置X方向的移动速度 */ void setiXSpeed(int iSpeed); /* 设置Y方向的移动速度*/ void setiYSpeed(int iSpeed);private: int iXSpeed; int iYSpeed;};#endif
这个是头文件,我们来看看主要有什么东西。基本上和SimpleMoveController差不多,区分了X和Y方向上的速度,以及加入了触屏事件(继承自CCLayer)。
再来看看cpp文件:
#include "ThreeDirectionController.h"bool ThreeDirectionController::init(){ this->iXSpeed = 0; this->iYSpeed = 0; /* 设置允许触屏 */ this->setTouchEnabled(true); this->scheduleUpdate(); return true;}void ThreeDirectionController::update( float dt ){ if(mControllerListener == NULL) { return; } CCPoint curPos = mControllerListener->getCurPosition(); curPos.x += iXSpeed; curPos.y += iYSpeed; mControllerListener->setSimplePosition(curPos.x + iXSpeed, curPos.y + iYSpeed);}void ThreeDirectionController::setiXSpeed( int iSpeed ){ this->iXSpeed = iSpeed;}void ThreeDirectionController::setiYSpeed( int iSpeed ){ this->iYSpeed = iSpeed;}bool ThreeDirectionController::ccTouchBegan( CCTouch *pTouch, CCEvent *pEvent ){ return true;}void ThreeDirectionController::ccTouchMoved( CCTouch *pTouch, CCEvent *pEvent ){ /* 获取点击的坐标 */ CCPoint touchLocation = pTouch->getLocationInView(); touchLocation = CCDirector::sharedDirector()->convertToGL(touchLocation); /* 被控制对象的坐标 */ CCPoint pos = mControllerListener->getCurPosition(); /* 判断是向上移动还是向下移动 */ int iSpeed = 0; if(touchLocation.y > pos.y) { iSpeed = 1; } else { iSpeed = -1; } setiYSpeed(iSpeed);}void ThreeDirectionController::ccTouchEnded( CCTouch *pTouch, CCEvent *pEvent ){ /* 停止Y坐标上的移动 */ setiYSpeed(0);}void ThreeDirectionController::registerWithTouchDispatcher(){ /* 注册触屏事件 */ CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this, 0, true);}
首先,update函数变了一点,x和y方向上的坐标都会改变。
然后有个registerWithTouchDispatcher函数,是用于注册触屏事件的。
再然后最重要的是ccTouchMoved函数,根据点击屏幕的y坐标是在主角之上还是下来判断是让主角向上移动还是向下移动。
好了,现在!打开我们的TollgateScene.cpp的init函数,将SimpleMoveController替换为ThreeDirectionController:
/* ------------ 创建玩家移动控制器 -------------- */ ThreeDirectionController* mSMoveControll = ThreeDirectionController::create();mSMoveControll->setiXSpeed(1);mSMoveControll->setiYSpeed(0);/* 控制器要添加到场景中才能获得update事件 */ this->addChild(mSMoveControll);mPlayer->setController(mSMoveControll);
Ok~运行游戏,成功了~好有意思的游戏,噗~
下一篇我们将为地图添加障碍物——流氓,你别到处乱跑了~!
- 【木头Cocos2d-x 013】游戏实例-《跑跑跑》制作教程(第五篇)——主角上下移动
- 【木头Cocos2d-x 011】游戏实例-《跑跑跑》制作教程(第三篇)——让主角跑
- 【木头Cocos2d-x 010】游戏实例-《跑跑跑》制作教程(第二篇)——加入主角
- 【木头Cocos2d-x 012】游戏实例-《跑跑跑》制作教程(第四篇)——地图卷动
- 【木头Cocos2d-x 014】游戏实例-《跑跑跑》制作教程(第六篇)——添加障碍物
- 【木头Cocos2d-x 009】游戏实例-《跑跑跑》制作教程(第一篇)——加载地图
- 【木头Cocos2d-x 009】游戏实例-《跑跑跑》制作教程(第一篇)——加载地图
- 【木头Cocos2d-x 015】游戏实例-《跑跑跑》制作教程(第七篇)——添加能吃的物品以及胜利条件
- 《跑跑跑》(四)——添加屏幕点击事件,让主角上下移动
- cocos2d-x游戏实例(2)-主角根据输入移动
- cocos2d-x游戏实例(12)-实时拖动主角移动
- cocos2d-x游戏实例(2)-主角根据输入移动
- cocos2d-x游戏实例(12)-实时拖动主角移动
- 游戏实例之《跑跑跑》(一)——地图生成和添加主角
- cocos2d-x游戏实例(11)-触屏主角移动轨迹
- cocos2d-x游戏实例(11)-触屏主角移动轨迹
- cocos2d-x游戏实例(1)-视角跟随主角
- cocos2d-x游戏实例(13)-简易摇杆控制主角
- jsp课程(7)---jsp+servlet+javabean 实现的简单网上购物车
- 布隆过滤器,数据处理的神来之笔!BloomFilter
- uva 442 Matrix Chain Multiplication
- 无刷新多文件上传(iframe)
- JQuery
- 【木头Cocos2d-x 013】游戏实例-《跑跑跑》制作教程(第五篇)——主角上下移动
- 详谈CSS网页布局中容易发生的错误编码http://www.52css.com/article.asp?id=1190
- 为Eclipse创建Ant的build.xml文件编辑自动提示
- 只用一次+ 求三个整数之和
- Rational Rose 2003破解版安装
- 文本框根据拼音自动匹配提示
- JAVA多线程编程
- java 用jdbc:odbc和 jdbc驱动调用 sqlserver2000 数据库
- 八皇后问题(递归、非递归——回溯)