cocos2dx,Layer锚点与scale缩放

最近写代码需要用到缩放,而且是Layer的,但是发现怎么设置位置都是错误,于是决定研究下。

首先,基础代码,代码上不错特殊处理,没有锚点设置和缩放

class TestLayer : public Layer {

public:

    bool init();
    CREATE_FUNC(TestLayer);
};

bool TestLayer::init()
{
    if (!Layer::init()) {
        return false;
    }

    Sprite *dd = Sprite::create("item_gift1.png");
    this->addChild(dd);

    this->setContentSize(Size(200, 200));

    // 打印几个点参照用
    LayerColor *lc1 = LayerColor::create(Color4B::RED, 10, 10);
    lc1->setPosition(50, 0);
    this->addChild(lc1, 9001);

    LayerColor *lc4 = LayerColor::create(Color4B::RED, 10, 10);
    lc4->setPosition(100, 0);
    this->addChild(lc4, 9001);

    LayerColor *lc2 = LayerColor::create(Color4B::RED, 10, 10);
    lc2->setPosition(150, 0);
    this->addChild(lc2, 9001);

    LayerColor *lc6 = LayerColor::create(Color4B::RED, 10, 10);
    lc6->setPosition(200, 0);
    this->addChild(lc6, 9001);

    LayerColor *lc3 = LayerColor::create(Color4B::RED, 10, 10);
    lc3->setPosition(0, 50);
    this->addChild(lc3, 9001);

    LayerColor *lc5 = LayerColor::create(Color4B::RED, 10, 10);
    lc5->setPosition(0, 100);
    this->addChild(lc5, 9001);

    LayerColor *lc7 = LayerColor::create(Color4B::RED, 10, 10);
    lc7->setPosition(0, 150);
    this->addChild(lc7, 9001);

    LayerColor *lc8 = LayerColor::create(Color4B::RED, 10, 10);
    lc8->setPosition(0, 200);
    this->addChild(lc8, 9001);

    return true;
}
    TestLayer *t = TestLayer::create();
    t->setPosition(200, 200);
    this->addChild(t, 9000);

代码运行结果:

可以看到,TestLayer被放置在了(200,200),锚点在(0,0)

下面对TestLayer进行缩放0.5

TestLayer *t = TestLayer::create();
t->setPosition(200, 200);
t->setScale(0.5f);

运行结果:

(黄线是截图时画的)

可以看到TestLayer缩放了50%,但是左下角没有在(200,200)

通过这个代码可以看出,Layer中的child是以(0,0)为锚点,但是在scale时,确实以(0.5,0.5)进行缩放。

这个地方感觉比较坑,为什么没有用统一的点呢?没有写过底层画图代码,哪位同学知道,希望给我一个答案。

那这个地方可不可以统一呢?

看代码:

this->_ignoreAnchorPointForPosition = false;
this->setAnchorPoint(Point(0, 0));

在TestLayer中增加上面代码,运行结果:

可以看到缩放和child位置锚点一致了。

时间: 2024-08-04 18:30:26

cocos2dx,Layer锚点与scale缩放的相关文章

css3 新特性(translate 移动,rotate 旋转 , scale 缩放)

1.transform(转换)可以实现元素的位移,旋转,缩放等效果(可以简单理解为变形) 移动:translate            旋转:rotate          缩放:scale 2. 2D 转换之移动 translate 可以改变元素在页面中的位置,类似定位. 语法: transform:translate(x,y);  或者分开写 transform:translateX( n ); transform:translateY( n ); 重点: 定义 2D 转换中的移动,沿着

cocos2d-x AnchorPoint锚点

锚点是定位和变换操作的一个重点.锚点我们能够看成用一根图钉将一张纸或者相片钉在墙上的那个点. 节点的位置是由我们设置的position和anchor point一起决定的. 值得一提的是,anchor point的默认位置Layer的是左下,而其它的node是中点. 节点的原点是父节点的左下角. CCLayer* layer1 = CCLayerColor::create(ccc4(255,0,0,255), 300, 200); CCLayer* layer2 = CCLayerColor::

css3的transform中scale缩放详解

下面我们从3个方面开始介绍: 1.scale(x,y) 对元素进行缩放 X表示水平方向缩放的倍数 | Y表示垂直方向的缩放倍数Y是一个可选参数,没有设置的话,则表示X,Y两个方向的缩放倍数是一样的.并以X为准.transform:scale(2,2.5);   2.scaleX(<number>) 元素只在X轴(水平方向)缩放元素. 默认值是1,基点一样在元素的中心位置.可以通过transform-origin来改变基点transform:scaleX(2);   3.scaleY(<n

css3动画属性系列之transform细讲scale缩放

下面我们从3个方面开始介绍: 1.scale(x,y) 对元素进行缩放 X表示水平方向缩放的倍数 | Y表示垂直方向的缩放倍数 Y是一个可选参数,没有设置的话,则表示X,Y两个方向的缩放倍数是一样的.并以X为准. Css代码   transform:scale(2,2.5); 2.scaleX(<number>) 元素只在X轴(水平方向)缩放元素. 默认值是1,基点一样在元素的中心位置.可以通过transform-origin来改变基点 Css代码   transform:scaleX(2);

cocos2d-x中锚点设置及定位方式

问题 在cocos2d演示样例代码HelloCpp中,为什么要将CCMenu设置位置到CCPointZero,即使CCMenu的锚点是在(0.5, 0.5)? 回答 这是由于CCMenu没有使用锚点进行坐标定位,而是使用的坐标原点.也就是说,CCMenu的坐标原点放到了其父节点的坐标原点. 延伸 不光是CCMenu没有使用锚点定位,像CCLayer,CCScene都没有使用锚点定位.详细设定是在构造函数中设计标记m_bIgnoreAnchorPointForPosition = true;下表描

egret 里面设置MovieClip的scale缩放值时,没有效果的情况

1,有时,在设置MovieClip的缩放值scale属性时,没有效果,本人遇到的情况解决的办法是:在MovieClip外面套个Group,设置Group的scale属性就能达到效果了.具体原因待考究

cocos2dX改变锚点位置

改变锚点时,同过计算偏移量修正position从而保持CCNode在屏幕上的位置不变 1 void CLayer::change_anchorpoint(CCNode* node,CCPoint newpt) 2 { 3 float dx, dy, diffx, diffy, height, width; 4 width = node->getContentSize().width; 5 height = node->getContentSize().height; 6 7 diffx = (

iTween Scale缩放

void Start () { //键值对儿的形式保存iTween所用到的参数 Hashtable args = new Hashtable(); //放大的倍数 args.Add("scale", new Vector3(1, 5, 1)); //args.Add("scale", msgNotContinue.transform); // x y z 标示放大的倍数 args.Add("x", 5); args.Add("y&quo

变形--缩放 scale()

变形--缩放 scale() 缩放 scale()函数 让元素根据中心原点对对象进行缩放. 缩放 scale 具有三种情况: 1. scale(X,Y)使元素水平方向和垂直方向同时缩放(也就是X轴和Y轴同时缩放) 例如: div:hover { -webkit-transform: scale(1.5,0.5); -moz-transform:scale(1.5,0.5) transform: scale(1.5,0.5); } 注意:Y是一个可选参数,如果没有设置Y值,则表示X,Y两个方向的缩