位置: 编程技术 - 正文

Cocos2dx开发之锚点(cocos2d开发app)

编辑:rootadmin

推荐整理分享Cocos2dx开发之锚点(cocos2d开发app),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:cocos2d-x教程,cocos2dx4.0教程,cocos2d开发app,cocos设置锚点,cocos2d教程,cocos2d开发app,cocos锚点,cocos设置锚点,内容如对您有帮助,希望把文章链接给更多的朋友!

Cocos2dx开发之锚点实例讲解[ ]

锚点概念

由于我们在使用Cocos2dx进行开发时,一般都是在场景中加载精灵来实现的,而精灵上挂载的往往都不是一个点而是一张图片资源,那么我们在场景中设置这个精灵的位置时,对这张资源图片来说是应该把这张图片资源中的哪个点与我们设置的点对齐呢?这里就引出了锚点这个概念,我们通过设置锚点来确定资源图片上哪个点与我们设置位置点对齐。简而言之,锚点确定精灵自己在父节点的加载位置。

几何图形说明

上面的文字描述可能不太容易理解,下面作者发扬严谨的科研风&#;,绘图做以下说明:

假设我们要把一个精灵加载到场景中去,这个精灵上使用的图片资源是一张四边形图片,如下图所示

图 1

OK,当我们使用Cocos2dx下对应的API要给这个精灵设置一个特定的位置时,设置的结果是什么样的呢?这就与我们给定这个精灵的锚点有关,设置不同的锚点,加载结果也会不同。锚点的设置可以根据你的喜好随意设置,但是一般来说常用的锚点有哪些呢?如下图红色圈所表示的——左下角、左上角、右上角、右下角,在Cocos2dx中默认使用的锚点坐标是四边形的几何中心点。

图 2

在Cocos2dx中,我们可以使用setAnchorPoint这个接口来设置锚点,参数是一个cocos2d::CCPoint类型,这个点是(0.0f,0.0f)~(1.0f,1.0f)之间的一个&#;。

锚点Demo演示

我们在下面这个场景中来做测试,首先如下图所示,我们在这个场景中添加一个精灵A作为背景精灵:

加载代码:

// 添加背景资源

cocos2d::CCSprite* pBg = cocos2d::CCSprite::create("wndbg.png");

CC_BREAK_IF( !pBg );

pBg->setPosition(ccp(.0f,.0f));

this->addChild(pBg);

图 3

然后我们在这个精灵上开始增加另外一个精灵B作为测试精灵。

好,我们把测试精灵B的锚点设置为左下角(0.0f,0.0f),然后加载到精灵A之上,如下图所示:

加载代码:

// 加载测试精灵

cocos2d::CCSprite* pTestSprite = cocos2d::CCSprite::create("bubble.png");

CC_BREAK_IF( !pTestSprite );

pTestSprite->setAnchorPoint(ccp(0.0f,0.0f));

pTestSprite->setPosition(ccp(0.0f,0.0f));

pBg->addChild(pTestSprite);

结果展示:

图 4

Cocos2dx开发之锚点(cocos2d开发app)

再看下面,我们把测试精灵B的锚点设置为中间(Cocos2dx中默认锚点也是如此),加载结果:

加载代码:

// 加载测试精灵

cocos2d::CCSprite* pTestSprite = cocos2d::CCSprite::create("bubble.png");

CC_BREAK_IF( !pTestSprite );

pTestSprite->setAnchorPoint(ccp(0.5f,0.5f));

pTestSprite->setPosition(ccp(0.0f,0.0f));

pBg->addChild(pTestSprite);

加载结果如下

图 5

下来呢,再把测试精灵B的锚点设置为右上角(1.0f,1.0f),加载结果如下:

加载代码:

// 加载测试精灵

cocos2d::CCSprite* pTestSprite = cocos2d::CCSprite::create("bubble.png");

CC_BREAK_IF( !pTestSprite );

pTestSprite->setAnchorPoint(ccp(1.0f,1.0f));

pTestSprite->setPosition(ccp(0.0f,0.0f));

pBg->addChild(pTestSprite);

