结着上次的写吧;
要实现的效果是阳光因子(姑且这么叫吧);阳光因子每隔一段时间在随机游戏窗口的上方随机产生;散落到屏幕的随机位置后,通过一个回调函数收回;收回的瞬间把玩家的金币 加 $25;(就这么个过程吧);要实现效果大概就是:
先来顾虑下实现这个过程需要哪些逻辑来完成;
(1)就是要有个金币计数板;(2)时时更新也就是每一帧都更新金币数目这个可以通过update来实现;(3):产生太阳因子的过程,和他的回收过程。(4):设定定时器每隔一段时间产生太阳因子;
那就按照这个过程一一实现吧:
首先在GaneLayer 层中声明一个变量 int _allScore ; 在构造函数中初始化为 this->_allScore = 225; //这个是金币展示板得初始值;
下面要来创建金币展示板了;
在GameLayer中声明一下内容:
//7:创建金币显示板
cocos2d::CCLabelTTF* _scoreLabel;
void createScoreLabel();
在GameLayer.cpp中:
实现这方法:
void GameLayer::createScoreLabel()
{
this->_scoreLabel =CCLabelTTF::create();
CCString* scoreStr = CCString::createWithFormat("Score : $%d",this->_allScore);
this->_scoreLabel->setString(scoreStr->m_sString.c_str());
this->addChild(this->_scoreLabel);
this->_scoreLabel->setPosition(ccp(350,550));
this->_scoreLabel->setFontSize(26);
this->_scoreLabel->setColor(ccc3(0,0,0));
}
这段代码可以产生这样的效果:
接下来就是要更新金币计数板了,,只要金币数目发生了改变。。就让计数板上面跟着改变:那就要使用update来更新了;
在GameLayer层中。。声明update:
//更新金币数目;
//更新金币数目;
void update(float dt);
它的实现过程我是这样写的:
void GameLayer::update(float dt)
{
CCString* scoreStr = CCString::createWithFormat("Score : $%d",this->_allScore);
this->_scoreLabel->setString(scoreStr->m_sString.c_str());
//这里是类型转换将整形转换、成char*型
}
上面的代码意思是只要金币数发生了变化就更新金币数;
接下来是产生太阳因子和回收过程:(太阳因子可以看做一个独立精灵所以我决定给他写个精灵类)
创建:太阳因子类SunSprite 继承 PlantSpriteAstribute ,PlantSpriteAstribute继承CCSprite
;
#pragma once
#include "plantspriteastribute.h"
#include "cocos2d.h"
class SunSprite :public PlantSpriteAstribute
{
public:
SunSprite(void);
~SunSprite(void);
CREATE_FUNC(SunSprite);
virtual bool init();
};
在SunSprite.cpp中;实现init()方法
#include "SunSprite.h"
USING_NS_CC;
SunSprite::SunSprite(void)
{
}
SunSprite::~SunSprite(void)
{
}
bool SunSprite::init()
{
if(!PlantSpriteAstribute::initWithSpriteFrameName("Sun_1.png"))
{
return false;
}
CCArray* _plantArray =CCArray::create();
_plantArray->retain();
for(int i=1;i<22;i++)
{
CCSpriteFrame* plantFrames = CCSpriteFrameCache::sharedSpriteFrameCache()->spriteFrameByName(CCString::createWithFormat("Sun_%d.png",i)->getCString());
_plantArray->addObject(plantFrames);
}
CCAnimation* plantAnimation =CCAnimation::createWithSpriteFrames(_plantArray,0.2f);
this->runAction(CCRepeatForever::create(CCAnimate::create(plantAnimation)));
return true;
}
上面这个过程是播放太阳因子动画的过程;
接下来我们把这个太阳因子加到游戏层里面去;
#include "SunSprite.h"
并作一下声明:
//创建阳光动画
SunSprite* _sunSprite;
void createSun(float dt);
void removeSun(CCNode* pSend);
在GameLayer的构造函数中,加入太阳因子的精灵框帧缓存,和批处理节点;
this->_cache->addSpriteFramesWithFile("plant.plist"); //植物和阳光统一放在这里面;
this->_batchNode_Plant =CCSpriteBatchNode::create("plant.pvr.ccz");
this->addChild(_batchNode_Plant);
this->_batchNode_Plant->retain();
在其析构函数中释放内存,避免内存泄露:
_batchNode_Plant->release();
下面来实现createSun方法和回收方法:
void GameLayer::createSun(float dt)
{
this->_sunSprite =SunSprite::create();
this->_sunSprite->setPosition(ccp(600*rand()/RAND_MAX + 380,600));
this->_batchNode_Plant->addChild(this->_sunSprite);
this->_sunSprite->setOpacity(180);
//产生太阳以后,要做两个运动
CCFiniteTimeAction* move1 = CCMoveTo::create(4.0f,ccp(this->_sunSprite->getPosition().x,380*rand()/RAND_MAX+100));
CCFiniteTimeAction* move2 = CCMoveTo::create(0.5f,ccp(300,550));
this->_sunSprite->runAction(CCSequence::create(move1,move2,CCCallFuncN::create(this,callfuncN_selector(GameLayer::removeSun)),NULL));
}
void GameLayer::removeSun(CCNode* pSend)
{
CCSprite* sprite =(CCSprite*)pSend;
this->_batchNode_Plant->removeChild(sprite,true);
this->_allScore=this->_allScore+25;
}
。。。因为创建太阳因子,,我们是设定定时器的,,所以要调用定时器函数;
schedule(schedule_selector(GameLayer::createSun),9.0f); //这里限定太阳因子每9s产生一次;产生后做两个线性运动,,并被系统回收掉; 回收后,让总金币加25;
分享到:
相关推荐
五子棋,小海豹,割绳子,数字游戏,俄罗斯方块,中国象棋,植物大战僵尸,按钮特效,心形进度条,赛车游戏,预测球的轨迹,愤怒的小鸟,ClippingNode,刀光效果,SLG,魂斗罗,天天过马路,橡皮擦效果,流体test,2d 光线,愤怒的小鸟2,...
Cocos2d-x_C++_3.4,48款游戏源码大合集,Demo 演示代码,简单实现:捕鱼达人,FlappyBird,2048,塔防,微信飞机,超级玛丽,坦克大战,刀塔传奇,防空-合金弹头,城市猎人(跑酷),封神,跑酷30,切水果,奇怪大冒险,翻牌效果,...
1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合...
Android植物大战僵尸源码 cocos-2d [注:本内容来自网络,在此分享仅为帮助有需要的网友,如果侵犯了您的权利,麻烦联系我,我会第一时间删除,谢谢您。]
使用cocos2d游戏引擎开发的android版植物大战僵尸
cocos2d开发,植物大战僵尸(iphone版demo源码),仅做学习交流!!
自己写了一个简单的小程序,其中有不足之处,望谅解,本程序只供对cocos2d-x游戏开发者学习使用;开发环境xcode4.5 coco2d-x
我是用cocos2d-x3.17版本开发的植物大战僵尸,实现了部分功能,暂时只能种植2种植物,能出2种僵尸,他们之间的血量变化,以及僵尸动作之间的变化都实现好了。文件里我的开发过程,代码有详细注释。
游戏引擎基于版本 Cocos2d-X v3.16游戏全部使用c++开发如果你刚刚接触Cocos2d-X 这绝对是个不错的入门项目如果是你C++初学者或者其他语言转游戏开发,这个项目没有复杂的语法绝对是一个不错的学习项目。如果你是游戏...
Cocos2d是一个大家庭,包括Cocos2d-iphone,Cocos2d-x,Cocos2d-javascript等。而在国内,Cocos2d-x则相对领先。在中国的2D手机游戏开发中,Cocos2d-x引擎的份额超过70%。不同家庭成员之间只是语言不同,而实现的接口...
多款HTML5 游戏源代码特辑,包括了捕鱼达人、植物僵尸、Solarmax、俄罗斯方块、扫雷、切水果、超级玛丽、三国杀、驴子跳、太空战舰、坦克大战等
使用c++基于Cocos2dx V3.16 开发的植物大战僵尸游戏。游戏引擎基于版本 Cocos2d-X v3.16。游戏全部使用c++开发
基于Cocos2dx V3.16开发的植物大战僵尸游戏
重要 这个游戏模仿了原版植物大战僵尸。不要用于商业用途,否则后果自负 官网: 项目说明 此游戏全部由本人自己制作完成。游戏具有可玩性(目前有104个关卡),今后会不定时更新(不断完善)。 该游戏相较于原版的...
3D俄罗斯方块 Cocos2d-html5-v2.0 Html5二维库及说明(连连看实例) ...lufylegend-1.5.0 切水果 坦克 塞车游戏 太阳系 ...植物大战僵尸 碰撞球 脚本课程10 贪吃蛇 超级玛丽 飞机游戏 驴子跳游戏源码 魔塔
毛球iOS 休闲无塔防御游戏,像植物大战僵尸一样以猫和狗为特色。 请注意,这个游戏是 3 年前开发的,此后一直没有更新,所以虽然它可以编译和运行,但屏幕看起来很糟糕,因为我们使用的 Cocos2D 的代码和版本已经...
我的其他资源都是免费的,是对于c语言初学者和想初学游戏者的帮助比较大的,其中有单片机,ARM,数据结构,window编程,MFC编程,cocos2dx,unity3d自己编写的小游戏。...目前连载cocos植物大战僵尸教程中。