Cocos2d-X 学习笔记4 锚点

来源:互联网 发布:合肥九龙医院网络预约 编辑:程序博客网 时间:2024/05/16 13:05

anchor point 究竟是怎么回事? 之所以造成不容易理解的是因为我们平时看待一个图片是 以图片的中心点 这一个维度来决定图片的位置的。而在cocos2d中决定一个 图片的位置是由两个维度 一个是 position  另外一个是anchor point。只要我们搞清楚他们的关系,自然就迎刃而解。

默认情况下,anchor point在图片的中心位置(0.5, 0.5),取值在01之间的好处就是,锚点不会和具体物体的大小耦合,也即不用关注物件大小,而应取其对应比率,如果把锚点改成(00),则进行放置位置时,以图片左下角作为起始点

也就是说,把position设置成(x,y)时,画到屏幕上需要知道:到底图片上的哪个点放在屏幕的(x,y)上,而anchor point就是这个放置的点,anchor point是可以超过图片边界的,比如下例中的(-1,-1),表示从超出图片左下角一个宽和一个高的地方放置到屏幕的(0,0)位置(向右上偏移10个点才开始到图片的左下角,可以认为向右上偏移了10个点的空白区域)


他们的关系是这样的(假设actualPosition.x,actualPosition.y是真实图片位置的中点): 

actualPosition.x = position.x + width*(0.5 - anchor_point.x); acturalPosition.y = position.y + height*(0.5 - anchor_point.y)

actualPosition 是sprite实际上在屏幕显示的位置, poistion是 程序设置的, achor_point也是程序设置的。


具体看下面的例子一:

 

[html] view plaincopy
  1. CCSprite *sprite [CCSprite spritewithFile:@"blackSquare.png"];  
  2. sprite.position=ccp(0,0);  
  3. sprite.anchorPoint=ccp(0,0);  
  4. [self addChild:sprite];  

具体效果如下:


根据上面的公式: 假设精灵的width = height = 10.

actualPosition.x = 0 + 10*(0.5 - 0) = 5; actualPosition.y  = 0 + 10*(0.5 - 0) = 5; 

(5, 5) 这个结果正是现在图片中心的在屏幕上的实际位置。

如果以左下角(Opengl坐标系的原点)为参照,就是把图片的原点锚在了屏幕坐标的原点上


例子 二:

 

[html] view plaincopy
  1. CCSprite *sprite [CCSprite spritewithFile:@"blackSquare.png"];  
  2. sprite.position=ccp(0,0);  
  3. sprite.anchorPoint=ccp(-1,-1);  
  4. [self addChild:sprite];  

具体效果如下:


 

根据上面的公式: 假设精灵的width = height = 10.

坐标方向是opengl的方向(原点在左下角,x向左,y向上为正)

actualPosition.x = 0 + 10*(0.5 - (-1)) = 15; actualPosition.y  = 0 + 10*(0.5 - (-1)) = 15; 

(15, 15) 这个结果正是现在图片中心的在屏幕上的实际位置。

如果以左下角(Opengl坐标系的原点)为参照,就是把图片的(-10,-10)这个点锚在了屏幕的原点(即图片的原点锚在了屏幕坐标的(10,10)上)

例子三

 

[html] view plaincopy
  1. CCSprite *sprite [CCSprite spritewithFile:@"blackSquare.png"];  
  2. sprite.anchorPoint=ccp(1,1);  
  3. sprite.position=ccp(sprite.contentSize.width sprite.contentSize.height);  
  4. [self addChild:sprite];  


根据上面的公式: 假设精灵的width = height = 10.

actualPosition.x = 10 + 10*(0.5 - (1)) = 5; actualPosition.y  = 10 + 10*(0.5 - (1)) = 5; 

(5, 5) 这个结果正是现在图片中心的在屏幕上的实际位置。

就是把图片的(10,10)这个点锚在了屏幕坐标的(10,10)上

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 2岁宝宝不吃蔬菜怎么办 事情想多了头疼怎么办 生气引起的肝疼怎么办 饿又懒得买吃的怎么办 四岁宝宝缺铁怎么办 宝宝吃母乳缺铁怎么办 九个月宝宝缺铁怎么办 2岁宝宝走路不稳怎么办 两岁宝宝爱打人怎么办 2岁宝宝脾气暴躁怎么办 二岁宝宝有口气怎么办 bl良品数码欺骗怎么办 喝酒喝的胃疼怎么办 喝酒喝多了胃疼怎么办 喝白酒喝的难受怎么办 吃饭后恶心想吐怎么办 喝奶茶恶心想吐怎么办 怀孕了一直想吐怎么办 肝不好一直想吐怎么办 胃老是恶心想吐怎么办 胃疼拉肚子拉水怎么办 半夜胃疼呕吐怎么办啊, 孕妇胃疼怎么办5个月 孕早期饿的胃疼怎么办 怀孕7个月胃痛怎么办 怀孕了胃疼的厉害怎么办 孕晚期老是胃疼怎么办 孕晚期半夜胃疼怎么办 吃多了反胃想吐怎么办 抽烟胃恶心想吐怎么办 孕妇7个月头疼怎么办 我的世界狗死了怎么办 户户通搜不到台怎么办 两车相撞我全责怎么办 我全责自己的车怎么办 没有我你怎么办 酷我 仿古砖上的水泥怎么办 异界气息的ss怎么办 前夫威胁我我该怎么办 怀孕了不确定孩子是谁的怎么办 怀孕了不是老公的怎么办