刚学cocos2dx。从小几何就没学好。看到坐标就犯晕,所以今天写了个例子来观察cocos2dx的坐标是杂回事。 首先参考【cocos2d-x官方文档】cocos2d-x坐标系详解:http://article.ityran.com/archives/3367
本篇文章例子主要是如何裁剪图片。
当锚点居中时,右下角的位置,0,0,图片宽度/2,图片高度/2。
当锚点居中时,左下角的位置,0,0,-图片宽度/2,图片高度/2。
当锚点居中时,右上角的位置,0,0,图片宽度/2,-图片高度/2。
当锚点居中时,右上角的位置,0,0,-图片宽度/2,-图片高度/2。
ps:截图:上 减(-),下 加(+),左 减(-),右 加(+)
下图片的位置! helloword.cpp, bool HelloWorld::init() 方法如下 <!-- lang: cpp -->
bool HelloWorld::init(){
// 1. super init first
if ( !CCLayer::init() )
{
return false;
}
// 2. add a menu item with "X" image, which is clicked to quit the program
// you may modify it.
// add a "close" icon to exit the progress. it's an autorelease object
CCMenuItemImage *pCloseItem = CCMenuItemImage::create(
"CloseNormal.png",
"CloseSelected.png",
this,
menu_selector(HelloWorld::menuCloseCallback) );
pCloseItem->setPosition( ccp(CCDirector::sharedDirector()->getWinSize().width - 20, 20) );
// create menu, it's an autorelease object
CCMenu* pMenu = CCMenu::create(pCloseItem, NULL);
pMenu->setPosition( CCPointZero );
this->addChild(pMenu, 1);
// ask director the window size
CCSize size = CCDirector::sharedDirector()->getWinSize();
CCLayerColor *col = CCLayerColor::create(ccc4(128,128,128,255));
this->addChild(col, -10);
// 居中原图
CCSprite *pCoSprite = CCSprite::create("Icon-72.png");
CCSize spriteSize = pCoSprite->getContentSize();
pCoSprite->setPosition( ccp(size.width/2,size.height/2));
this->addChild(pCoSprite,-1);
//右下 ,裁剪时,假如图片的锚点为(0,0),右下角坐标:0,0,宽,高
CCSprite *pRectSpriteRB = CCSprite::create("Icon-72.png",CCRect(spriteSize.width/2, spriteSize.height/2, spriteSize.width/2, spriteSize.height/2));
pRectSpriteRB->setPosition(ccp(size.width/2+spriteSize.width+pRectSpriteRB->getContentSize().width/2,size.height/2-spriteSize.height/2-pRectSpriteRB->getContentSize().height/2));
this->addChild(pRectSpriteRB);
//右下原图
CCSprite *pCoSpriteRB = CCSprite::create("Icon-72.png");
pCoSpriteRB->setPosition( ccp(size.width/2+spriteSize.width,size.height/2-spriteSize.height/2));
this->addChild(pCoSpriteRB,-1);
// 左下 ,裁剪时,假如图片的锚点为(0,0),左下角坐标:0,0,-宽,正高
CCSprite *pRectSpriteLB = CCSprite::create("Icon-72.png",CCRect(spriteSize.width/2, spriteSize.height/2, -spriteSize.width/2, spriteSize.height/2));
pRectSpriteLB->setPosition(ccp(size.width/2-spriteSize.width,size.height/2-spriteSize.height/2));
this->addChild(pRectSpriteLB);
CCSprite *pCoSpriteLB = CCSprite::create("Icon-72.png");
pCoSpriteLB->setPosition( ccp(size.width/2-spriteSize.width,size.height/2-spriteSize.height/2));
this->addChild(pCoSpriteLB,-1);
// 右上,裁剪时,假如图片的锚点为(0,0),右上角坐标:0,0,宽,-高
CCSprite *pRectSpriteRU = CCSprite::create("Icon-72.png",CCRect(spriteSize.width/2, spriteSize.height/2, spriteSize.width/2, -spriteSize.height/2));
pRectSpriteRU->setPosition(ccp(size.width/2+spriteSize.width,size.height/2+spriteSize.height));
this->addChild(pRectSpriteRU);
// 左上,裁剪时,假如图片的锚点为(0,0),左上角坐标:0,0,-宽,-高
CCSprite *pRectSpriteLU = CCSprite::create("Icon-72.png",CCRect(spriteSize.width/2, spriteSize.height/2, -spriteSize.width/2, -spriteSize.height/2));
pRectSpriteLU->setPosition(ccp(size.width/2-spriteSize.width,size.height/2+spriteSize.height));
this->addChild(pRectSpriteLU);
return true;
}
下图为执行效果