cocos2dx3.X项目重写(三)按钮和跳跃

在cocos2d-x 3.x项目中,文章介绍了如何使用Menu作为按钮,并利用MenuItemImage设置按钮的不同状态及回调函数,特别提到了C++11的拉姆达表达式在闭包函数中的应用。此外,由于Menu缺少长按事件,作者转向使用ControlButton,并详细说明了ControlButton的新增事件处理方式。

/*********************************************************************************

关于换动作的bug
在动作实现函数里有这样一句话
SpriteFrameCache* frameCache1 = SpriteFrameCache::getInstance();
这个用完之后清空掉就可以了,否则下次用同样的代码执行别的动作时,SpriteFrameCache会保留以前的图片
frameCache1->removeSpriteFrames();

**********************************************************************************/

在3.x中,我选择Menu做按钮。

menu是菜单,新建一个菜单,然后绑定一个菜单项MenuItemImage就可以了,在MenuItemImage可以设置按钮的按下和普通的两种状态,以及回调函数,值得一提的是,3.x版本支持C++11的拉姆达表达式,也就是说,在回调函数这个参数上,不用再定义一个函数,可以在参数的位置上使用闭包函数。

	auto button_jump = MenuItemImage::create("button_jump.png",
                                                  "button_jump.png",
                                                   [](Ref* obj){log("XXXXXXXXXXXXXX");});
	 auto menu = Menu::create(button_jump, NULL);
	 this->addChild(menu);

拉姆达表达式中,[ ]中写&,就可以引入外部变量了,我们在里面写关于跳跃的功能,只需要在拉姆达表达式中加一句。

	[&](Ref* obj){player->getPhysicsBody()->setVelocity(Vec2(0,100));})
不getPhysicsBody是不行的,因为setVelocity方法是作用在node上。

设置世界重力

scene->getPhysicsWorld()->setGravity(Vect(0,-2000));
设置精灵不旋转

player->getPhysicsBody()->setRotationEnable(false);

但是当我做滑翔动作的时候我突然发现我去啊menu没有长按事件,只能试试用controButton了

addTargetWithActionForControlEvents,注意后面的s。

新的controlButton的写法如下

	ControlButton* button_slip=ControlButton::create(LabelTTF::create("  ","Maker Felt",30),Scale9Sprite::create("button_slip.png"));
        button_slip->addTargetWithActionForControlEvents(this,cccontrol_selector(Stage::button_slip_touchDown),Control::EventType::TOUCH_DOWN );
	 button_slip->setPreferredSize(Size(120,120));
	 button_slip->setPosition(100,100);
	 this->addChild(button_slip);

就是事件的第三个参数变了。看源代码就行。

注意回调函数button_slip_touchDown,声明时

<span style="background-color: rgb(255, 0, 0);">void button_slip_touchDown(Ref* pSender,Control::EventType event);</span>
暂时不知道addTargetWithActionForControlEvents的拉姆达表达式怎么写

如果你知道,请告之,




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值