cocos2d中的anchorPoint

2023-11-10

cocos2d中的anchorPoint

将该图片放置到屏幕左下方

CCSprite sprite = CCSprite.sprite("Default.png");  
addChild(sprite);  

生成的精灵放置在( 0,0 ),也就是屏幕左下角。但是精灵的贴图的中心点和精灵的左下角位置一致 ,导致贴图只能显示一部分(贴图的右边上半部分)。

可以这样想,一个精灵有两部分,一部分是节点背景对象 ,另一部分是贴图对象 (自己理解定义的名称,非官方)

 

怎么可以让贴图完全显示出来呢?使用定位点

 

每个节点都有一个定位点,但是只有当节点拥有贴图时,这个定位点才有用。默认情况下, anchorPoint 属性设置为(0.5,0.5 )

 

定位点和节点的位置没有关系。当改变 anchorPoint 属性的时候,我们能看到精灵在屏幕上的位置发生了变化,但是其实节点没有改变;改变的是精灵里贴图的位置

CCSprite sprite = CCSprite.sprite("Default.png");  
sprite.setScale(0.6f);  
sprite.setPosition(CGPoint.make(500, 300));  
addChild(sprite);  
              
ccMacros.CCLOGERROR("test", "Position:"+sprite.getPosition().x +"--"+sprite.getPosition().y);  
ccMacros.CCLOGERROR("test", "AnchorPoint:"+sprite.getAnchorPoint().x +"--"+sprite.getAnchorPoint().y);  
ccMacros.CCLOGERROR("test", "AnchorPointInPixels:"+sprite.getAnchorPointInPixels().x+"--"+sprite.getAnchorPointInPixels().y);  

修改定位点为0

CCSprite sprite = CCSprite.sprite("Default.png");  
sprite.setScale(0.6f);  
sprite.setPosition(CGPoint.make(500, 300));  
sprite.setAnchorPoint(CGPoint.make(0, 0));  
addChild(sprite);  

从上面可以看出来精灵的位置没有发生变化,发生变化的只是贴图对象 相对于节点背景对象 的偏移 。

默认情况下 anchorPoint 为( 0.5,0.5 ),即贴图对象 的中心位置对应着节点背景对象 的左下角;而当 anchorPoint 为(0,0 ),即贴图对象 的左下角对应着节点背景对象 的左下角

 

所以按照下面的代码,图片就可以正好显示在左下角了

CCSprite sprite = CCSprite.sprite("Default.png");  
sprite.setAnchorPoint(CGPoint.make(0, 0));  
addChild(sprite);  

 

附:AnchorPoint问题:

设置AnchorPoint,到底有什么作用,当初我的理解是这个AnchorPoint是相对本身位置参考点。 
比如:我定义个Sprite,设置一个anchorPoint为居中置顶的位置 。
           sprite.anchorPoint = ccp( intW / 2, intH );
           sprite.rotation  = 90;
但实际翻转时还是以左下角为参考点翻转。更改的参考点并不起作用,或者我理解错误。
问题:

1:想实现我这个更改翻转的参考点,如何实现?;
2:AnchorPoint到底做什么用?



答:这个属性表示你这个图片setPosition时的点在图片上所处的位置.
取值范围0-1
0,0表示左下角,
1,1表示右上角
0.5,0.5表示图片的中心点.

所有的图片都是以矩形来界定的.



问:这样设置翻转时还是以左下角为参考点


答:在设置 anchorPoint 的时候,   
imageVIew = [[UIImageView alloc] init];
imageView.anchorPoint = ccp(0.5, 1);
imageView.frame = CGRectMake(.......);

好像是先设置 anchorPoint, 再设置 frame.  试试.



答:问题算是解决了。说说基本思路。 
我之前定义一个Sprite,初始化时用一个ColorLayer 填充精灵 代码如下: 
+ (id) BulletWithinLayer:(CCLayer *) layer 

    BQBullet *bullet = [BQBullet node]; 
     
    //bullet.anchorPoint = ccp(0.5,1);///注释A 
    [bullet SetLayer:layer]; 
     
    return bullet; 


