cocos2d-x 3.x 中的Layer和Widget的区别
2个回答
推荐于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应该是多用于游戏场景的绘制。
这里说的是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 广告
2024-08-19 广告
威孚(苏州)半导体技术有限公司是一家专注生产、研发、销售晶圆传输设备整机模块(EFEM/SORTER)及核心零部件的高科技半导体公司。公司核心团队均拥有多年半导体行业从业经验,其中技术团队成员博士、硕士学历占比80%以上,依托丰富的软件底层...
点击进入详情页
本回答由威孚半导体技术提供
展开全部
区别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
之前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
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询