zoukankan      html  css  js  c++  java
  • 【cocos2d-x 3.7 飞机大战】 决战南海I (三) 敌机实现

            如今来实现敌机类

            敌机和我方飞机相似,具有生命值、能够发射子弹。而且有自己的运动轨迹。事实上能够为它们设计一个共同的基类,这样能够更方便扩展。


    不同的敌机,应设置不同的标识、属性

    // 敌机生命值
    const int ENEMY1_MAXLIFE = 1;
    const int ENEMY2_MAXLIFE = 2;
    const int ENEMY3_MAXLIFE = 5;
    const int ENEMY4_MAXLIFE = 10;
    
    // 敌机分数
    const int ENEMY1_SCORE = 1;
    const int ENEMY2_SCORE = 6;
    const int ENEMY3_SCORE = 20;
    const int ENEMY4_SCORE = 50;


    // 敌机类型
    enum EnemyType
    {
    	Enemy1 = 1,
    	Enemy2,
    	Enemy3,
    	Enemy4,
    };



    头文件里的主要函数
    void setEnemyByType(EnemyType enType);
    Sprite* getSprite();
    
    int getLife();
    void loseLife();
    Rect getBoundingBox();


    函数的实现

    void Enemy::setEnemyByType(EnemyType enType)
    {
    	switch (enType)
    	{
    	case Enemy1:
    		pEnemySprite = Sprite::createWithSpriteFrame(SpriteFrameCache::getInstance()->getSpriteFrameByName("enemy1.png"));
    		nLife = ENEMY1_MAXLIFE;
    		break;
    	case Enemy2:
    		pEnemySprite = Sprite::createWithSpriteFrame(SpriteFrameCache::getInstance()->getSpriteFrameByName("enemy2.png"));
    		nLife = ENEMY2_MAXLIFE;
    		break;
    	case Enemy3:
    		pEnemySprite = Sprite::createWithSpriteFrame(SpriteFrameCache::getInstance()->getSpriteFrameByName("enemy3.png"));
    		nLife = ENEMY3_MAXLIFE;
    		break;
    	case Enemy4:
    		pEnemySprite = Sprite::createWithSpriteFrame(SpriteFrameCache::getInstance()->getSpriteFrameByName("enemy4.png"));
    		nLife = ENEMY4_MAXLIFE;
    		break;
    	default:
    		return;
    		break;
    	}
    
    	this->addChild(pEnemySprite);
    	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;
    
    	// 设置敌机Node方位 Node包括Sprite
    	this->setPosition(Point(actualX, winSize.height - enemySize.height / 2));
    }
    
    bool Enemy::init()
    {
    	bool pRet = true;
    	if (!Node::init())
    	{
    		pRet = false;
    	}
    
    	return pRet;
    }
    
    Sprite* Enemy::getSprite()
    {
    	return pEnemySprite;
    }
    
    int Enemy::getLife()
    {
    	return nLife;
    }
    
    void Enemy::loseLife()
    {
    	--nLife;
    }
    
    Rect Enemy::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;
    }


    依据敌机类型,绑定对应的图片和生命值,对于我方飞机。假设想依据生命值来设定不同的飞机样式,也能够通过此类方法。




  • 相关阅读:
    2019-2020-2 网络对抗技术 20175318 Exp0 kali Linux系统的安装(雾
    手动编译 TCP BBR v2 Alpha/Preview 内核
    Adobe Flash Player解除限制版
    ABBYY FineReader 15.0.18.1494 Corporate Multilingual破解
    易语言5.9精简学习增强版
    Debian9 快速开启 TCP BBR 实现高效单边加速
    ucosii-2(选做)
    Ubuntu 18.04/18.10快速开启Google BBR的方法
    基于 Nginx 的 v2+websocket+tls 域名伪装
    Google TCP升级版加速:BBR 2.0对比BBR Plus
  • 原文地址:https://www.cnblogs.com/mfmdaoyou/p/7183797.html
Copyright © 2011-2022 走看看