zoukankan      html  css  js  c++  java
  • cocos2dx游戏开发——捕鱼达人mini版学习笔记(一)——FishAchor的搭建

    一、创建文件·

            FishAchor.h还有FishAchor.cpp。

       主要就是创建每种鱼的类,方便以后的取用~,很多是重复性的操作,然后我们是mini版,暂时也就加入大概6钟鱼就好= =,然后我们现在就来搭建~。

    二、鱼的基类

    1、定义~

    class FishActor : public Sprite  //继承精灵类,然后作为各种鱼的基类,有最基本的属性
    {
    public:
        enum class FishActorType //首先在这里需要得知,鱼的类型 
        {
            SmallFish,
            AngelFish,
            Croaker,
            Amphiprion,
            Bream,
            MarlinsFish,
        };
    
        /** Speed property of the fishes */
        CC_SYNTHESIZE(float, speedX, SpeedX);     //速度~
        CC_SYNTHESIZE(float, speedY, SpeedY);
    
        FishActorType fishType;       //鱼的类型
    
        /** Create the fish by their types */
        static FishActor* createWithType(FishActorType fishType); //创建方法~
    
        /** Play the death animation */
        virutal Animate* playDeathAnimation();      //鱼死亡时的动画~
    
        /** Update the fish movement */
        void updateFishMovement(float dt);     //鱼出现的动画~
    
        /** Activate the fish movement */
        virutal void activateFishMovement();         //激活
    
    protected:
        CC_SYNTHESIZE(float, fishScore, FishScore);     //鱼的得分~
    
    };

             这个主要是作为一个大的接口类,方便用同一个接口,创建不同的鱼,节约重复性的代码操作~。具体的实现呢~

    2、实现~

    (1)创建方法~

    FishActor* FishActor::createWithType(FishActorType fishType)
    {
    
        FishActor *fish=nullptr;             //创建一个空指针
    
        //Create the fishes by the fish type
        switch (fishType)              //根据类型进行创建
        {
        case FishActorType::SmallFish:
    
            fish = SmallFishActor::create();
            break;
        case FishActorType::AngelFish:
    
            fish = AngelFishActor::create();
            break;
        case FishActorType::Croaker:
    
            fish = CroakerActor::create();
            break;
        case FishActorType::Amphiprion:
    
            fish = AmphiprionActor::create();
            break;
    
        case FishActorType::Bream:
    
            fish = BreamActor::create();
            break;
    
        case FishActorType::MarlinsFish:
    
            fish = MarlinsFishActor::create();
            break;
    
        default:
            break;
        }
    
        return fish;
    }

    (2)鱼移动的movement

    void FishActor::updateFishMovement(float delta)
    {
        auto direction = rand() % 3 - 1.0f;
        auto shiftX = (rand() % 5 + 1)*direction;
        auto shiftY = (rand() % 5 + 1)*direction;
    
        setSpeedX(shiftX == 0 ? 1 : shiftX);
        setSpeedY(shiftY == 0 ? 1 : shiftY);
    
        auto rotation = -atan2(shiftY, shiftX);
        this->setRotation(rotation*180.0f / 3.14f + 180.0f);
    }

    3、其中一种鱼的创建~

    (1)类的声明~

    class AngelFishActor : public FishActor
    {
    
    public:
    
        bool init();
    
        CREATE_FUNC(AngelFishActor);
        Animate* playDeathAnimation();      //每个鱼敲掉的动画不一样~
        void activateFishMovement();
    };

    (2)具体实现

    1、init()

    bool SmallFishActor::init()
    {
    
        FishActor::init();    //一般不会不成功的= =,是继承Sprite里面的创建~
    
        setSpeedX(1.0f);     //设置速度~
        setSpeedY(1.0f);
    
        setFishScore(1.0f);      设置得分~
    
        fishType = FishActorType::SmallFish;
    
        //Read the swimming animations textures
        auto fishes = Vector<SpriteFrame*>();//动态数组容器
        fishes.pushBack(SpriteFrameCache::getInstance()->getSpriteFrameByName("SmallFish_actor_001.png"));
        fishes.pushBack(SpriteFrameCache::getInstance()->getSpriteFrameByName("SmallFish_actor_002.png"));
        fishes.pushBack(SpriteFrameCache::getInstance()->getSpriteFrameByName("SmallFish_actor_003.png"));
        fishes.pushBack(SpriteFrameCache::getInstance()->getSpriteFrameByName("SmallFish_actor_004.png"));
    
    
        //Create swimming animation
        auto fishAnimation = Animation::createWithSpriteFrames(fishes, 0.1);
        auto fishAnimate = Animate::create(fishAnimation);
    
        //Run the swiming action forever
        runAction(RepeatForever::create(fishAnimate));
    
    
        return true;
    }

    2、鱼移动的动画创建

    void SmallFishActor::activateFishMovement()
    {
        schedule(schedule_selector(FishActor::updateFishMovement), 3 + rand() % 2); //调用基类函数~
    }

    3、死掉的动画~

    Animate* SmallFishActor::playDeathAnimation()
    {
    
        //Read the death anmtions textures
        auto deathFrames = Vector<SpriteFrame*>();  //创建一个数组
        deathFrames.pushBack(SpriteFrameCache::getInstance()->getSpriteFrameByName("SmallFish_death_001.png"));
        deathFrames.pushBack(SpriteFrameCache::getInstance()->getSpriteFrameByName("SmallFish_death_002.png"));
        deathFrames.pushBack(SpriteFrameCache::getInstance()->getSpriteFrameByName("SmallFish_death_003.png"));
        deathFrames.pushBack(SpriteFrameCache::getInstance()->getSpriteFrameByName("SmallFish_death_004.png"));
        deathFrames.pushBack(SpriteFrameCache::getInstance()->getSpriteFrameByName("SmallFish_death_005.png"));
    
        //Create the death anmation
        auto deathAnimation = Animation::createWithSpriteFrames(deathFrames, 0.1);//设置播放的时间间隔~
        auto deathAnimate = Animate::create(deathAnimation);   返回创建好的动画~
    return deathAnimate;
    }

    三、七说八说~

         图片资源已经上传的github~:https://github.com/Wenne/FishingMini

  • 相关阅读:
    假如
    Find the peace with yourself
    Sep 15th 2018
    Sep 10th 2018
    third party sales process 继续说
    成功设置open live writer
    sublime text2 基本配置及结合Python 环境
    Compmgmtlauncher.exe问题解决方法
    nginx 代理服务器
    vmware之linux不重启添加虚拟硬盘
  • 原文地址:https://www.cnblogs.com/BlueMountain-HaggenDazs/p/3951491.html
Copyright © 2011-2022 走看看