第一句子网 - 唯美句子、句子迷、好句子大全
第一句子网 > 飞机大战源码php 飞机大战源码 - 丁小未的个人页面 - OSCHINA - 中文开源技术交流社区...

飞机大战源码php 飞机大战源码 - 丁小未的个人页面 - OSCHINA - 中文开源技术交流社区...

时间:2023-08-22 01:41:24

相关推荐

飞机大战源码php 飞机大战源码 - 丁小未的个人页面 - OSCHINA - 中文开源技术交流社区...

//

//HPlayer.cpp

//dafeiji

//

//Createdby丁小未on13-9-26.

//

//

#include"HPlayer.h"

#include"HWorld.h"

usingnamespacecocos2d;

//创建主角精灵

HPlayer*HPlayer::createPlayer(constchar*fileName)

{

HPlayer*player=newHPlayer();

//由于继承自CCSprite,然后调用CCSprite的initWithFile方法

if(player&&player->initWithFile(fileName)){

player->autorelease();

//调用初始化方法

player->playerInit();

returnplayer;

}

CC_SAFE_DELETE(player);

returnNULL;

}

//设置配置参数,初始化血量,杀敌数等

voidHPlayer::playerInit()

{

CCSizesize=CCDirector::sharedDirector()->getWinSize();

//设置主角的位置在屏幕下面正中央

this->setPosition(ccp(size.width*0.5,this->getContentSize().height*0.5));

//设置参数(血量,当前血量,无敌时间,分数)

hpMax=5;

hp=5;

score=0;

strongTime=2*60;

//添加右下角的血量贴图

for(inti=0;i<5;i++){

CCSprite*spHp=CCSprite::create("icon_hp.png");

//设置每个血量贴图在屏幕的右下角一次排列,并且从右至左tag分别是值为5,4,3,2,1的枚举类型

spHp->setPosition(ccp(size.width-this->getContentSize().width*0.5*i-20,spHp->getContentSize().height*0.5));

if(i==0){

spHp->setTag(tag_playerHP1);

}elseif(i==1){

spHp->setTag(tag_playerHP2);

}elseif(i==2){

spHp->setTag(tag_playerHP3);

}elseif(i==3){

spHp->setTag(tag_playerHP4);

}elseif(i==4){

spHp->setTag(tag_playerHP5);

}

//将每一个血量贴图添加到HWorld场景中

HWorld::sharedWorld()->addChild(spHp,10);

}

//添加分数label

CCLabelTTF*label=CCLabelTTF::create("分数","Helvetica-Blood",24);

label->setPosition(ccp(30,size.height-22));//位置左上方

HWorld::sharedWorld()->addChild(label,10);

//分数结果

stringstrScore=Convert2String(score);

CCLabelTTF*labelScores=CCLabelTTF::create(strScore.c_str(),"Helvetica-Blood",24);

labelScores->setPosition(ccp(110,size.height-22));

labelScores->setColor(ccc3(255,255,0));//设置颜色为黄色

HWorld::sharedWorld()->addChild(labelScores,10,tag_scoreTTF);

//添加杀敌label

CCLabelTTF*labelKill=CCLabelTTF::create("杀敌","Helvetica-Blood",24);

labelKill->setPosition(ccp(30,size.height-52));

HWorld::sharedWorld()->addChild(labelKill,10);

//杀敌数

stringstrKillCount=Convert2String(killCount);

strKillCount+="/100";//C++中string可以直接拼接

CCLabelTTF*labelKillCount=CCLabelTTF::create(strKillCount.c_str(),"Helvetica-Blood",24);

labelKillCount->setPosition(ccp(110,size.height-52));

labelKillCount->setColor(ccc3(255,255,0));//设置为黄色

HWorld::sharedWorld()->addChild(labelKillCount,10,tag_killsCountTTF);

}

//添加分数

voidHPlayer::addScore(float_value)

{

score+=_value;

stringstrScore=Convert2String(score);

//根据HWorld获取场景中分数标签并且改变他的值

CCLabelTTF*ttf=(CCLabelTTF*)HWorld::sharedWorld()->getChildByTag(tag_scoreTTF);

ttf->setString(strScore.c_str());

}

