【问题标题】:Sprite::createWithTexture with Rect not working as expected带有 Rect 的 Sprite::createWithTexture 无法按预期工作
【发布时间】:2015-08-11 17:58:03
【问题描述】:

我正在尝试从图像构建精灵。使用 Image 和 Texture2D 类,然后从 texture2D 创建一个精灵。

我正在加载的图像是 512x512,我希望 createWithTexture 的两个版本的行为相同,但事实并非如此。代码如下:

Image* image = new Image();
image->initWithImageFile(fileName);

Texture2D* texture = new Texture2D();
texture->initWithImage(image);

//If used this way everything works as expected
Sprite* spr= Sprite::createWithTexture(texture);
//If used with a Rect weird result occurrs.
Sprite* spr= Sprite::createWithTexture(texture,Rect(0,0,512,512));
spr->setAnchorPoint(Vec2(0,0));
spr->setPosition(Vec2(0,0));
spr->setScale(1.0f,1.0f);
this->addChild(spr);

这里是第一个使用 Rect 的结果:

这里是没有 Rect 的第二个版本:

有人知道发生了什么吗?我需要使用使用 rect 的方法,因为将来我会从这张图片中创建一堆精灵。

Edit1:调试完两个版本的精灵后。我注意到没有 Rect 创建的那个显示了 0,0,240,240 的矩形。而不是我提供的 0,0,512,512。为什么是 240?

提前致谢。

【问题讨论】:

    标签: c++ cocos2d-x


    【解决方案1】:

    我设法弄清楚发生了什么。 Cocos2D-x 使用 director->setContentScaleFactor 和 glview->setDesignResolutionSize 作为一种让多分辨率/设备游戏变得更容易的方法。当您构建 Rect 以获得部分(或完整)纹理时,您必须考虑 CC_CONTENT_SCALE_FACTOR() 宏,以便获得正确的目标坐标。

    可以在这个链接查看:http://www.cocos2d-x.org/wiki/Multi_resolution_support

    干杯。

    【讨论】:

      【解决方案2】:

      如果您的vecSize 大于图像的大小,则图像会变形。 所以如果你不知道图片的真实尺寸,不要设置。

      【讨论】:

      • 抱歉,这不是一个有效的答案。这是一个精简的例子,我需要从这个图像中创建一些精灵。所以,我需要该方法的 Rect 版本。
      • 你能告诉我你的 glview 屏幕尺寸吗?
      • 960x640 在我当前检查的设备中
      • 我做了测试,终于知道为什么了,你的设备屏幕尺寸是640*960,但是cocos2d设置的是320*640,contentScale是2.0,所以你的图片尺寸变成了240
      • 这一切都取决于您配置的逻辑屏幕和目标屏幕分辨率。资源设计解决方案也发挥了重要作用。看看我在答案中发布的链接。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-19
      • 2012-08-30
      • 2012-10-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多