Cocos2d-x简单游戏<植物大战僵尸>代码实现|第二部分:菜单场景<后续会提供源码下载链接>

这个植物大战僵尸的小游戏Demo 虽然下,但是基本包括了:

  1.植物的选取、僵尸的攻击、发射子弹;

  2.太阳的生成、碰撞检测等功能;

 

 

 第一部分:Cocos2d-x简单游戏<植物大战僵尸>代码实现|第一部分:开始场景

 第二部分:Cocos2d-x简单游戏<植物大战僵尸>代码实现|第二部分:菜单场景

 第三部分:Cocos2d-x简单游戏<植物大战僵尸>代码实现|第三部分:通关场景

 第四部分:Cocos2d-x简单游戏<植物大战僵尸>代码实现|第四部分:通关失败场景

 第五部分:Cocos2d-x简单游戏<植物大战僵尸>代码实现|第五部分:公用类

 第六部分:Cocos2d-x简单游戏<植物大战僵尸>代码实现|第六部分:植物类

 第七部分:Cocos2d-x简单游戏<植物大战僵尸>代码实现|第七部分:僵尸类

 第八部分:Cocos2d-x简单游戏<植物大战僵尸>代码实现|第八部分:子弹类

 第九部分<A>Cocos2d-x简单游戏<植物大战僵尸>代码实现|第九部分:游戏场景GameScene.h

 第九部分<B>Cocos2d-x简单游戏<植物大战僵尸>代码实现|第九部分:游戏场景GameScene.cpp



/*

 给场景主要用于选择进入游戏界面的

 ,这里笔者只写了 游戏菜单的实现功能

 */

#ifndef __MyTest__MenuScene__

#define __MyTest__MenuScene__


#include <iostream>

#include "CommonHeader.h"


class MenuScene:public CCLayer{

    

    

public:

    MenuScene();

    ~MenuScene();

   virtualbool init();

    CREATE_FUNC(MenuScene);

    SCENE_FUNC(MenuScene);

    //冒险方法

   void adventureMode();

};


#endif /* defined(__MyTest__MenuScene__) */






#include "MenuScene.h"

#include "GameScene.h"

#include "SimpleAudioEngine.h"

using namespace CocosDenshion;


boolMenuScene::init(){

    

    INIT_CCLAYER_FUNC;

    

    //获取设备尺寸

    CCSize size =CCDirector::sharedDirector()->getWinSize();

    //添加场景

   CCSprite* pSprite =CCSprite::create("main_background.png");

    pSprite->setScale(2.0f);

    pSprite->setPosition(ccp(size.width/2, size.height/2) );

   this->addChild(pSprite,0);

    

    //创建成就图片

    CCMenuItemImage *sucessImage =CCMenuItemImage::create("chengjiu.png","chengjiu1.png");

    sucessImage->setScale(1.5f);

    sucessImage->setPosition(ccp(size.width/2-80,size.height/2-80));

    

    //创建点击图片按钮-并添加点击事件

    CCMenuItemImage *imageBtn1 =CCMenuItemImage::create("select10.png","select11.png");

    imageBtn1->setScale(2.0f);

    imageBtn1->setTarget(this,menu_selector(MenuScene::adventureMode));

    imageBtn1->setPosition(ccp(size.width/2+200,size.height/2+200));

    

   //

    CCMenuItemImage *imageBtn2 =CCMenuItemImage::create("select20.png","select21.png");

    imageBtn2->setScale(2.0f);

    imageBtn2->setPosition(ccp(size.width/2+200,size.height/2+90));

    

    CCMenuItemImage* imageBtn3 =CCMenuItemImage::create("select30.png","select31.png");

    imageBtn3->setScale(2.0f);

    imageBtn3->setPosition(ccp(size.width/2+200,size.height/2));

    

    

    CCMenuItemImage* imageBtn4 =CCMenuItemImage::create("select40.png","select41.png");

    imageBtn4->setScale(2.0f);

    imageBtn4->setPosition(ccp(size.width/2+190,size.height/2-90));

    

    CCMenuItemImage* imageBtn5 =CCMenuItemImage::create("SelectorScreen_Almanac.png","SelectorScreen_AlmanacHighlight.png");

    imageBtn5->setScale(1.5f);

    imageBtn5->setPosition(ccp(size.width/2+70,size.height/2-160));

    

    CCMenuItemImage* imageBtn6 =CCMenuItemImage::create("shop0.png","shop1.png");

    imageBtn6->setScale(1.5f);

    imageBtn6->setPosition(ccp(size.width/2+370,size.height/2-150));

    

   CCMenu* menu =CCMenu::create(sucessImage, imageBtn1, imageBtn2, imageBtn3, imageBtn4, imageBtn5, imageBtn6,NULL);

    menu->setPosition(CCPointZero);

   this->addChild(menu);

    


    return true;

    

}