//添加杀敌数

voidHPlayer::addKillCount(float_value)

{

killCount+=_value;

stringstrKillCount=Convert2String(killCount);

strKillCount+="/100";

//获取HWorld中杀敌数标签,并且改变他的值

CCLabelTTF*ttf=(CCLabelTTF*)HWorld::sharedWorld()->getChildByTag(tag_killsCountTTF);

ttf->setString(strKillCount.c_str());

//当杀敌过百的时候,游戏胜利

if(killCount>=100){

//

intoldScore=atoi(CCUserDefault::sharedUserDefault()->getStringForKey("user_score","-1").c_str());//当取出的键值为NULL的时候默认为1

if(oldScore!=-1&&score>oldScore){

CCUserDefault::sharedUserDefault()->setStringForKey("user_score",Convert2String(score));

CCUserDefault::sharedUserDefault()->flush();//必须要写,刷新数据

}

//调用胜利界面

HWorld::sharedWorld()->winGame();

}

}

//让主角掉血的方法,分为死亡和飞死亡两种情况来分析

voidHPlayer::downHp()

{

//如果还出于无敌状态则不需要掉血

if(isStrong){

return;

}

//血量减少1

hp-=1;

//如果血量少于0,则将主角设置不可见并且设置他已经死亡

if(hp<=0){

this->setVisible(false);

isDead=true;

//取出旧的分数

intoldScore=atoi(CCUserDefault::sharedUserDefault()->getStringForKey("user_score","-1").c_str());

//当有新的分数,就将新的分数保存到数据中,并且要刷新保存

if(oldScore!=-1&&score>oldScore)

{

CCUserDefault::sharedUserDefault()->setStringForKey("user_score",Convert2String(score));

CCUserDefault::sharedUserDefault()->flush();

}

HWorld::sharedWorld()->lostGame();

}

//如果主角还为死亡然后移除相应界面中的血量贴图

else

{

switch(hp){

case1:

HWorld::sharedWorld()->removeChildByTag(tag_playerHP2,true);

break;

case2:

HWorld::sharedWorld()->removeChildByTag(tag_playerHP3,true);

break;

case3:

HWorld::sharedWorld()->removeChildByTag(tag_playerHP4,true);

break;

case4:

HWorld::sharedWorld()->removeChildByTag(tag_playerHP5,true);

break;

}

//将无敌状态开启,并且开启无敌状态的定时器

isStrong=true;

strongCount=0;//无敌状态的时间

this->schedule(schedule_selector(HPlayer::strongIng));

}

}

//正处于无敌状态中

voidHPlayer::strongIng()

{

strongCount++;

//当无敌状态时间到的时候,取消无敌状态,并设置为可见,并且取消定时器

if(strongCount%strongTime==0){

this->setVisible(true);

isStrong=false;

this->unschedule(schedule_selector(HPlayer::strongIng));

}

else//如果是无敌状态,让他不断的闪烁

{

if(strongCount%3==0){

this->setVisible(false);

}else{

this->setVisible(true);

}

}

}

//当主角精灵初始化的时候注册他的触摸事件

voidHPlayer::onEnter()

{

CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this,0,true);

CCSprite::onEnter();//调用父类的onEnter方法,这里是调用的CCNode的onEnter方法

}

//当主角精灵退出的时候取消他的注册触摸事件

voidHPlayer::onExit()

{

CCDirector::sharedDirector()->getTouchDispatcher()->removeDelegate(this);

CCSprite::onExit();

}

//设置主角精灵的当前位置

boolHPlayer::ccTouchBegan(CCTouch*pTouch,CCEvent*pEvent)

{

this->setPosition(pTouch->getLocation());

returntrue;

}

//触摸移动的时候不断的去移动主角精灵让他跟随着鼠标移动而移动

voidHPlayer::ccTouchMoved(CCTouch*pTouch,CCEvent*pEvent)

{

this->setPosition(pTouch->getLocation());

}

//触摸结束

voidHPlayer::ccTouchEnded(CCTouch*pTouch,CCEvent*pEvent)

{

this->setPosition(pTouch->getLocation());

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。