加载结果展示:

图 6

NICE,至此,我们可以看到,测试精灵B锚点设置不会影响它在背景精灵上的位置(这个位置只是根据setPosition接口来改变),只会影响测试精灵B本身的资源图片上的哪一点来与这个位置对齐。

=====================================

图层的旋转失败的案例

【 view plaincopy/// anchorPoint getter const CCPoint& CCNode::getAnchorPoint() { return m_obAnchorPoint; } void CCNode::setAnchorPoint(const CCPoint& point) { if( ! point.equals(m_obAnchorPoint)) { m_obAnchorPoint = point; m_obAnchorPointInPoints = ccp(m_obContentSize.width * m_obAnchorPoint.x, m_obContentSize.height * m_obAnchorPoint.y ); m_bTransformDirty = m_bInverseDirty = true; } } 其锚点的坐标&#;是一个相对&#;0~1,其中m_obAnchorPoint表示的是相对锚点坐标,m_obAnchorPointInPoints表示的是锚点在屏幕中的像素坐标,所以对于CCNode的坐标系转换会涉及到多种转换方式。

我们也可以通过设置ignoreAnchorPointForPosition来忽略锚点的作用。

对于图层而言其ignoreAnchorPointForPosition的默认&#;为false,CCSprite默认&#;为true,但是有时候大家会发现,即便咱们设置了图层的ignoreAnchorPointForPosition为false,但是图层的旋转仍然没有按照预定的结果来进行,原因是因为默认CCLayer的图层的大小为CCSize(0,0),所以不管你怎么设置图层的大小始终为(0,0),经过锚点比例进行计算之后其锚点的坐标仍然是(0,0),如下图所示:

但是设置了CCLayer的大小之后,就会发现,咱们设置的锚点就能起到作用了