MenuScene::MenuScene(){



}

MenuScene::~MenuScene(){




}

voidMenuScene ::adventureMode(){


    //切换到游戏界面

    CCTransitionCrossFade* fade =CCTransitionCrossFade::create(1,GameScene::scene());

    CCDirector::sharedDirector()->replaceScene(fade);


}







  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
植物大战僵尸游戏需要掌握cocos2d-x引擎的基础知识,包括场景、图层、精灵、动画等,同时还需要了解游戏的规则和逻辑。下面是一个简单植物大战僵尸游戏实现思路: 1. 创建游戏场景游戏图层 2. 加载游戏背景、植物、僵尸等资源 3. 实现植物的种植和僵尸的出现 4. 实现植物攻击僵尸和僵尸攻击植物 5. 实现游戏结束和胜利的判定 具体实现细节可以参考下面的代码示例: 1. 创建游戏场景游戏图层 ``` auto scene = Scene::create(); auto layer = Layer::create(); scene->addChild(layer); ``` 2. 加载游戏资源 ``` auto bg = Sprite::create("bg.png"); auto sunflower = Sprite::create("sunflower.png"); auto zombie = Sprite::create("zombie.png"); ``` 3. 实现植物的种植和僵尸的出现 ``` auto addSunflower = CallFunc::create([&](){ auto sunflower = Sprite::create("sunflower.png"); sunflower->setPosition(Vec2(100, 100)); layer->addChild(sunflower); }); auto addZombie = CallFunc::create([&](){ auto zombie = Sprite::create("zombie.png"); zombie->setPosition(Vec2(500, 100)); layer->addChild(zombie); }); auto sequence = Sequence::create(addSunflower, DelayTime::create(5.0f), addZombie, nullptr); layer->runAction(RepeatForever::create(sequence)); ``` 4. 实现植物攻击僵尸和僵尸攻击植物 ``` auto sunflowerAttack = CallFunc::create([&](){ // 植物攻击 auto bullet = Sprite::create("bullet.png"); bullet->setPosition(sunflower->getPosition()); layer->addChild(bullet); auto move = MoveTo::create(1.0f, zombie->getPosition()); auto remove = RemoveSelf::create(); bullet->runAction(Sequence::create(move, remove, nullptr)); }); auto zombieAttack = CallFunc::create([&](){ // 僵尸攻击 auto attack = Sprite::create("attack.png"); attack->setPosition(zombie->getPosition()); layer->addChild(attack); auto remove = RemoveSelf::create(); attack->runAction(Sequence::create(DelayTime::create(1.0f), remove, nullptr)); }); auto sunflowerSequence = Sequence::create(sunflowerAttack, DelayTime::create(1.0f), nullptr); sunflower->runAction(RepeatForever::create(sunflowerSequence)); auto zombieSequence = Sequence::create(zombieAttack, DelayTime::create(1.0f), nullptr); zombie->runAction(RepeatForever::create(zombieSequence)); ``` 5. 实现游戏结束和胜利的判定 ``` bool isGameOver = false; bool isGameWin = false; auto checkGameOver = CallFunc::create([&](){ if (isGameOver) { // 游戏结束 // ... } }); auto checkGameWin = CallFunc::create([&](){ if (isGameWin) { // 游戏胜利 // ... } }); auto gameOverSequence = Sequence::create(DelayTime::create(10.0f), checkGameOver, nullptr); auto gameWinSequence = Sequence::create(DelayTime::create(10.0f), checkGameWin, nullptr); layer->runAction(gameOverSequence); layer->runAction(gameWinSequence); ``` 以上就是一个简单植物大战僵尸游戏实现思路,具体实现还需要根据自己的需求进行调整和完善。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GFanStudio-LeeSir

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值