小说网 找小说 无限小说 烟雨红尘 幻想小说 酷文学 深夜书屋

cocos2d-x游戏开发系列教程-坦克大战游戏之虚拟手柄的显示

上篇文章我们有了坦克,但是没有手柄,无法控制坦克。

1.这篇我们编写虚拟手柄来控制坦克。头文件大致内容如下:

#define RES_PADDLE_LEFT			"paddle/left.png"
#define RES_PADDLE_LEFT_PRESS	"paddle/left_press.png"
#define RES_PADDLE_RIGHT		"paddle/right.png"
#define RES_PADDLE_RIGHT_PRESS	"paddle/right_press.png"
#define RES_PADDLE_UP			"paddle/top.png"
#define RES_PADDLE_UP_PRESS		"paddle/top_press.png"
#define RES_PADDLE_DOWN			"paddle/buttom.png"
#define RES_PADDLE_DOWN_PRESS	"paddle/buttom_press.png"
#define RES_PADDLE_FIRE			"paddle/fire.png"
#define RES_PADDLE_FIRE_PRESS	"paddle/fire_press.png"

class Panel : public CCLayer
{
public:
	virtual bool init();
	CREATE_FUNC(Panel);
protected:
	Paddle* m_pPaddleUp;
	Paddle* m_pPaddleDown;
	Paddle* m_pPaddleLeft;
	Paddle* m_pPaddleRight;
	Paddle* m_pPaddleFire;
};

上面定义了上下左右按钮的图片,还记得我们写关卡选择按钮的Paddle吧,

下面定义了五个Paddle分别对应上下左右开火按钮。


2.我们在初始化函数init中,加载按钮图片,然后设置按钮图片对应的坐标。

代码如下:

bool Panel::init()
{
	CCLayer::init();

	//加载手柄按钮所需的图片
	CCTexture2D* paddleTexture = CCTextureCache::sharedTextureCache()->addImage(RES_PADDLE_UP);
	m_pPaddleUp = Paddle::paddleWithTexture(paddleTexture);

	paddleTexture = CCTextureCache::sharedTextureCache()->addImage(RES_PADDLE_DOWN);
	m_pPaddleDown = Paddle::paddleWithTexture(paddleTexture);

	paddleTexture = CCTextureCache::sharedTextureCache()->addImage(RES_PADDLE_LEFT);
	m_pPaddleLeft = Paddle::paddleWithTexture(paddleTexture);

	paddleTexture = CCTextureCache::sharedTextureCache()->addImage(RES_PADDLE_RIGHT);
	m_pPaddleRight = Paddle::paddleWithTexture(paddleTexture);

	paddleTexture = CCTextureCache::sharedTextureCache()->addImage(RES_PADDLE_FIRE);
	m_pPaddleFire = Paddle::paddleWithTexture(paddleTexture);

	CCSize size = getContentSize();

	//设置手柄上下左右按钮以及开火按钮的位置
	int localX[5] = { size.width*4.5f / 26, size.width*4.5f / 26, size.width*2.3f / 26, 
		size.width*6.7f / 26, size.width*22.0f / 26 };
	int localY[5] = { size.height*6.7 / 26, size.height*2.3 / 26, size.height*4.5f / 26, 
		size.height*4.5f / 26, size.height*5.0 / 26 };

	Paddle* paddle[] = { m_pPaddleUp, m_pPaddleDown, m_pPaddleLeft, m_pPaddleRight, m_pPaddleFire };
	for (int i = 0; i<sizeof(paddle) / sizeof(paddle[0]); ++i)
	{
		addChild(paddle[i]);
		paddle[i]->setPosition(ccp(localX[i], localY[i]));
		CCSize szPaddle = paddle[i]->getContentSize();
		paddle[i]->setScale(size.height * 4.5f / 26 / szPaddle.height);
	}

	return true;
}

3.最后再写一个函数获取按钮的状态,这样就知道当前按下了那个按钮:

在之前我们定义一组命令,按到那个按钮就返回什么命令:

enum enumOrder
{
	cmdNothing,
	cmdGoUP,
	cmdGoDown,
	cmdGoLeft,
	cmdGoRight,
	cmdFire
};

4.再添加一个enumOrder getOrder();函数,实现如下:

enumOrder Panel::getOrder()
{
	enumOrder order = cmdNothing;
	if (m_pPaddleUp->getstate() == kPaddleStateGrabbed)
		order = cmdGoUP;
	else if (m_pPaddleDown->getstate() == kPaddleStateGrabbed)
		order = cmdGoDown;
	else if (m_pPaddleLeft->getstate() == kPaddleStateGrabbed)
		order = cmdGoLeft;
	else if (m_pPaddleRight->getstate() == kPaddleStateGrabbed)
		order = cmdGoRight;
	else if (m_pPaddleFire->getstate() == kPaddleStateGrabbed)
		order = cmdFire;

	return order;
}

5,在ChoiceScene场景中添加成员变量Panel* mLayerPanel;,

然后在 ChoiceScene的init函数下面加上两行代码即可显示虚拟手柄:

	//添加虚拟手柄的显示
	mLayerPanel = Panel::create();
	addChild(mLayerPanel, 3);

显示效果图如下:



完整代码下载地址:

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

posted on 2013-12-21 15:50  牛栏山1  阅读(126)  评论(0编辑  收藏  举报

导航