zoukankan      html  css  js  c++  java
  • cocos2dx游戏开发——别踩白块学习笔记(一)——Block类

    一、Block类介绍

    当然啦,Block类在这个游戏里就是必需品= =,因为整体都是由这个搞出来的,所以我们可以把游戏需要实现的功能都放在这里。

    主要有下面这些功能(经典模式):

    1、创建一个Block,以及消除一个Block,还有管理Block的方法。

    2、设置和取出所在的行号。

    3、向下移动的功能。

    二、具体实现。

    1、创建一个Block,以及消除一个Block,还有管理Block的方法。

    首先,管理Block的方法,就是创建一个静态的全局的数组,创建一个就加进数组,消除一个就删除出去。

    (1)创建Block的方法。

      先在Block.h中声明方法:

     static Block* createWithArgs(Color3B color,Size size,string label,float fontSize ,Color4B textColor);
        
     virtual bool initwithArgs(Color3B color,Size size,string label,float fontSize ,Color4B textColor);

         然后呢,在Block.cpp中实现:

    Block* Block::createWithArgs(Color3B color, Size size, std::string label, float fontSize, Color4B textColor)
    {
        auto block = new Block();
        block->initwithArgs(color, size, label, fontSize, textColor);
        block->autorelease();                 //加入自动回收池,由引擎来管理内存。
        
        _blocks->pushBack(block);      //加入数组
        
        return block;
    }
    bool Block::initwithArgs(Color3B color,Size size,string label,float fontSize,Color4B textColor)
    {
        this->Sprite::init();            //一个Block就是一个精灵
        
        this->setContentSize(size);         
      
        this->setAnchorPoint(Point::ZERO);
       
        this->setTextureRect(Rect(0, 0, size.width, size.height));     //设置纹理的大小
        
        this->setColor(color);
        
        auto myLabel = Label::create();            //创建label,主要是开始和结束的Block需要。
        myLabel->setString(label);
        myLabel->setSystemFontSize(fontSize);
        myLabel->setTextColor(textColor);
        this->addChild(myLabel);
        myLabel->setPosition(size.width/2, size.height/2);
        
        return true;
    }

    (2)删除一个Block

    void Block::removeBlock()
    {
        this->removeFromParent();        //从Layer中移除
        _blocks->eraseObject(this);      //从数组中移除。
    }   

    2、设置和读取行号。

    CC_SYNTHESIZE(int, _BlockCol, BlockCol);

    这是引擎为我们封装好的功能,就是用于快速设置接口,功能当然就很简单,就是创建设置和读取_BlockCol的函数。

    3、向下移动的功能。

    void Block::moveDown()
    {
        this->_BlockCol--;     //记录的行号减一
        auto visibleSize = Director::getInstance()->getVisibleSize();
        this->runAction(Sequence::create(MoveTo::create(0.1f, Vec2(getPositionX(), _BlockCol*visibleSize.height/4)),
                                   CallFunc::create([this]()
                                                    {
                                                        if(_BlockCol<0)
                                                            this->removeBlock();    //移除屏幕时删除Block
                                                    }), NULL));
    }

    Block类的简单简历就到此啦~

  • 相关阅读:
    Python基本语法_输入/输出语句详解
    集成骨骼动画Spine的几点经验
    标量 ,数组,hash 引用
    阿里RDS中插入emoji 表情插入失败的解决方案
    Target runtime Apache Tomcat v7.0 is not defined.
    销售行业ERP数据统计分析都有哪些维度?
    mysql 基于时间点恢复
    perl 闭包
    房地产企业营销分析系统建设中的关键性指标是什么?
    Python基本语法_运算符详解
  • 原文地址:https://www.cnblogs.com/BlueMountain-HaggenDazs/p/3909774.html
Copyright © 2011-2022 走看看