zoukankan      html  css  js  c++  java
  • cocos2d-x游戏开发系列教程-坦克大战游戏关卡选择场景的编写上

    下面我们新建一个关卡场景类代码如下:

    class ChoiceScene : public cocos2d::CCLayer
    {
    public :
    	virtual bool init();
    	CREATE_FUNC(ChoiceScene);
    	static cocos2d::CCScene *scene();
    };

    然后我们类似的实现scene和init函数,scene比较简单,代码如下:

    CCScene *ChoiceScene::scene()
    {
    	CCScene *scene = CCScene::create();
    	ChoiceScene *layer = ChoiceScene::create();
    	if (scene && layer)
    	{
    		scene->addChild(layer);
    	}
    
    	return scene;
    }

    然后下面实现init函数:

    	// 1. 初始化父类,并设置Android返回键和菜单键
    	if (!CCLayer::init())
    	{
    		return false;
    	}
    	setKeypadEnabled(true);
    相应的要添加相应函数    virtual void keyBackClicked(void);和virtual void keyMenuClicked(void);


    2.添加一个黑色背景,并进行比例缩放

    CCSize szWin = CCDirector::sharedDirector()->getWinSize();
    	CCSprite *pSprite = CCSprite::create("Black.png");
    	pSprite->setPosition(ccp(szWin.width / 2, szWin.height / 2));
    	CCSize szSprite = pSprite->getContentSize();
    	pSprite->setScaleX(szWin.width / szSprite.width);
    	pSprite->setScaleY(szWin.height / szSprite.height);
    	this->addChild(pSprite, 0);


    3.设置开始游戏、上一关,下一关按钮以及关卡数显示的图片
    以及设置他们的缩放比例和位置

    	const char *szImgs[4] = { "paddle/btn_play.png", "paddle/btn_rewind.png",
    		"paddle/btn_fast_forward.png", "fonts/fps_images.png" };
    	float fSettings[4][4] = {
    		{ 20.0f / 480, 16.0f / 320, 280.0f / 480, 160.0f / 320 },
    		{ 20.0f / 480, 16.0f / 320, 200.0f / 480, 160.0f / 320 },
    		{ 20.0f / 480, 16.0f / 320, 240.0f / 480, 160.0f / 320 },
    		{ 20.0f / 480, 22.0f / 320, 280.0f / 480, 172.0f / 320 }
    	};


    4.分别对开始游戏,上一关,下一关按钮的图片加载上来显示到合适位置

    	for (int i = 0; i < 3; ++i)
    	{
    		float* fSetting = fSettings[i];
    		CCTexture2D* paddleTexture = CCTextureCache::sharedTextureCache()->addImage(szImgs[i]);
    		CCSprite* pPaddle = CCSprite::createWithTexture(paddleTexture);
    		CCSize szBtn = pPaddle->getContentSize();
    		pPaddle->setScaleX(szWin.width / szBtn.width * fSetting[0]);
    		pPaddle->setScaleY(szWin.height / szBtn.height * fSetting[1]);
    		pPaddle->setPosition(ccp(szWin.width * fSetting[2], szWin.height * fSetting[3]));
    		addChild(pPaddle);
    	}

    5.对现实关卡的数字进行操作,设置显示数字为1,
    设置锚点,设置缩放,设置位置已经颜色,

    	int i = 3;
    	ccColor3B color = { 0, 0, 0 };
    	float* fSetting = fSettings[i];
    	CCLabelAtlas* label1 = CCLabelAtlas::create("1", szImgs[i], 16, 32, '.');
    
    	CCSize sz = label1->getContentSize();
    	label1->setAnchorPoint(ccp(0.5f, 0.5f));
    	label1->setScaleX(szWin.width / sz.width * fSetting[0]);
    	label1->setScaleY(szWin.height / sz.height * fSetting[1]);
    	label1->setPosition(ccp(szWin.width * fSetting[2], szWin.height * fSetting[3]));
    	label1->setColor(color);
    	addChild(label1, 0);

    这些准备好了后我们回到开始场景,开始设置开始按钮点击的相应函数,

    进入HelloWorld.cpp修改以下函数:

    void HelloWorld::menuPlayGameCallback(CCObject* pSender)
    {
    	//开始菜单被点击时调用
    	CCScene* pScene = ChoiceScene::scene();
    	CCDirector::sharedDirector()->pushScene(pScene);
    	return;
    }

    然后编译运行,点击开始界面中的“play game”,则进入以下界面:



    完整代码下载地址:

    http://download.csdn.net/detail/yincheng01/6721463

  • 相关阅读:
    以相同类型的一个对象初始化另一个对象
    java之StringBuilder类详解
    java之StringBuffer类详解
    jquery在线引用地址
    java之抽象类
    Oracle动态执行表不可访问
    libvirt-qemu-TLS加密虚拟机传输实例分析
    查看系统是虚拟机还是物理机
    WorkStation 虚拟机迁移到 ESXi
    Django入门------常见问题
  • 原文地址:https://www.cnblogs.com/new0801/p/6177363.html
Copyright © 2011-2022 走看看