cocos2d-x 3.x 中的Layer和Widget的区别

 我来答
匿名用户
推荐于2018-05-13
展开全部
cocos2d-x 3.x 中的Layer和Widget的区别
这里说的是3.x版本,因为在2.x的版本中,Layer也是可以处理触摸屏事件的。
1. Widget是ui方面的概念,和Layer层不同,Widget也就是窗体;
2. Widget会拦截触摸屏事件。比如一个widget覆盖在其他元素上面,那么,触摸屏事件将不会向后面传递了。而Layer则不会。
3. Layer一般都是全屏覆盖的,无法指定大小(出了ColorLayer)。而Widget是窗口,所以可以指定大小的。
4. Widget多用于UI方面的显示,而Layer应该是多用于游戏场景的绘制。
威孚半导体技术
2024-08-19 广告
威孚(苏州)半导体技术有限公司是一家专注生产、研发、销售晶圆传输设备整机模块(EFEM/SORTER)及核心零部件的高科技半导体公司。公司核心团队均拥有多年半导体行业从业经验,其中技术团队成员博士、硕士学历占比80%以上,依托丰富的软件底层... 点击进入详情页
本回答由威孚半导体技术提供
我爱QW你们大家
2016-04-29 · TA获得超过2075个赞
知道小有建树答主
回答量:2361
采纳率:0%
帮助的人:178万
展开全部
区别1.去CC
之前2.0的CC**,把CC都去掉,基本的元素都是保留的
2.0
CCSprite CCCallFunc CCNode ..
3.0
Sprite CallFunc Node ..

区别2.cc***结构体改变
2.0
ccp(x,y)
ccpAdd(p1,p2)
ccpSub
ccpMult
ccpLength(p)
ccpDot(p1,p2);
ccc3()
ccc4()
ccWHITE
CCPointZero
CCSizeZero
3.0
Point(x,y)
p1+p2;
p1-p2
p1*p2
p.getLength()
p1.dot(p2)
Color3B()
Color4B()
Color3B::WHITE
Point::ZERO
Size:ZERO

区别3.shared***改变(单例机制使用语法)
2.0
CCSize winSize = CCDirector::sharedDirector()->getWinSize();
SpriteFrameCache::sharedSpriteFrameCache()
AnimationCache::sharedAnimationCache()
NotificationCenter::sharedNotificationCenter()

3.0
Size size = Director::getInstance()->getWinSize();
SpriteFrameCache::getInstance()
AnimationCache::getInstance()
NotificationCenter::getInstance()

区别4.POD类别
2.0
CCPoint
CCSize
CCRect

3.0
Vec2
Size
Rect

区别5.点触事件
auto dispatcher = Director::getInstance()->getEventDispatcher();
auto touchListener = EventListenerTouchOneByOne::create();
touchListener->onTouchBegan = CC_CALLBACK_2(FBMainScene::onTouchBegan,this);
touchListener->onTouchMoved = CC_CALLBACK_2(FBMainScene::onTouchMoved,this);
touchListener->onTouchEnded = CC_CALLBACK_2(FBMainScene::onTouchEnded, this);
dispatcher->addEventListenerWithSceneGraphPriority(touchListener, this);
bool FBMainScene::onTouchBegan(Touch *touch,Event *pEvent){
CCLOG("onTouchBegan");
Point point = this->convertToWorldSpace(this->convertTouchToNodeSpace(touch));
return true;
}
void FBMainScene::onTouchMoved(Touch *touch,Event *pEvent){
CCLOG("onTouchMoved");
}
void FBMainScene::onTouchEnded(Touch *touch,Event *pEvent){
CCLOG("onTouchEnded");
}
//获得触点的方法也发生了改变:
Point point = this->convertToWorldSpace(this->convertTouchToNodeSpace(touch));
//dispatcher控制方法:
dispatcher->addEventListener…
dispatcher->removeEventListener(listener);
dispatcher->removeAllListeners();

区别6.CallFunc使用(使用"Function"对象)
CallFunc::create([&](){
Sprite *sprite = Sprite::create("s");
this->addChild(sprite);
});

区别7.使用clone代替copy
2.0
CCMoveBy *action = (CCMoveBy*) move->copy();
action->autorelease();
3.0
action = move->clone();
不需要autorelease,在clone已经实现。

区别8.Physics Integration 物理引擎
暂无使用,box2d 在 3.0中可以延续使用
在3.0的Physics中需要定义 PhysicsWorld, PhysicsBody, PhysicsShape, PhysicsJoint 等,于box2d相仿,使用前需要定义CC_USE_PHYSICS

区别9.容器
2.0
CCArray

3.0
cocos2d::Vector<T>
cocos2d::Map<K,V>
cocos2d::Value
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式