Cocos2dx在不使用plist文件的情况下更改精灵大小和纹理uv



我目前正在使用cocos2dx。我的测试设备是ipad2,我希望我的精灵大小与纹理大小无关,因为我负担不起一对一的映射。这是一个例子假设我有一个尺寸为10241024的纹理我只想使用它的一部分,从0,0到300300我想让那个精灵从100100画到200200,我怎么才能得到这个

我试过手动设置quad,但它的行为很奇怪我的四边形顶点是

     quad.bl.vertices = 0,0
     quad.br.vertices = 1024,0
     quad.tr.vertices = 1024,1024
     quad.tl.vertices = 0,1024

屏幕上没有显示任何内容

但当我把它们改成时

     quad.bl.vertices = 0,0
     quad.br.vertices = 2048,0
     quad.tr.vertices = 2048,2048
     quad.tl.vertices = 0,2048

则子画面的一部分被显示在屏幕上。在稍微改变顶点之后,cooc2d似乎假设ipad的左下角为10241024关于

我认为这就是您需要的

CCRect requiredPortion = CCRectMake(0, 0, 300, 300);
CCRect drawArea = CCRectMake(100, 100, 100, 100);
CCImage *image = new CCImage();
image->initWithImageFile("texture.png");
//Create a full size texture for example 1024,1024
CCTexture2D *texture = new CCTexture2D();
texture->initWithImage(image);
//Create a sprite from the require portion of texture (Here size of created sprite will be 300,300);
CCSprite *spriteNew = CCSprite::createWithTexture(texture, requiredPortion);
//Setting anchor point to make sure we are drawing from required position on screen
spriteNew->setAnchorPoint(ccp(0, 0));
//Set scale to sprite to make it fit in you required area i.e (requiredSize/currentSize)
spriteNew->setScale(drawArea.size.width/requiredPortion.size.width);
spriteNew->setPosition(drawArea.origin);
someNode->addChild(spriteNew);

请确保稍后删除imagetexture,它们不是自动释放的。

最新更新