最近看了一下《使用Quick-Cocos2d-x搭建一个横版过关游戏》这个教程。
我不太懂lua,但感觉代码意思基本能看出来,就想用C++重新写一下这个示例,一方面了解一下lua,另一方面还可以熟悉一下用C++的开发。本人小白,免不了会犯些愚蠢的错误,不过犯了错只要能发现就是进步。
环境:
Cocos2dx 3.2  VS2012 
Quick-Cocos2d-x + BabeLua(可选,用于在VS中查看lua源码及运行原游戏)
http://www.cocoachina.com/bbs/read.php?tid=205043
资源文件:
https://github.com/rainswan/Brave    res文件夹中,将此文件夹下的image文件夹复制到你工程的Resource下面。

1.创建工程

打开命令行,输入:
cocos new -l cpp -d e:/projects/   Brave_cpp
这个命令会帮你创建一个新的HelloWorld工程,而且把整个cocos2d的源码给你拷了一份放在工程下面。
运行一下这个工程,什么,竟然报错了。果断关闭所有VS窗口,重新打开运行,发现竟然正常运行了。
将资源文件复制到Resource文件夹下面备用。
删除掉init中按钮,精灵,标签等代码,让程序变成只显示一个黑屏。
给游戏添加角色
添加背景
加入代码,加完后init函数内容如下:
bool HelloWorld::init()
{if ( !Layer::init() ){return false;}Size visibleSize = Director::getInstance()->getVisibleSize();Vec2 origin = Director::getInstance()->getVisibleOrigin();Sprite* background = Sprite::create("image/background.png");background->setPosition(origin + visibleSize/2);this->addChild(background);return true;
}

这样应该就可以显示出背景了。咦,Vec2类型竟然可以直接与Size类型相加?Size可以支持除法?这是怎么一回事呢?看一下Size源码,Size类定义了除法运算,Vec2难道定义了对Size的加法?不对,Vec2里没有关于Size的加法运算符。那就是Size可以自动转化成Vec2了?看到Size中有个如下的定义:
public:operator Vec2() const{return Vec2(width, height);}

精确的含义我没查到,不过应该可以理解为:如果有人把Size当作Vec2,就按这个方法给他一个Vec2.
冥冥之中自有天意,本来应该是一时的手误竟然背后还隐藏着道理……另外,Size还重载了=操作符,可以用Vec2给Size赋值。
导入精灵帧资源
继续在init函数中加入:
    SpriteFrameCache::getInstance()->addSpriteFramesWithFile("image/role.plist","image/role.pvr.ccz");
这个资源里包含了一些玩家、敌人动作的精灵帧,需要提前导入缓存。

显示玩家和怪物
玩家应该是一个类,可以继承自Sprite。原文中为Player建立了一个类,为Enemy1也建立了一个类,然后在后面出现Enemy2的时候又建立了一个类。我觉得这几个类可以用一个类代替,因为他们属性十分类似,目前只是贴图不同,仅仅因为这个就建立这么多类不太划算。
添加的Player.h如下:
#ifndef __Player__
#define __Player__
#include "cocos2d.h"
USING_NS_CC;class Player : public Sprite
{
public:enum PlayerType{PLAYER,ENEMY1,ENEMY2};bool initWithPlayerType(PlayerType type);static Player* create(PlayerType type);};#endif

目前先考虑三类角色,player , enemy1, enemy2。创建时,用枚举类型指定是哪一种。
Player.cpp 如下:
#include "Player.h"bool Player::initWithPlayerType(PlayerType type)
{std::string spName = "";switch(type){case PlayerType::PLAYER:spName = "player1-1-1.png";break;case PlayerType::ENEMY1:spName = "enemy1-1-1.png";break;case PlayerType::ENEMY2:spName = "enemy2-1-1.png";break;}this->initWithSpriteFrameName(spName);return true;
}Player* Player::create(PlayerType type)
{Player* player = new Player();if(player && player->initWithPlayerType(type)){player->autorelease();return player;}else{delete player;player = NULL;return NULL;}
}

可以看出,其核心就是根据不同的角色类型,用不同的SpriteFrameName来初始化精灵。
继续在HelloWorld的init类中加入:
   Player* player = Player::create(Player::PlayerType::PLAYER);player->setPosition(origin.x + player->getContentSize().width/2, origin.y + visibleSize.height/2);this->addChild(player);Player* enemy1 = Player::create(Player::PlayerType::ENEMY1);enemy1->setPosition(origin.x + visibleSize.width - player->getContentSize().width/2, origin.y + visibleSize.height/2);this->addChild(enemy1);

运行程序,结果如下:

和原版的教程一样,第一课到此完结。

