//

//  HPlayer.cpp

//  dafeiji

//

//  Created by 丁小未 on 13-9-26.

//

//

#include "HPlayer.h"

#include "HWorld.h"

using namespace cocos2d;

//创建主角精灵

HPlayer *HPlayer::createPlayer(const char* fileName)

{

HPlayer * player=new HPlayer();

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

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

player->autorelease();

//调用初始化方法

player->playerInit();

return player;

}

CC_SAFE_DELETE(player);

return NULL;

}

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

void HPlayer::playerInit()

{

CCSize size=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 (int i=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);

}else if(i==1){

spHp->setTag(tag_playerHP2);

}else if(i==2){

spHp->setTag(tag_playerHP3);

}else if(i==3){

spHp->setTag(tag_playerHP4);

}else if(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);

//分数结果

string strScore=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);

//杀敌数

string strKillCount=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);

}

//添加分数

void HPlayer::addScore(float _value)

{

score+=_value;

string strScore=Convert2String(score);

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

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

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

}

//添加杀敌数

void HPlayer::addKillCount(float _value)

{

killCount+=_value;

string strKillCount=Convert2String(killCount);

strKillCount+="/100";

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

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

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

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

if (killCount>=100) {

//

int oldScore=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();

}

}

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

void HPlayer::downHp()

{

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

if (isStrong) {

return;

}

//血量减少1

hp-=1;

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

if (hp<=0) {

this->setVisible(false);

isDead=true;

//取出旧的分数

int oldScore=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) {

case 1:

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

break;

case 2:

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

break;

case 3:

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

break;

case 4:

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

break;

}

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

isStrong=true;

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

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

}

}

//正处于无敌状态中

void HPlayer::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);

}

}

}

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

void HPlayer::onEnter()

{

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

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

}

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

void HPlayer::onExit()

{

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

CCSprite::onExit();

}

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

bool HPlayer::ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent)

{

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

return true;

}

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

void HPlayer::ccTouchMoved(CCTouch *pTouch, CCEvent *pEvent)

{

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

}

//触摸结束

void HPlayer::ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent)

{

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

}

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

  1. mysql外码内码定义_中文编码杂谈(转) - CodeAxe的个人页面 - OSCHINA - 中文开源技术交流社区...

    编码问题的例子 在windows自带的notepad(记事本)程序中输入"联通"两个字,保存后再次打开,会发现"联通"不见了,代之以"��ͨ" ...

  2. html三列布局源码,HTML三列布局 - 黄柳淞的个人页面 - OSCHINA - 中文开源技术交流社区...

    1.三列布局1 三列布局 body{padding: 0;margin: 0;} .left{width:33.3%;height: 500px;background-color: #ccc;floa ...

  3. 三个瓶子分酒c语言源码,泊松分酒原理 - 我类个擦的个人空间 - OSCHINA - 中文开源技术交流社区...

    有一个12品脱(pint)的酒瓶,里面装满葡萄酒,另有8品脱和5品脱的瓶子各一个.问如何从中分出6品脱的酒出来? 传说泊松年轻时成功解决了该问题,勾起了他对数学的兴趣而投身数学研究,因此该问题被称为泊 ...

  4. php个人空间源码,PHP安装 - 牛牛牛大棚的个人空间 - OSCHINA - 中文开源技术交流社区...

    1.下载php源码包 http://www.php.net/downloads.php 2 .安装php tar -xvf php-5.5.13.tar.bz2 cd php-5.5.13 ./con ...

  5. android宿舍管理系统源码,校园宿舍管理系统 - ATB的个人空间 - OSCHINA - 中文开源技术交流社区...

    本实例为一个校园宿舍管理系统, 系统用户分为三个角色,系统管理员 , 楼宇管理员, 学生, 系统管理员可以应用对楼宇管理员的管理工作(增删改查), 学生的管理(增删改查), 楼宇管理(增删改查), 学 ...

  6. hsf 架构_HSF源码剖析 - 汪兴的个人空间 - OSCHINA - 中文开源技术交流社区

    前言 HSF是一个分布式的远程服务调用框架,其实我更喜欢把分布式几个字去掉,因为HSF本身并不是一个单独的服务(指一个进程),他是附属在你的应用里的一个组件,一个RPC组件(远程过程调用--Remot ...

  7. 获取腾讯视频真实地址php源码,解析腾讯视频真实地址 - osc_hajrc28s的个人空间 - OSCHINA - 中文开源技术交流社区...

    解析腾讯视频真实地址 标签(空格分隔): php 分析 1 我们从腾讯视频上找到的网页链接格式是这样的 https://v.qq.com/x/page/b0136et5ztz.html vid = b ...

  8. java链表源码_JAVA之链表源码 - 飞翔的南极企鹅的个人空间 - OSCHINA - 中文开源技术交流社区...

    TLinkTLinkNodeTLinkNodeTLinkNodeTLinkNodeTLinkNodeTLinkNode class TLinkNode>{ int size = 0; TNode ...

  9. 个人空间html源码,HTML常用代码段 - lynn_xiao的个人空间 - OSCHINA - 中文开源技术交流社区...

    base64格式: ------------------------------- ie注释方式: ----------------------------------------------- ie ...

  10. ireader android 源码,仿ireader书架 - androidCode的个人空间 - OSCHINA - 中文开源技术交流社区...

    public class ReaderActivity extends Activity { private ShelfAdapter mAdapter; // 书架列表 private ListVi ...

最新文章

  1. Python 初体验
  2. mysql 中is not null 和 !=null的区别
  3. mini mysql_mini
  4. python set过滤
  5. .NET常见问题汇总
  6. 职称类计算机论文,计算机类职称论文发表(2)
  7. 作者:丁伟(1972-),男,博士,中国联合网络通信有限公司网络技术研究院高级工程师。...
  8. 单片机软件模拟SPI接口—加深理解SPI总线协议
  9. 美国邮轮旅行社Cruise Travel Outlet接受加密货币支付
  10. delegate、notification、KVO各优缺点
  11. Mysql:执行source sql脚本时,出现:error 2
  12. 利用EEPROM实现arduino的断电存储
  13. 【MIKE HYDRO】断面处理-excel断面数据转成可导入的txt格式
  14. 增量式光电编码器原理及其结构
  15. html中颜色取样器工具,photoshop基础教程:颜色取样器工具的使用详解
  16. DPI与DFI技术分析
  17. CrossAir CA-S01 SMD贴片天线使用步骤
  18. Android端穿山甲SDK集成
  19. Altair的离散元分析工具EDEM软件的2022.2版本下载与安装配置教程
  20. 家里宽带628连不上_win7系统宽带连接提示错误628的解决方法

热门文章

  1. Silverlight 减小 Xap 的大小
  2. 西电计算机学院在读博士刘潇,西电版博士研究生学术期刊目录(学科).doc
  3. Win10安装Deepin双系统找不到启动项
  4. Unity Fingers Gesture手势插件教程(新)
  5. 纵横职场20条黄金法则,知人善用的五个标准,李嘉诚14句经典财富格言
  6. pca 累积方差贡献率公式_SPSS主成分分析时,是不是得到的方差百分比就是贡献率,累计百分比就是累计贡献率??...
  7. Ubuntu(linux)系统配置搭建代理服务器
  8. 好扑科技技术副总裁戎朋:从海豚浏览器服务器端研发主管到区块链,揭秘区块链技术之路...
  9. Golang 原子操作与互斥锁
  10. Qt调节电脑屏幕亮度