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

标签 ios opengl-es cocos2d-x

我目前正在使用 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);

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

关于ios - Cocos2dx 在不使用 plist 文件的情况下更改 Sprite 大小和纹理 uv,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18484608/

相关文章:

iphone - Bonjour 数据发送多个设备

ios - 相机设置的 Swift 可选类型错误

ios - [如何]打开多个语句到语音

android - 如何在运行时检测 OpenGl 版本。安卓

cocos2d-x - 使用 cocos2d-x 3.0 比使用 cocos2d-x 2.x 有什么优势?

ios - UILabel sizeToFit 不适用于自动布局 ios6

iphone - 在 UIKit 应用程序中“嵌入”cocos2D

opengl-es - 渲染到深度纹理 - 关于 GL_OES_depth_texture 用法的不清楚

android - 如何创建android cocos2dx启动画面?

cocos2d-x - 如何修复 "Could NOT find GLEW (missing: GLEW_INCLUDE_DIR GLEW_LIBRARY)"