我目前正在使用 cocos2dx。我的测试设备是 ipad2 我希望我的 Sprite 大小与纹理大小无关,因为我无法承受一对一的映射。这是例子 假设我有一个尺寸为 1024,1024 的纹理 我只想使用它的一部分,从 0,0 到 300,300 我想让那个 Sprite 从 100,100 绘制到 200,200 我怎样才能实现这个
我试过手动设置四边形,但它给出了一个奇怪的行为 我的四边形顶点是
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
然后部分 Sprite 显示在屏幕上。稍微更改顶点后,coocs 2d 似乎假设 ipad 的左下角位于 1024、1024 问候
最佳答案
我想这就是你需要的
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);
确保稍后删除image
和texture
,它们不是自动释放的。
关于ios - Cocos2dx 在不使用 plist 文件的情况下更改 Sprite 大小和纹理 uv,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18484608/