cocos2dx -- 学习笔记 利用UIButton制作虚拟按键

这篇博客讲述了如何在cocos2dx项目中利用UIButton实现虚拟按键,特别是上下左右方向键,以达到按下持续触发,松开停止的效果。由于CCMenuImage无法满足这种需求,博主选择了UIButton,详细介绍了UIButton的使用,包括其派生自Widget的特性,以及如何在UILayer中创建和添加触摸事件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天,继续完善自己的小DEMO,要加入一些虚拟按键,首先是,上下左右方向键。

这里需要实现,按下持续走,松开则停止的效果。

尝试着用CCMenuImage做,可惜CCMenuImage只支持按下再弹起后,的事件处理。无法对按下到抬起之间的这段时间进行控制。

UIButton刚好可以满足这个需求。

UIButton是cocos2dx扩展里的UI控件类, 派生自Widget。

使用方法和CCMenuImage类似, 每个UI控件必须放在一个UILayer中,也就是说,UILayer就是UI控件的容器了。


创建的话类似下面:

	Button *m_pUpBtn = Button::create();
	m_pUpBtn->setTouchEnabled( true );
	m_pUpBtn->loadTextures( "DirKeyNor.png", "DirKeySel.png", "" );
	m_pUpBtn->setPosition( 
		ccp( 180.0f, 160.0f + m_pUpBtn->getContentSize().height/2 ) );
	m_pUpBtn->addTouchEventListener( 
		this, toucheventselector( DirPanel::OnDirUp ) );
	uiLayer->addWidget( m_pUpBtn );
顺带一提,其实UIButton这个类并不存在。
typedef cocos2d::ui::Button UIButton;

其实它是源自typedef而已,真正的控件类是Button。


有了Button之后,我们只需要创建四个Button控件,然后加入到UILayer中,当然,UILayer也许要加入到节点当中。然后为每个按钮添加一个触摸的响应事件即可。

形式类似这样:

void DirPanel::OnDirUp( cocos2d::CCObject *obj, cocos2d::ui::TouchEventType type )
{
	switch ( type )
	{
	case TOUCH_EVENT_BEGAN:
		{
			m_pHero->setDir( DIR_UP );
		}
		break;

	case TOUCH_EVENT_ENDED:
		{
			m_pHero->setDir( DIR_NONE );
		}
		break;
	}
}


有了以上这些,虚拟按键就手到擒来了,当然,为了配合虚拟按键需要对应的控制人物移动的接口。

至此,虚拟按键就有着落啦。


效果图如图:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值