Cocos2dx 3.2 横版过关游戏Brave学习笔记(一)相关推荐

  1. Unity3D横版过关游戏(一)

    想用Unity3D做一个横版过关的游戏,类似Mario的. 发现国外有一个很好的教程网站: http://walkerboystudio.com/html/unity_training___free_ ...

  2. Cocos2D来制作横版过关游戏1

    本文实践自 Allen Tan 的文章< How To Make A Side-Scrolling Beat 'Em Up Game Like Scott Pilgrim with Cocos2 ...

  3. Cocos2D-X系列之RPG横版过关游戏完整版实例-2

    以下为几个使player运动的函数的实现 /* void HelloWorld::pmhcollision()                                              ...

  4. 【官方教程】使用Quick-Cocos2d-x搭建一个横版过关游戏(六)

    这一篇是系列文章的最后一篇了,这一章我们会将剩下的UI界面和元素补齐,比如:游戏开始界面.过关界面,画面滚动. 游戏开始界面 在前面我们看到过主界面的结构,在我们的游戏开始界面中,我们只给它添加了一个 ...

  5. 横版过关游戏开发-碰撞检测

    上回说哪了?碰撞检测.碰撞检测应该是所有事件的触发点.比如:人物下落的时候,落到地面上.程序实现就要不断地检测人物坐标和地面坐标,如果碰撞,则停止下落.还有其他情况:子弹碰到敌人,则敌人消失,并且显示 ...

  6. 微店新品!微店首款《疯狂野蛮人》横版动作游戏来啦!

    <疯狂野蛮人>周瑜作品,微店首款横版过关游戏,冒险盗玩法,二段跳跃,支持Tiled编辑关卡内容! 游戏名称:疯狂野蛮人 游戏类型:单机:平台:12关. 玩家扮演小野蛮人,通过各种陷阱(死亡 ...

  7. Beat #39;Em Up Game Starter Kit (横版格斗游戏) cocos2d-x游戏源代码

    浓缩精华.专注战斗! 游戏的本质是什么?界面?养成?NoNo!    游戏来源于对实战和比赛的模拟,所以它的本源就是对抗.就是战斗! 是挥洒热血的一种方式! 一个游戏最复杂最难做的是什么?UI?商城? ...

  8. Beat 'Em Up Game Starter Kit (横版格斗游戏) cocos2d-x游戏源码

    浓缩精华,专注战斗!    游戏的本质是什么?界面?养成?NoNo!    游戏来源于对实战和比赛的模拟,所以它的本源就是对抗!就是战斗!是挥洒热血的一种方式!    一个游戏最复杂最难做的是什么?U ...

  9. Cocos2d-x 3.0 制作横版格斗游戏2

    转载:https://blog.csdn.net/bridge001/article/details/18882575 git:https://github.com/pj2933/fight2d co ...

  10. cocos2d-x 3.0 制作横版格斗游戏

    cocos2d-x: v3.0-alpha-pre Windows环境: Windows8 + Visual Studio 2012 Linux环境: Ubuntu12.04 + gcc 4.7.2 ...

最新文章

  1. Xcode @property attributes (nonatomic, copy, st...
  2. html调用js进行MD5加密,js实现md5加密
  3. eureka-server详解
  4. VTK:Rendering之Rainbow
  5. 创建spring配置
  6. matlab arima模型定阶,ARIMA模型预测问题
  7. 关于通信matlab 仿真,关于MATLAB在通信仿真系统中的运用
  8. 从Eclipse切换到IDEA后需要做的事情
  9. django得到Model的全部字段名(field)
  10. 什么是今日头条下拉词下拉框?
  11. DAC+DMA+TIM实现音频播放问题记录
  12. Java程序设计基础作业目录(作业笔记)
  13. 【23】数据可视化:基于 Echarts + Python 动态实时大屏范例 - Redis 数据源
  14. 怎样将PDF转成表格?超赞的两种PDF转Excel方法
  15. 360极速浏览器存放插件文件在电脑中位置路径
  16. 前端车牌识别SDK算法提取
  17. 复数计算器 Java 正则表达式
  18. C - Super Mario(分块+二分)
  19. 小学计算机教案模板范文,小学信息技术教案模板锦集5篇范本
  20. Scapy畸形报文攻击

热门文章

  1. r740服务器固态硬盘和机械硬盘一起用_搭载固态硬盘的服务器究竟比搭机械硬盘快多少?...
  2. 产品战略与战术之行业分析
  3. 美团旅行前端技术体系的思考与实践
  4. 机器学习代码整理pLSA、BoW、DBN、DNN
  5. 4.11交叉验证——K-fold和Stratified k-fold
  6. 1588 1-Step 和 2-Step PTP 之间有什么区别?
  7. eclipsemaven服务器显示404,eclipse-HTTP状态404-请求的资源(/)不可用
  8. 一个指针占几个字节?原理是什么呢?
  9. 基于51单片机俄罗斯方块游戏电路设计
  10. 帝国 php 7.0 默认 后台用户名及认证码,帝国CMS忘记后台登陆用户名 密码 认证码 安全提问答案 数据库用户名及密码的解决方法 | 坐倚北风...