0

我有一个单像素精灵。在这个精灵中,我添加了四个精灵,每一个都是正方形的四分之一。为了抵消精灵,我所做的就是改变它们的锚点。

例如:

右上角的正方形位于锚点:(0,0);右下角:(0,1);左下角:(1,1);左上角:(1,0);

我希望精灵边缘完美地相遇,使它看起来像一个大正方形。相反,每个正方形的边缘之间都有黑线,所以看起来我把四个正方形放在一起。

我使用纹理打包器创建一个包含各种方块的精灵表。

cocos2d-x 中是否有一些设置或我必须更改一些代码才能使精灵完美对齐?

编辑:这适用于 cocos2d-x 3.1.1 及更高版本。更改锚点是必要且不可避免的。

编辑:我使用使用 TexturePacker 创建的精灵表中的精灵帧。这就是问题所在。请看下面我的回答。

4

3 回答 3

2

该问题与使用精灵表(使用 TexturePacker 创建)将各个部分保持在一起有关。当您将精灵表中的帧放置在一起以形成完整的图像时,会出现线条。

您可以通过将 Texturepacker 中的“Extrude”选项设置为至少 1 来使黑线消失。

编辑:对于那些基于物理模拟更新精灵位置的人,黑线可能是由“子像素”位置引起的。尝试将对象移动完整像素。或者使用“亚像素”搜索其他解决方案的答案。

于 2014-07-09T12:02:53.943 回答
1

将位置计算转换为 int 类型没有帮助?

通常在某些浮点计算(如乘法和除法)然后编译器自动降级为 int 后可能会导致 1px 的变化。

例如 26.500123 可以被视为像素 26 或 27,具体取决于您的投射方法。

测试用例:

你说这是你做的吗?

auto testNode = Node::create();
auto s1 = Sprite::create("Images/1.png");
s1->cocos2d::Node::setAnchorPoint(Point(1,0));
auto s2 = Sprite::create("Images/2.png");
s2->cocos2d::Node::setAnchorPoint(Point(0,0));
auto s3 = Sprite::create("Images/3.png");
s3->cocos2d::Node::setAnchorPoint(Point(1,1));
auto s4 = Sprite::create("Images/4.png");
s4->cocos2d::Node::setAnchorPoint(Point(0,1));
testNode->addChild(s1);
testNode->addChild(s2);
testNode->addChild(s3);
testNode->addChild(s4);
testNode->setPosition(Point(screenSize.width/2,screenSize.height/2));
this->addChild(testNode);

你有1px的差距?我对 cocos2dx 3.1 做了同样的事情

我得到了这位好女士 iPhone 5渲染截图

于 2014-07-08T18:54:02.333 回答
0
  1. 不要改变anchorPoint,你以后会后悔的。计算每个精灵的正确位置。

  2. 确保位置 x/y 位于像素边界上。尽管由于像素密度是点分辨率的 2 倍,Retina 设备也允许 0.5 个位置,但转换为 int 可以解决问题。

第 2 点也是您不应该使用 anchorPoint 的原因,因为在使用 anchorPoint 偏移纹理时,您无法将位置转换为整数。

于 2014-07-08T09:14:45.920 回答