-(id)init 


    if((self == [super init])) 
    { 
        CCColorLayer *tmp = [CCColorLayer layerWithColor:ccc4(255, 255, 0, 255)]; 
        //tmp.anchorPoint = ccp(0.5,1);  ///注释B 
        [self addChild:tmp z:0 tag:1]; 
    } 
    return self; 


//生成一个bullet精灵 
BQBullet *bullet = [BulletWithinLayer:layer]; 
bullet.anchorPoint= ccp(0.5,1); 
bullet.rotation= 45; 
[layer addChild: bullet z:1]; 

这时看到的翻转还是已左下角,关闭注释A,B都是无效。 

后面我用一个图片代替ColorLayer生成精灵,就有效果了。 

为什么会有这种区别呢?更填充的层有关系吗?真是没搞懂啊?虽然说最后游戏不是这种写法,但对程序员来说,在没有图的情况下应该也能完成一个游戏,就是用单纯的色块来替换,这样就不用等美术图出来了,也能更早的出模型,至少以前在J2ME上都是可以这样做的,现在在iphone上,画个色块就TMD的这么麻烦,真是很不爽! 



针对:色块无法翻转的问题找到了,因为色块是ColorLayer,CCLayer默认的isRelativeAnchorPoint = NO;重新打开就行了isRelativeAnchorPoint = YES;

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

cocos2d中的anchorPoint 的相关文章

