独自一人的手游开发之路(持续更新)(cocos2dx-开发)(IOS)

dongli19921221 dongli19921221 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
这个坑是我2013年的时候挖的,当时正在看设计模式,想着写个游戏来实践下,于是就有了这个项目。那时候我天真的以为我可以很快就完成它,然而事实并非如此,这两年发生了太多事,加上之后大病一场,这个项目也就不了了之了。
不知道你们有没有在某个夜晚整宿整宿的睡不着,心里的空虚像潮水般涌来,觉得自己似乎从未真正的做成过某件事,这种没来由的遗憾塞满了我的心,这些辗转反复无法入眠的夜晚给了我一些不一样的感觉,让我觉得,有些事,既然决定了就要做完,哪怕只有孤独伴随。我很喜欢的一句话,送给我自己,也送给所有那些心中有未完成梦想的人。
正确的事情,什么时候做都不晚。
言归正传,说说这个项目。
策划上这个游戏是要做成横版的动作策略游戏,资源全套用的都是网络上的,冒险岛素材。这是一个召唤怪物出来替你打怪过关的游戏,点击下方的怪物卡牌,就会召唤出相应的士兵,这些士兵具有一定程度的AI,会自动锁定攻击最近的怪物,能根据你输入的策略符文改变打法,能触发技能,技能触发之后士兵头上会显示一个技能的图标,点击之后就能发出技能。召唤士兵和使用技能都要用能量,能量系统类似于植物大战僵尸,需要在其产生后手动点击收集,战斗中杀死敌人也会得到能量。士兵的技能可以通过配置画面更换,士兵的属性也可以提升,总之就是一款正宗的横版过关手游。然而这只是我脑子中的想法,并没有写成策划案,系统是想到哪写到哪。说说代码吧,整个项目的继承树由CGameObjectAbstract基类开始衍生,继承出CGameImageObject负责具有渲染的子类,CGameComponentObject负责没有渲染的功能,图形接口类总有CGameMonster,CGameSoidier等等。


主要使用的还是聚合模式,用自己的类封装了cocos2dx的功能。其他使用的设计模式还有工厂方法,单例,策略,桥接等等乱七八糟的都在用。先看自己抽象的CGameInstance类,涌来封装整个游戏的启动逻辑。
[code=c]
//
// CGameInstanceIOS.h
// RPGMapstory
//
// Created by Ling Dong on 13-8-27.
// Copyright (c) 2013年 __MyCompanyName__. All rights reserved.
//

#ifndef RPGMapstory_CGameInstanceIOS_h
#define RPGMapstory_CGameInstanceIOS_h


static void fun();

#include "CGameInstanceAbstract.h"
#include "cocos2d.h"
using namespace cocos2d;
class CGameInstanceIOS:public CGameInstanceAbstract
{
protected:
CGameInstanceIOS()
{
std::cout<<"CGameInstanceIOS is create"<<std::endl;
}
CGameInstanceIOS(const CGameInstanceIOS& rhs)
{

}
const CGameInstanceIOS& operator=(const CGameInstanceIOS& rhs)
{

}
public:
virtual ~CGameInstanceIOS()
{
std::cout<<"CGameInstance is destory"<<std::endl;
}

static CGameInstanceIOS * sharedGameInstanceIOS();

virtual void InitGameInstance();

virtual void InitGameSetting();

virtual void CleareGameInstance();

virtual void PauseGameInstance();

virtual void ResumeGameInstance();

virtual void StartRunGameInstance();

private:
CCScene * m_pGameScene;

};

#endif

//
// CGameInstance.cpp
// RPGMapstory
//
// Created by Ling Dong on 13-9-4.
// Copyright (c) 2013年 __MyCompanyName__. All rights reserved.
//

#include <iostream>
#include "CGameInstanceIOS.h"
#include "CGameDataStruct.h"
#include "cocos2d.h"
#include "CGameScene.h"
using namespace cocos2d;
static CGameInstanceIOS * theGameInstnace = 0;

CGameInstanceIOS * CGameInstanceIOS::sharedGameInstanceIOS()
{
if(!theGameInstnace)
{
theGameInstnace = new CGameInstanceIOS();
if (theGameInstnace)
{
theGameInstnace->InitGameInstance();
return theGameInstnace;
}
}

return theGameInstnace;

}


void CGameInstanceIOS::InitGameInstance()
{

}

void CGameInstanceIOS::InitGameSetting()
{
CCDirector::sharedDirector()->setOpenGLView(CCEGLView::sharedOpenGLView());
CCDirector::sharedDirector()->setDisplayStats(true);
CCDirector::sharedDirector()->setAnimationInterval(GAME_INTERVAL);

}

void CGameInstanceIOS::CleareGameInstance()
{

}

void CGameInstanceIOS::StartRunGameInstance()
{
m_pGameScene = CGameScene::GetScene();
CCDirector::sharedDirector()->runWithScene(m_pGameScene);
}

void CGameInstanceIOS::PauseGameInstance()
{
m_iGameStateValue = GAME_STATE_PAUSE;
}

void CGameInstanceIOS::ResumeGameInstance()
{
m_iGameStateValue = GAME_STATE_RESUME;
}

然后是自己继承自CCLayer的CGameScene涌来封装游戏流程。

//
// CGameScene.h
// RPGMapstory
//
// Created by Ling Dong on 13-9-4.
// Copyright (c) 2013年 __MyCompanyName__. All rights reserved.
//

#ifndef RPGMapstory_CGameScene_h
#define RPGMapstory_CGameScene_h

#include <iostream>
#include "cocos2d.h"
using namespace cocos2d;
class CGameScene:public CCLayer
{
public:
CGameScene()
{
std::cout<<"CGameScene is create"<<std::endl;
}

virtual ~CGameScene()
{
std::cout<<"CGameScene is destory"<<std::endl;
}

static CCScene * GetScene();

virtual bool init();

CREATE_FUNC(CGameScene);

void InitGameScene();
/*
* init game
*/
void RunGameWithFrame();
/*
* 游戏帧循环
*/
void CleareGameScene();
/*
* 清除游戏资源
*/
void OnGameLogoAnimation();
/*
* logo动画事件处理器
*/
void OnGameTitle();
/*
* 标题画面处理器
*/
void OnGameSelectScene();
/*
* 选择关卡画面处理器
*/
void OnGameSceneLogic();
/*
* 场景逻辑处理器
*/
void OnGameConfiguration();
/*
* 配置角色画面处理器
*/
void OnGamePause();

void OnGameResume();

bool ccTouchBegan(CCTouch * pTouch, CCEvent * pEvent);

void SetTouchPoint(const CCPoint& Point)
{
m_TouchPoint = Point;
}
CCPoint GetTouchPoint()const
{
return m_TouchPoint;
}

void Func()
{
int a;
};
private:
int m_iGameRuningStateValue;
bool m_bFirstProtect;
bool m_bGameRuning;
bool m_bIsNeedLoadResource;
bool m_bHasSaveData;
bool m_bHasTouch;
bool m_bIsNewGame;
bool m_bTitleProtect;
std::string m_szCurrentMapName;
CCPoint m_TouchPoint;
};

#endif
然后是自己定义的所有数据结构。


...全文

相关推荐

评论 5
收藏 已收藏
分享
返回顶部
dongli19921221
Cocos2d-x 726 成员 671 内容