天涯明月刀ol|天涯明月刀迅雷下载
  1. 當前所在位置:
  2. 首頁
  3. 公告

基本的捕魚游戲設計思路——魚

2018-12-18 admin
今天講捕魚游戲里魚的部分,也是比較關鍵的一部分。
 
一步一步來,先分析游戲,首先魚是從屏幕外生成,然后它有個移動的動作,而且分為不同的類型。
 
然后就可以進入代碼部分,首先設置一個計時器,控制時間生成魚,而魚分種類,所以就用到隨機函數,隨機輸出一個值,傳入switch語句,從而生成不同的魚。
 
<span style="font-size:18px;">void GameScene::xiaoyuupdate(float dt){
Size visibleSize = Director::getInstance()->getVisibleSize();
int s = rand() % 7;       //隨機的s用于傳入switch語句
auto move = MoveTo::create(8, Vec2(visibleSize.width + 650, rand() % 768));     //下面做兩個移動的動作move1和move
auto move1 = MoveTo::create(15, Vec2(-650, rand() % 768));
switch (s){
case 0:
xiaoyu = Sprite::createWithSpriteFrameName("wugui1.png");
xiaoyu->setPosition(Vec2(-xiaoyu->getContentSize().width / 2, rand() % 768));
playanim(0);
xiaoyu->runAction(move);
p = 2;
break;
case 1:
xiaoyu = Sprite::createWithSpriteFrameName("huangyu1.png");
xiaoyu->setPosition(Vec2(-xiaoyu->getContentSize().width / 2, rand() % 768));
playanim(1);
xiaoyu->runAction(move);
p = 1;
break;
case 2:
xiaoyu = Sprite::createWithSpriteFrameName("dly01.png");
xiaoyu->setPosition(Vec2(visibleSize.width + xiaoyu->getContentSize().width / 2, rand() % 768));
playanim(2);
xiaoyu->runAction(move1);
p = 2;
break;
case 3:
xiaoyu = Sprite::createWithSpriteFrameName("dm01.png");
xiaoyu->setPosition(Vec2(visibleSize.width + xiaoyu->getContentSize().width / 2, rand() % 768));
playanim(3);
p = 2;
xiaoyu->runAction(move1);
break;
default:
break;
}
addChild(xiaoyu);
}</span>
 
四只不同的魚類就可以添加到場景了,然后就是魚的動作,上面只是有個移動,如果沒有動畫的魚就會看起來很尷尬,所以上面看不懂的playanim就是定義的一個動畫函數,傳入一個int型常量,就是魚的動畫播放動畫,看過前一章的就知道也是利用序列幀動畫完成的魚的動作。
<span style="font-size:18px;">void GameScene::playanim(int x){
Size visibleSize = Director::getInstance()->getVisibleSize();
if (x == 0){
Animation* animation1 = Animation::create();
animation1->setDelayPerUnit(0.4f);
animation1->addSpriteFrame(frameCache->getSpriteFrameByName("wugui1.png"));
animation1->addSpriteFrame(frameCache->getSpriteFrameByName("wugui2.png"));
animation1->addSpriteFrame(frameCache->getSpriteFrameByName("wugui3.png"));
animation1->addSpriteFrame(frameCache->getSpriteFrameByName("wugui2.png"));
animation1->addSpriteFrame(frameCache->getSpriteFrameByName("wugui1.png"));
animation1->addSpriteFrame(frameCache->getSpriteFrameByName("wugui2.png"));
animation1->addSpriteFrame(frameCache->getSpriteFrameByName("wugui3.png"));
animation1->addSpriteFrame(frameCache->getSpriteFrameByName("wugui2.png"));
animation1->addSpriteFrame(frameCache->getSpriteFrameByName("wugui1.png"));
Animate* animate1 = Animate::create(animation1);
xiaoyu->runAction(RepeatForever::create(animate1));
}
else if (x == 1){
Animation* animation2 = Animation::create();
animation2->setDelayPerUnit(0.1f);
animation2->addSpriteFrame(frameCache->getSpriteFrameByName("huangyu1.png"));
animation2->addSpriteFrame(frameCache->getSpriteFrameByName("huangyu2.png"));
animation2->addSpriteFrame(frameCache->getSpriteFrameByName("huangyu3.png"));
animation2->addSpriteFrame(frameCache->getSpriteFrameByName("huangyu2.png"));
animation2->addSpriteFrame(frameCache->getSpriteFrameByName("huangyu1.png"));
animation2->addSpriteFrame(frameCache->getSpriteFrameByName("huangyu2.png"));
animation2->addSpriteFrame(frameCache->getSpriteFrameByName("huangyu3.png"));
animation2->addSpriteFrame(frameCache->getSpriteFrameByName("huangyu2.png"));
animation2->addSpriteFrame(frameCache->getSpriteFrameByName("huangyu1.png"));
Animate* animate2 = Animate::create(animation2);
xiaoyu->runAction(RepeatForever::create(animate2));
}
else if (x == 2){
Animation* animation3 = Animation::create();
animation3->setDelayPerUnit(0.1f);
animation3->addSpriteFrame(frameCache1->getSpriteFrameByName("dly01.png"));
animation3->addSpriteFrame(frameCache1->getSpriteFrameByName("dly02.png"));
animation3->addSpriteFrame(frameCache1->getSpriteFrameByName("dly03.png"));
animation3->addSpriteFrame(frameCache1->getSpriteFrameByName("dly04.png"));
animation3->addSpriteFrame(frameCache1->getSpriteFrameByName("dly05.png"));
animation3->addSpriteFrame(frameCache1->getSpriteFrameByName("dly06.png"));
animation3->addSpriteFrame(frameCache1->getSpriteFrameByName("dly07.png"));
animation3->addSpriteFrame(frameCache1->getSpriteFrameByName("dly08.png"));
animation3->addSpriteFrame(frameCache1->getSpriteFrameByName("dly09.png"));
animation3->addSpriteFrame(frameCache1->getSpriteFrameByName("dly10.png"));
Animate* animate3 = Animate::create(animation3);
xiaoyu->runAction(RepeatForever::create(animate3));
}
else if (x == 3){
Animation* animation5 = Animation::create();
animation5->setDelayPerUnit(0.1f);
animation5->addSpriteFrame(frameCache1->getSpriteFrameByName("dm01.png"));
animation5->addSpriteFrame(frameCache1->getSpriteFrameByName("dm02.png"));
animation5->addSpriteFrame(frameCache1->getSpriteFrameByName("dm03.png"));
animation5->addSpriteFrame(frameCache1->getSpriteFrameByName("dm04.png"));
animation5->addSpriteFrame(frameCache1->getSpriteFrameByName("dm05.png"));
animation5->addSpriteFrame(frameCache1->getSpriteFrameByName("dm06.png"));
animation5->addSpriteFrame(frameCache1->getSpriteFrameByName("dm07.png"));
animation5->addSpriteFrame(frameCache1->getSpriteFrameByName("dm08.png"));
Animate* animate5 = Animate::create(animation5);
xiaoyu->runAction(RepeatForever::create(animate5));
}
fishVec.pushBack(xiaoyu);   //將魚放進數組
}</span>
那我就不講序列幀動畫了,可以去看前面的博客,最后放進數組也是用于優化游戲。
其實這里也做的不是很好,只是一個簡單的demo,可以給魚添加一些動作,讓它活靈活現的在游戲里,也可以根據自己的愛好或者需要添加東西,嗯,今天就這樣吧。后面還會繼續更新。
--------------------- 
 
捕魚駕到 天涯明月刀ol