cocos2d-x游戏开发系列教程-坦克大战游戏之虚拟手柄控制坦克移动

上篇显示了控制手柄,但是还不能用来控制坦克,

这篇将会讲手柄和坦克的移动结合起来。

1.先在CityScene场景中实现场景的虚函数virtual void onEnter();

onEnter在进入场景后将会被调用,我们在onEnter中设置一个定时器,

游戏每一帧都调用次,这样我们可以在每帧中检测手柄按钮是否被按下,

然后控制坦克的移动,onEnter和update的函数实现如下:

void CityScene::onEnter()
{
	CCLayer::onEnter();
	this->scheduleUpdate();
}

void CityScene::update(float delta)
{
	CCLayer::update(delta);
	//简单的向前运动,测试使用
	mPlayerTank[0]->setPositionY(mPlayerTank[0]->getPositionY()+1);
}

在上面的update函数中,我们为了测试效果,简单的让坦克向前移动。


2.为了能通过控制手柄产生的命令控制坦克移动,我们在Tank类中添加相应命令函数

void command(enumOrder order);,实现函数如下:

void Tank::command(enumOrder order)
{
	float stepX = 0.0f;
	float stepY = 0.0f;

	switch (order)
	{
	case cmdNothing:
		break;
	case cmdGoUP:
		stepY = 1.0f;
		break;
	case cmdGoDown:
		stepY = -1.0f;
		break;
	case cmdGoLeft:
		stepX = -1.0f;
		break;
	case cmdGoRight:
		stepX = 1.0f;
		break;
	case cmdFire:
		break;
	default:
		break;
	}

	setPositionX(getPositionX() + stepX);
	setPositionY(getPositionY() + stepY);
}

4.我们接下来要使坦克响应虚拟手柄的控制,还需要修改第一步中的update。

在update中获取虚拟手柄的命令,然后传入Tank的命令控制函数command中:

void CityScene::update(float delta)
{
	CCLayer::update(delta);
	//将控制面板中的mLayerPanel获取的命令传给坦克
	mPlayerTank[0]->command(mLayerPanel->getOrder());
}

5.我们尝试点击虚拟手柄,可以看到坦克已经可以自由移动了,但是移动的时候坦克方向没有改变,

我们根据移动方向来旋转坦克,使用setRotation,具体实现如下:

void Tank::command(enumOrder order)
{
	float stepX = 0.0f;
	float stepY = 0.0f;
	static float fRotation = 0.0f;

	switch (order)
	{
	case cmdNothing:
		break;
	case cmdGoUP:
		stepY = 1.0f;
		fRotation = 0.0f;
		break;
	case cmdGoDown:
		stepY = -1.0f;
		fRotation = 180.0f;
		break;
	case cmdGoLeft:
		stepX = -1.0f;
		fRotation = 270.0f;
		break;
	case cmdGoRight:
		stepX = 1.0f;
		fRotation = 90.0f;
		break;
	case cmdFire:
		break;
	default:
		break;
	}

	setPositionX(getPositionX() + stepX);
	setPositionY(getPositionY() + stepY);
	setRotation(fRotation);
}

下面用我们的鼠标来控制上下左右可以正常移动了。效果如下:




程序完整代码下载:

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

转载于:https://www.cnblogs.com/new0801/p/6177306.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值