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

posted @ 2014-09-02 15:04  Blue Mountain  阅读(629)  评论(0编辑  收藏  举报