一般新建项目可以看到他是位于整个图形界面的中心,原因是他设置了一个锚点,相当于落脚点。
因此我需要重做一个类研究这个图像在界面中的位置摆放,主要是下面这个代码
spr->setAnchorPoint(ccp(0.656,0.5))
他是影响锚点的关键,再通过这个代码你可以自由缩放图像大小,是按比例的缩放的哦。
spr->setScale(5.0f)
我做的类(包含CPP,h)这样更能清晰的观察代码的结构。最终图像应该是这样的
中间的线是用了draw函数主要是为了方便自己观察
具体代码大致是这样的.h
#ifndef __T01LayerAnchorPoint_H__
#define __T01LayerAnchorPoint_H__
#include "cocos2d.h"
USING_NS_CC;
class T01LayerAnchorPoint :public CCLayer
{
public:
static T01LayerAnchorPoint * create();
bool init();
static CCScene * scene();
void draw(Renderer* renderer, const Mat4 &transform, uint32_t flags);
void mySchedule(float dt);
CCSprite * spr;
};
#endif
下面是.cpp
#include "T01LayerAnchorPoint.h"
CCScene * T01LayerAnchorPoint::scene()
{
CCScene * scene = CCScene::create();
T01LayerAnchorPoint * layer = T01LayerAnchorPoint::create();
scene->addChild(layer);
return scene;
}
T01LayerAnchorPoint * T01LayerAnchorPoint::create()
{
T01LayerAnchorPoint * pRet = new T01LayerAnchorPoint();
if (pRet && pRet->init())
{
pRet->autorelease();
}
else
{
delete pRet;
pRet = NULL;
}
return pRet;
}
bool T01LayerAnchorPoint::init()
{
CCLayer::init();
CCSize winSize = CCDirector::sharedDirector()->getWinSize();
spr = CCSprite::create("anchor1.png");
//spr->setAnchorPoint(ccp(0.656,0.5));
spr->setScale(5.0f);
spr->setPosition(ccp(winSize.width / 2, winSize.height / 2));
addChild(spr);
schedule(schedule_selector(T01LayerAnchorPoint::mySchedule), 2);
return true;
}
void T01LayerAnchorPoint::draw(Renderer* renderer, const Mat4 &transform, uint32_t flags)
{
CCSize winSize = CCDirector::sharedDirector()->getWinSize();
ccDrawColor4B(255, 0, 0, 255);
ccDrawLine(ccp(0, winSize.height / 2), ccp(winSize.width, winSize.height / 2));
ccDrawLine(ccp(winSize.width / 2, 0), ccp(winSize.width / 2, winSize.height));
}
void T01LayerAnchorPoint::mySchedule(float dt)
{
static float ro = 0;
ro += 30;
spr->setRotation(ro);
}
大部分scene中锚点在中间的,但是大部分Layer是忽略锚点,因为我们要在这里面添加精灵等多种东西。