随机推荐

  • 数据结构三大算法(案例解析)

    概述 本文讲述数据结构中最常用到的三大算法 分治法 动态规划法和贪心算法 主要从这些算法的经典案例入手来对算法进行分析和理解 分治法 分治法可以通俗的理解为将一条大鱼分成好几块 分别料理每一块鱼肉 然后再组成一道菜 也就是说分治法是将一个大
  • Cadence17.2 > OrCAD Capture CIS > 设计规则检查(Design Rule Check)DRC学习记录详解

    目录 一 Design Rule Check对话框选项详解 1 Design Rule Options选项详解 2 Electrical Rules 电气规则检查 选项详解 3 Physical Rules 物理规则检查 选项详解 4 ER
  • 并发编程中需要谨记的规则(翻)

    并发编程中需要谨记的规则 最小化临界区 Amdahl定律和Gustafson定律都将并行算法中的顺序执行的工作视为性能问题的头号敌人 两个执行代码区段中间的时间需要顺序执行 这就是众所周知的临界值 在图1 16的分析Gustafson定律的
  • [资源]--IOS捷径大全,众多实用小功能

    一 实用工具 1 支付助手3 0 新 扫一扫 微信扫码 微信收款 支付宝扫码 Apple Pay AA付款 查快递 蚂蚁森林 蚂蚁庄园 彩票 股票 运动 淘票票 乘车码 生活缴费 火车票等等 https www icloud com sho
  • 剑指offer 面试题14- I. 剪绳子 面试题14- II. 剪绳子 II

    动态规划 https leetcode cn com problems integer break solution dong tai gui hua zhi xing yong shi da bai 100 c by 动态规划 class
  • Open3D (C++) 计算点云的均值与标准差

    目录 一 算法原理 二 主要函数 三 代码实现 四 结果展示 一 算法原理 计算给定点云数据x y z坐标各字段的均值和标准差 其中标准差为n 1实现 二 主要函数 getMeanStd const std vector lt float
  • 基于Java的连连看游戏设计与实现(含源文件)

    欢迎添加微信互相交流学习哦 项目源码 https gitee com oklongmm biye 毕业设计 论文 任务书 第1页 毕业设计 论文 题目 基于Java的连连看游戏设计与实现 毕业设计 论文 要求及原始数据 资料 1 简述Jav
  • 拥塞控制域流量控制

    流量控制 也就是管理两端的流量 以免任一方向上因发送过块导致接收端溢出 或者因接收端处理太快而浪费时间的状态 具体包括 1 发送端的进程产生数据很慢 时不时的来个1字节数据 那么TCP就会1字节1字节的发送 效率很低 解决办法是建立一个时基
  • 冗余架构控制器下的攻与防

    本文系原创 转载请说明出处 Please Subscribe Wechat Official Account 信安科研人 获取更多的原创安全资讯 防 A Quad Redundant PLC Architecture for Cyber R
  • Deformable Attention学习笔记

    Deformable Attention学习笔记 Vision Transformer with Deformable Attention Abstract Transformer 最近在各种视觉任务中表现出卓越的表现 大的 有时甚至是全局
  • 《MySQL必知必会》01_书中例程:所有的创表语句、插入语句

    目录 书中例程 所有的创表语句 插入语句 create sql populate sql 书中例程 所有的创表语句 插入语句 create sql MySQL Crash Course http www forta com books 06
  • jmeter压测步骤

    参考 使用Jmeter压测的第一个接口 第一步 在测试计划里添加一个线程组 要压测的接口名称 如图所示 在测试计划里右键 添加 线程 线程组就可以了 第二步 设置线程组参数 如下图所示 第三步 添加请求 在线程组上右键 添加 取样器 HTT
  • 服务器virsh不显示虚机,【openEuler 20.09】【虚拟化】virsh attach-interface热插rtl8139网卡后,虚拟机内部不显示,重启后才显示...

    环境信息 Host NAME openEuler VERSION 20 09 ID openEuler VERSION ID 20 09 PRETTY NAME openEuler 20 09 ANSI COLOR 0 31 Guest C
  • Python函数(def, return)

    函数 函数 Function 喂 给函数一些数据 它就能内部消化 给你 吐 出你想要的东西 这就像自动贩卖机 只不过贩卖机是喂点钱 吐出来一些吃的喝的用的东西 而Python函数则是喂各种各样的数据 吐出来各种各样的功能 函数定义 在Pyt
  • c#对字符串的各种操作

    1 字符串定义 2 在字符串后面追加字符串 3 获取字符串长度 4 截取字符串的一部分 5 字符串转为比特码 6 查指定位置是否为空字符 7 查字符串是否是标点符号 8 截头去尾 Trim 9 替换字符串 10 得到用单个字符串分隔字符串单
  • MT7688路由器 openwrt编译笔记

    Openwrt 19 07 4 路由器平台 MT7688 代码下载 git clone git git openwrt org openwrt git 或者更快的下载如下 git clone https gitee com mirrors
  • Java实现数据脱敏

    一 什么是数据脱敏 数据脱敏指的是某些敏感的信息通过脱敏规则进行数据的变形 实现敏感隐私数据的可靠保护 敏感数据包括 姓名 身份证号 手机号 银行卡号等信息 防止这些敏感数据在不安全的情况下使用 所以就要使用数据脱敏的技术 使用数据脱敏会在
  • 微服务,那些你该懂的知识(服务的注册和发现)

    微服务 微服务按照我个人的理解就是将众多的功能拆分成一个个子服务 其中以现在很流行的SpringBoot框架进行开发 再以SpringCloud方式进行部署 进而可以在SpringCloud的服务平台中对SpringBoot的一个个服务进行
  • 【算法】——归并排序的解析

    目录 1 归并排序的思想 2 归并排序的分析 3 内排序和外排序 1 归并排序的思想 归并是将两个或两个以上的有序表组合成一个新的有序表 假设初始序列含有n个记录 则可看成是n个子序列 每个子序列的长度为1 然后两两归并 得到 n 2 个长
  • cocos2d中的anchorPoint

    cocos2d中的anchorPoint 将该图片放置到屏幕左下方 CCSprite sprite CCSprite sprite Default png addChild sprite 生成的精灵放置在 0 0 也就是屏幕左下角 但是精灵