zoukankan      html  css  js  c++  java
  • 豪华版飞机大战系列(三)

    本篇来介绍下游戏中的敌人类,既EnemySprite.h和EnemySprite.cpp中关于敌人类中的详细实现。

    游戏中的敌人类主要有四种,三种不同的敌机和炸弹从上面随机的落下来。同一时候每一个敌人都有自己的生命值。当生命值为0后会被从游戏中移除。

    看一下敌人信息的头文件:EnemyInfo.h

    #pragma once
    
    const int ENEMY1_MAXLIFE=3;
    const int ENEMY2_MAXLIFE=5;
    const int ENEMY3_MAXLIFE=10;
    
    const int ENEMY1_SCORE=1;
    const int ENEMY2_SCORE=6;
    const int ENEMY3_SCORE=30;
    
    enum EnemyType
    {
    	Enemy1 = 1,
    	Enemy2,
    	Enemy3,
    	Enemy4,
    };
    
    这个文件里主要设置了枚举类型来差别不同的敌人,同一时候设置了得人的生命数和每一个敌人的分数,定义常量能够方便程序的维护。

    接下来看下EnemySprite.h头文件:

    #include "cocos2d.h"
    #include "EnemyInfo.h"
    
    USING_NS_CC;
    class EnemySprite : public Node
    {
    public:
    	EnemySprite();//构造函数
    	~EnemySprite();//析构函数
    	virtual bool init();//初始化函数
    	CREATE_FUNC(EnemySprite);//create函数宏定义,系统已经实现
    
    public:
    	void setEnemyByType(EnemyType enType);//设置敌人的种类
    
    	Sprite* getSprite();//取得已经创建的敌人
    	int getLife();//获取生命值
    	void loseLife();//被子弹击中后生命值降低
    	Rect getBoundingBox();//取得敌人的外包装矩形
    	Point getcurPoint();//取得敌人的位置
    
    private:
    	Sprite *pEnemySprite;
    	int nLife;
    };

    上述中的函数都做了具体的凝视,接下来看EnemySprite.cpp文件里的各种实现:

    #include "EnemySprite.h"
    
    EnemySprite::EnemySprite() {
    }
    
    EnemySprite::~EnemySprite() {
    }
    
    /**
     * 依据敌机类型来创建不同的敌机
     */
    void EnemySprite::setEnemyByType(EnemyType enType) {
    	switch (enType) {
    	case Enemy1:
    		pEnemySprite = Sprite::createWithSpriteFrame(SpriteFrameCache::getInstance()->getSpriteFrameByName("n1.png"));
    		nLife = ENEMY1_MAXLIFE;
    		break;
    	case Enemy2:
    		pEnemySprite = Sprite::createWithSpriteFrame(SpriteFrameCache::getInstance()->getSpriteFrameByName("n2.png"));
    		nLife = ENEMY2_MAXLIFE;
    		break;
    	case Enemy3:
    		pEnemySprite = Sprite::createWithSpriteFrame(SpriteFrameCache::getInstance()->getSpriteFrameByName("n3.png"));
    		nLife = ENEMY2_MAXLIFE;
    		break;
    	case Enemy4:
    		pEnemySprite = Sprite::createWithSpriteFrame(SpriteFrameCache::getInstance()->getSpriteFrameByName("n_boss.png"));
    		nLife = ENEMY3_MAXLIFE;
    		break;
    	default:
    		return;
    		break;
    	}
    
    	this->addChild(pEnemySprite);
    	pEnemySprite->setScale(0.6f);
    	Size winSize = Director::getInstance()->getWinSize();
    	Size enemySize = pEnemySprite->getContentSize();
    	//设置敌机随机出现的位置
    	int minX = enemySize.width / 2;
    	int maxX = winSize.width - enemySize.width / 2;
    	int rangeX = maxX - minX;
    	int actualX = (rand() % rangeX) + minX;
    
    	this->setPosition(Point(actualX, winSize.height + enemySize.height / 2));
    }
    
    bool EnemySprite::init() {
    	bool pRet = true;
    	if (!Node::init()) {
    		pRet = false;
    	}
    	return pRet;
    }
    /**
     * 取得创建的敌机精灵
     */
    Sprite* EnemySprite::getSprite() {
    	return pEnemySprite;
    }
    /**
     * 取得生命值
     */
    int EnemySprite::getLife() {
    	return nLife;
    }
    /**
     * 生命值降低。每次被击中家少0.5
     */
    void EnemySprite::loseLife() {
    	nLife = nLife - 0.5;
    }
    /**
     * 取得如今的位置
     */
    Point EnemySprite::getcurPoint() {
    	return this->getPosition();
    }
    
    /**
     * 获取外包装矩形
     */
    Rect EnemySprite::getBoundingBox() {
    	Rect rect = pEnemySprite->boundingBox();
    	Point pos = this->convertToWorldSpace(rect.origin);
    	Rect enemyRect(pos.x, pos.y, rect.size.width, rect.size.height);
    	return enemyRect;
    }
    

    上述函数的实现都比較简单。并在关键处做了说明,对于精灵图片的获取是用的缓存单例类来获取的,第一次载入图片后缓存到游戏中,能够降低每次都载入图片所带来的性能损失。用缓存类来创建精灵的代码例如以下:

    Sprite::createWithSpriteFrame(SpriteFrameCache::getInstance()->getSpriteFrameByName("n1.png"));


    好了。这篇主要介绍了敌人类的实现,创建好敌人类后就能够在GameLayer中直接调用此文件里已经实现好的函数来创建精灵。使各个文件的功能独立。模块分明,更好的来维护项目。

    下一篇来介绍主角类Plane。




  • 相关阅读:
    python 执行sql得到字典格式数据
    python爬虫 url链接编码成gbk2312格式
    windows环境下elasticsearch安装教程(单节点)
    python SQLServer 存储图片
    爬虫的本质是和分布式爬虫的关系
    requests form data 请求 爬虫
    mysql 删除 binlog 日志文件
    查看mysql数据表的大小
    xshell 连接报错 Disconnected from remote host
    centos 7.3 安装 mysqldb 报错 EnvironmentError: mysql_config not found ERROR: Command errored out with exit status 1: python setup.py egg_info Check the logs for full command output.
  • 原文地址:https://www.cnblogs.com/wzjhoutai/p/7363404.html
Copyright © 2011-2022 走看看