PlaneWar
cocos2d-x飞机大战
pistach
游戏探索小能手
展开
-
cocos2d-x实战项目【飞机大战】-- 配置子弹数据
json文件[ { "id":3001, "img":"blueBall2.png" }, { "id":3002, "img":"greenBall.png" }, { "id":3003, "img":"helperBullet.png" }, { "id":3004, "img":"monsterBullet1.png" }, { "id":3005, "img":"orangeCircle.png" }, { "id":300原创 2021-07-08 11:15:19 · 178 阅读 · 0 评论 -
cocos2d-x实战项目【飞机大战】-- 简单状态机:用于控制动画播放
每一次切换之前先停止其他的动画,不然会同时播放多个动画,造成闪烁效果;但是每次移动时stopAllActions会被调用多次,每帧调用一次,造成动画被定住的效果;引入“简单状态机”,让每种动画在同一个状态下只播放一次。int m_nState; //简单状态机void changeState(int nState); //用函数来切换状态enum { E_STATE_NONE, E_STATE_STRAIGHT, E_STATE_LEFT, E_STATE_RIGHT};原创 2021-07-07 10:28:49 · 155 阅读 · 0 评论 -
cocos2d-x实战项目【飞机大战】-- 子弹与敌机的碰撞
如果不是格子地图,两个精灵的碰撞一般是通过包围盒是否交叉来判定(记得在同一坐标系下)void CGameScene::update(float fDelta){ //通过管理者分别拿到子弹和敌机 Vector<Node*> vecBullet = m_pBulletMgr->getChildren(); Vector<Node*> vecEnemy = m_pEnemyMgr->getChildren(); for (int i = 0; i < vec原创 2021-07-08 09:36:11 · 343 阅读 · 0 评论 -
cocos2d-x实战项目【飞机大战】-- 根据PageView切换关卡和怪物波
动态数据类CDynamicData中:CC_SYNTHESIZE(int, m_nLevelId, LevelId); //在关卡选择的时候保存这个数据在LevelSel中:void CLevelSel::onBtnStart(Ref* pRender) //关卡选择页面开始游戏的回调函数{ //获取当前所选的m_pPageView的索引 int nIndex = m_pPageView->getCurPageIndex(); //由于引擎不操作时nIndex默认为-1,用三目运原创 2021-07-08 09:20:15 · 119 阅读 · 0 评论 -
cocos2d-x实战项目【飞机大战】-- 伤害扣血(敌人和玩家均有扣血,写在角色基类中)
在RoleBase中定义扣血函数和血条/扣血virtual void damage(int nDamage); //传入伤害的参数(如攻击力)//标记死亡CC_SYNTHESIZE(bool, m_bDeath, Death); //创建一个bool属性//最大血量CC_SYNTHESIZE(int, m_nMaxHp, MaxHp);//血条LoadingBar* m_pBlood;在初始化时创建进度条bool CRoleBase::initWithSpriteFrameName(原创 2021-07-08 09:39:24 · 292 阅读 · 0 评论 -
cocos2d-x实战项目【飞机大战】-- 继承精灵、继承节点
继承精灵bool CPlayerOne::init(){ if (!Sprite::initWithSpriteFrameName("Plane0_0.png")) //Image/Plane.plist里面的精灵帧 { return false; } return true;}继承节点:节点不能承载图片,要创建一张图片CC_SYNTHESIZE_READONLY(Sprite*, m_pPic, Pic);bool CPlayer::init(){ if (!Node:原创 2021-07-07 09:53:07 · 91 阅读 · 0 评论 -
cocos2d-x实战项目【飞机大战】-- 背景滚动
vector<Sprite*> m_vecBg; //容器存放图片//创建背景void createBg();:m_fSpeed(-75) //向下运动void CBackground::createBg(){ //获取窗口的大小和原点 auto visibleSize = Director::getInstance()->getVisibleSize(); Vec2 origin = Director::getInstance()->getVisibleOr原创 2021-07-07 09:39:11 · 216 阅读 · 0 评论 -
cocos2d-x实战项目【飞机大战】-- 定时器、合图、菜单按钮
1、定时器//定时器 scheduleOnce(带一个参数的回调函数、延迟时间(几秒后执行一次)、键(用于删除的标识))//CC_CALLBACK_1(调用的函数, 对象) this->scheduleOnce(CC_CALLBACK_1(CGameLogo::chanceScene,this), 0.5, "chanceScene");2、创建合图精灵//精灵帧缓存池(单例)SpriteFrameCache* pCache = SpriteFrameCache::getInstanc原创 2021-07-07 09:35:24 · 140 阅读 · 0 评论 -
cocos2d-x实战项目【飞机大战】-- 按钮button
#include "ui/CocosGUI.h"using namespace ui;Button* m_pBtnStart;void onBtnStart(Ref* pRender);//游戏开始按钮(Button类)m_pBtnStart = Button::create("GameStartNormal.png", "GameStartSelected.png", "", TextureResType::PLIST);m_pBtnStart->addClickEventList原创 2021-07-07 10:31:20 · 123 阅读 · 0 评论 -
cocos2d-x实战项目【飞机大战】-- 怪物根据不同关卡按波出现
在EnemyMgr的初始化时:bool CEnemyMgr::init(){ if (!Node::init()) { return false; } //拿到关卡数据 int nLevelId = CDynamicData::getInstance()->getLevelId(); pLevelDt = CConfigMgr::getInstance()->getData("LevelDtMgr")->getDataByID<CLevelDt*>(nLe原创 2021-07-08 09:26:57 · 219 阅读 · 0 评论 -
cocos2d-x实战项目【飞机大战】-- 点击点与包围盒、坐标转化
//获取点击点Vec2 touchPos = pTouch->getLocation();//获取飞机包围盒(不能是this 因为this是节点,没有长宽)Rect rec = m_pPic->getBoundingBox();由于点击点是相对于世界坐标,包围盒是相对于玩家,两者参照系不同,会造成只有点击屏幕右下角,飞机才能跟随鼠标移动的现象,必须转化参照系让其统一。法1:包围盒坐标转化成相对世界坐标Vec2 pos = this->convertToWorldSpace原创 2021-07-07 10:26:57 · 211 阅读 · 0 评论 -
cocos2d-x实战项目【飞机大战】-- 触摸事件(让飞机跟着鼠标动)
三部曲1、创建单点触摸事件监听2、监听者调用不同的触摸事件(Began、Moved、Ended)3、事件派发void CPlayer::_addTouchEvent(){ //添加触摸事件,单点触摸 EventListenerTouchOneByOne* pEventListener = EventListenerTouchOneByOne::create(); //告诉引擎发生的触摸事件,引擎会根据不同的触摸事件调用回调函数 pEventListener->onTouchBegan原创 2021-07-07 10:19:34 · 372 阅读 · 0 评论 -
cocos2d-x实战项目【飞机大战】-- 动画
//1、收集动画帧(精灵帧)SpriteFrameCache* pCache = SpriteFrameCache::getInstance();char szName[32] = {}; //精灵帧名称字符串//2、通过Animation来收集动画信息Animation* pStraightAnim = Animation::create();for (int i = 0; i < 2; i++) //第0张和第1张图片{ sprintf_s(szName, "Plane原创 2021-07-07 10:27:40 · 183 阅读 · 0 评论 -
cocos2d-x实战项目【飞机大战】-- 基础知识
1、窗口大小与自适应:static cocos2d::Size designResolutionSize = cocos2d::Size(320, 480);static cocos2d::Size smallResolutionSize = cocos2d::Size(320, 480);2、auto:C++11的新语法auto age = 5; //定义一个变量,类型自动赋为右边的类型3、创建场景auto scene = HelloWorld::createScene(); //原创 2021-07-07 09:28:54 · 333 阅读 · 0 评论 -
cocos2d-x实战项目【飞机大战】-- 动作系统
//MoveTo* pMoveTo = MoveTo::create(3, Vec2(fx,100)); //移动到某个具体位置MoveBy* pMoveBy = MoveBy::create(6, Vec2(0, -visibleSize.height - 200)); //在当前基础上的偏移RemoveSelf* pRemoveSelf = RemoveSelf::create(); //序列动作(包装的动作依次执行)Sequence* pSeq = Sequence::create(pMo原创 2021-07-08 09:22:09 · 154 阅读 · 0 评论