[cpp] view plaincopyvoid LayerIgnoreAnchorPointPos::onEnter() { LayerTest::onEnter(); bool ignore = this->isIgnoreAnchorPointForPosition(); //this->ignoreAnchorPointForPosition(false); //CCSize layerSize = this->getContentSize(); setContentSize(CCDirector::sharedDirector()->getWinSize()); setAnchorPoint(ccp(0.5, 1)); //CCSize layerSize2 = this->getContentSize(); //CCPoint pt = this->getPosition(); //setPosition(ccp(layerSize2.width/2, layerSize2.height/2)); CCSize s = CCDirector::sharedDirector()->getWinSize(); CCLayerColor *l = CCLayerColor::create(ccc4(, 0, 0, ), , ); l->setAnchorPoint(ccp(0.5f, 0.5f)); l->setPosition(ccp( s.width/2, s.height/2)); CCMoveBy *move = CCMoveBy::create(2, ccp(,2)); CCMoveBy * back = (CCMoveBy *)move->reverse(); CCSequence *seq = CCSequence::create(move, back, NULL); l->runAction(CCRepeatForever::create(seq)); this->addChild(l, 0, kLayerIgnoreAnchorPoint); CCSprite *child = CCSprite::create("Images/grossini.png"); l->addChild(child); CCSize lsize = l->getContentSize(); child->setPosition(ccp(lsize.width/2, lsize.height/2)); CCMenuItemFont *item = CCMenuItemFont::create("Toggle ignore anchor point", this, menu_selector(LayerIgnoreAnchorPointPos::onToggle)); CCMenu *menu = CCMenu::create(item, NULL); this->addChild(menu); menu->setPosition(ccp(s.width/2, s.height/2)); //this->setAnchorPoint(ccp(0.5, 0.5)); CCDirector::sharedDirector()->getActionManager()->addAction( CCRepeatForever::create( CCSequence::create(CCRotateBy::create(2, ), CCRotateBy::create(2, -), 0) ), this, false); }

cocos2d出错 -::.:A/art():art/runtime/check_jni.cc:]JNIDETECTEDERRORINAPPLICATION:thereturntypeofCallStaticIntMethodVdoesnotmatchvoidcom.zhongshu.gamebase.GameBase.PayForFee(int,int,java.lang.S

【DEMO】用cocos2d-x3.x写的第一个cocosDemo 真是难以想象为啥变成这样了其实看Demo代码好麻烦,所以之后可能会出几个文章讲解各个部分代码质量我不知道怎么样,没有多少经验,初学者,不喜

<cocos2dx 随记> 关于cocos2dx接Android sdk的一些坑 简单说说UI线程:在Android中,有个非常重要的家伙非常霸道,那就是UI线程。这霸道之一:不能被阻塞。之二:系统对每一个组件的调用都从UI线程分发

标签: cocos2d开发app

本文链接地址:https://www.jiuchutong.com/biancheng/369161.html 转载请保留说明!

上一篇:cocos2d-x windows开发环境配置

下一篇:cocos2d出错(cocos2djs)

  • 长期待摊费用一般指什么
  • 转让金融商品应交增值税税率
  • 生产型企业出口退税账务处理
  • 工会筹备金的计税依据是应发工资还是实发工资
  • 如何区分追索权和付款请求权的区别
  • 不得开具增值税专票情形包括
  • 单位车辆交强险赔付流程
  • 职工旅游费用如何处理
  • 工资一直挂账未发可以吗
  • 企业未开票收入怎么发现
  • 分公司清算和总公司清算
  • 工资退回怎么处理
  • 有留抵税额会计分录
  • 销售开发后的产品
  • 电商销售进对公账户怎样做账
  • 工资薪金总额包括哪些内容
  • 公司充加油卡发票税额为0 怎么入账
  • 契税和增值税的计税依据
  • 个体户对私账户
  • 收到投资款如何记账
  • win11怎么取消登录pin密码
  • 固定资产丢失进项税需要转出吗
  • 交易性金融资产入账价值怎么计算
  • 冲减预付账款会计分录
  • 写一篇推荐书
  • 资产减值损失会影响营业利润吗
  • windows 10 build 21354
  • php获取网站内容
  • 销售商品的会计分录已收到钱
  • vue如何预加载图片
  • 股权激励的账务如何处理
  • 机器学习报错解决2——ValueError: too many values to unpack (expected 3)
  • Python 高性能 pdf
  • sql server2016使用
  • 网上学电脑哪个软件好
  • phpcms怎么用
  • java将整数转化为数组
  • 进项税额在贷方怎么办
  • 报表怎么报送
  • 事业单位以资产为准吗
  • 合同资产和合同履约成本的区别
  • 小规模纳税人个体户经营所得税怎么算
  • 外国常驻代表机构经费支出范围
  • 无形资产如何摊销 当月还是下月
  • 企业应付职工薪酬的会计核算
  • 提取维简费分录
  • 欠供应商货款会坐牢吗
  • 应付票据转应付账款有附件吗
  • 支付货代运费账务处理
  • 增值税专用发票电子版
  • 固定资产更新改造当月是否计提折旧
  • 企业接受供应单位提供劳务而发生的应付账款
  • 年底暂估收入,年初怎么做
  • 对公账户转账给法人怎么做账
  • 普票不开明细可以不
  • 防伪税控费用抵税分录
  • 固定资产怎么计算折旧额
  • sql查询包含特殊
  • win7系统如何关闭系统自检
  • win10屏幕自动变黄
  • windows正版光盘
  • 苹果15手机价格和图片颜色
  • windows开始搜索栏
  • 装win7系统步骤
  • regsvc32.exe - regsvc32是什么进程 有什么用
  • 如何删除win7系统自带游戏软件
  • linux使用命令查看ip地址
  • unity做app开发
  • cocos2dx吸蓝效果实现opengl绘制
  • PHP+MySQL+jQuery随意拖动层并即时保存拖动位置实例讲解
  • win7安装要求配置
  • Cocos2dx3.2 CrazyTetris 单线裁剪 对于判断消除的思考(一)
  • js是函数式编程语言吗
  • android源码分析实录
  • node+mongodb
  • js弹出小窗口
  • 置顶是什么意思呢
  • js 三元
  • 房产税什么时候开始征收
  • 南京税务局几点下班?
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设