关闭

【cocos2d-x IOS游戏开发-捕鱼达人10】鱼的产生和移动

标签: cocos2d-x捕鱼达人优化动画移动
2336人阅读 评论(0) 收藏 举报
分类:

尊重开发者的劳动成果,转载的时候请务必注明出处:http://blog.csdn.net/haomengzhu/article/details/17144971

上节回顾

【cocos2d-x IOS游戏开发-捕鱼达人9】鱼与动画


1、鱼的产生

鱼的产生
在一定范围内随机产生鱼

场景和屏幕的关系
屏幕只是场景的一个小区域
鱼的坐标是相对场景的。

一些简单的限定
不同的鱼有不同的产生机率
场景中的鱼有最大上限,如果上限内则不产生鱼
鱼在完全看不见的情况下有一定机率消失(可选)

鱼的配置
正常速度,加速时速度,最大加速时间
转弯速度(转1度需要的时间)
血量(决定了能够承受攻击的次数)


2、  鱼的移动

和移动相关的属性
方向
在场景中的位置
当前速度
转弯速度

移动规则
在场景范围内随机挑选一个可用点进行移动
转向时,停止移动


具体实现看代码:

点击开始游戏之后:

#ifndef _GAME_LOGIC_H_
#define _GAME_LOGIC_H_
#include "cocos2d.h"
USING_NS_CC;

#include <vector>

#include "../include/IGameScene.h"
#include "../include/SignalSlot.h"

#include "../config/GameConfig.h"
#include "../config/FishConfig.h"
#include "GameLogicDef.h"
#include "GameUIMgr.h"
#include "GameObject.h"

namespace fishingjoy
{
	namespace logic
	{
		class CGameLogic:public cocos2d::CCObject,public IGameLogic
		{
			scene::IGameScene* m_pGameScene;
			CGameUIMgr mUIMgr;
			std::vector<CGameObject*> m_vecObjectsList;
			EGameState m_eGameState;
		public:
			//override base class.
			void update(float dt);
		public:
			//implement interface for IGameLogic
			virtual void enterGame()
			{
				const char* szPlaySceneBg = config::CGameConfig::getPlaySceneBg();
				m_pGameScene->setBackground(szPlaySceneBg);

				m_eGameState = EGS_GAME_PLAY;

				//获取鱼的配置信息
				const std::vector<config::SFishData>& rFishs = config::CFishConfig::getFishData();
				//在屏幕上显示5条鱼
				for(int i = 0; i < 5; ++i){
					//随机生成鱼的索引
					int idx = CCRANDOM_0_1()*rFishs.size();
					//根据索引值取得鱼的数据
					const config::SFishData& rData = rFishs[idx];
					//创建对象鱼添加到m_vecObjectsList中
					createGameObject(rData);
				}
				
				//emit signal... to notice that game is enter succesfully.
				Event_EnterGameSuccessed();
			}

			virtual void exitGame()
			{
				shutdown();
			}
		public:
			bool init(CCScene* pScene);


			void shutdown()
			{
				//to do..

				//exit.
				CCDirector::sharedDirector()->end();
			}
		private:
			CGameObject* createGameObject(const config::SFishData& rData);
			void destroyGameObject(CGameObject* pObj);
		};
	}
}
#endif
再看创建游戏对象的实现:

		CGameObject* CGameLogic::createGameObject(const config::SFishData& rData)
		{
			//根据鱼的AniID创建m_pGameScene的对象
			scene::ISceneObject* pS = m_pGameScene->createObject(rData.AniID);
			CGameObject* pObj = new CGameObject(pS);

			int maxw = config::CGameConfig::getExtendSize()+480;
			int maxh = config::CGameConfig::getExtendSize()+320;
			pObj->setPosition(CCRANDOM_0_1()*maxw,CCRANDOM_0_1()*maxh);
			pObj->setDuration(360*CCRANDOM_0_1());
			m_vecObjectsList.push_back(pObj);
			return pObj;
		}
创建对象鱼:

		ISceneObject* CGameScene::createObject(int tid)
		{
			//创建一个Scene的对象
			CSceneObject* pObj = new CSceneObject(tid);
			m_vecObjectsList.push_back(pObj);
			pObj->getRenderObject()->setPosition(cocos2d::CCPointMake(150,150));
			m_pObjectLayer->addChild(pObj->getRenderObject());
			return pObj;
		}
实现真正的渲染控制

#ifndef __RENDER_OBJECT_H__
#define __RENDER_OBJECT_H__
#include "cocos2d.h"
#include "../config/AniConfig.h"
namespace fishingjoy
{
	namespace scene
	{
		class CRenderObject:public cocos2d::CCSprite
		{
			const config::CAniObjectData* mAniObjectData;
		public:
			CRenderObject(int tid)
			{
				init();
				//获取鱼的动画的配置信息
				mAniObjectData = config::CAniConfig::getData(tid);
				if(mAniObjectData){
					//获取默认的动画名字即move
					const char* de = mAniObjectData->getDefaultAni();
					//根据名字设置动画的状态
					setAni(de);
				}
			}
			void setAni(const char* aniName)
			{
				if(mAniObjectData){
					//根据动画名字从std::vector<SAniData> mAnis中查找SAniData,即查找动画的配置信息
					const config::SAniData* pData = mAniObjectData->getAni(aniName);
					//根据动画的配置信息数据创建动画
					cocos2d::CCAnimation* pAnimation = cocos2d::CCAnimation::createWithSpriteFrames(pData->Frames,pData->Delay);
					//运行动画,CCRepeatForever的运行
					this->runAction(cocos2d::CCRepeatForever::create(cocos2d::CCAnimate::create(pAnimation)));
				}
			}
		public:
			void update(float dt)
			{
				printf("update render object\n");
			}
		};
	}
}
#endif

现在可以看到鱼在游动了!!


本节源代码与工程文件:【资源引用页】

大家还可以优化相关细节,可以适当增加属性和玩法(比如显示血条等等)。

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:446775次
    • 积分:6604
    • 等级:
    • 排名:第3740名
    • 原创:188篇
    • 转载:3篇
    • 译文:1篇
    • 评论:187条
    博客公告
    博客专栏