【发布时间】:2022-04-30 00:59:16
【问题描述】:
我们目前正在开发一款涉及图形(由边连接的节点)的游戏,我们希望能够移动节点。我们让节点移动(响应触摸),但是当边缘(使用 .png 图像初始化)由于节点移动而重新渲染时,它们看起来是锯齿状的。我们尝试过使用 Aliasing 和 Anti-Aliasing,但无论我们做什么,边缘都是锯齿状的。
这里是我们初始化边缘图像的地方(带有图像文件):
-(id) initWithSet:(int)setNum Level:(int) levelNum
{
if( (self=[super init]) ) {
<code omitted>
for (NSArray *e in self.level.targetGraph) {
<code omitted>
CCSprite *edgeOutline = [CCSprite spriteWithFile:@"EdgeOutline.png"];
[edgeOutline setPosition:ccp((ax+bx)/2, (ay+by)/2)];
edgeOutline.scaleX = (dist * edgeOutline.scaleX)/edgeOutline.contentSize.width;
edgeOutline.scaleY = (self.nodeSize * 0.5 * edgeOutline.scaleY)/edgeOutline.contentSize.height;
edgeOutline.rotation = -angle;
[outlines addChild:edgeOutline];
CCSprite *edgeFill = [CCSprite spriteWithFile:@"EdgeFill.png"];
[edgeFill setPosition:ccp((ax+bx)/2, (ay+by)/2)];
edgeFill.scaleX = (dist * edgeFill.scaleX)/edgeFill.contentSize.width;
edgeFill.scaleY = (self.nodeSize * 0.4 * edgeFill.scaleY)/edgeFill.contentSize.height;
edgeFill.rotation = -angle;
[fills addChild:edgeFill];
}
return self;
}
这里是我们更新边缘图的地方(使用 nextFrame 方法的后半部分):
- (void) nextFrame:(ccTime)dt {
for (NSArray *e in self.level.graph) {
CCSprite *a = [self.graphNodeOutlines objectForKey:[e objectAtIndex:0]];
double ax = a.position.x;
double ay = a.position.y;
CCSprite *b = [self.graphNodeOutlines objectForKey:[e objectAtIndex:1]];
double bx = b.position.x;
double by = b.position.y;
double dx = ax-bx;
double dy = ay-by;
double angle = 90;
if (dx != 0) {
angle = atan2(ay-by, ax-bx)*180/M_PI;
}
double dist = sqrt(dx*dx+dy*dy);
//TODO: get anti-aliasing to work in this next part!
CCSprite *edgeOutline = [self.graphEdgeOutlines objectForKey:e];
[edgeOutline setPosition:ccp((ax+bx)/2, (ay+by)/2)];
edgeOutline.scaleX = (dist)/edgeOutline.contentSize.width;
edgeOutline.scaleY = (self.nodeSize * 0.25)/edgeOutline.contentSize.height;
edgeOutline.rotation = -angle;
//The line we hoped would fix the jagged edge problem.
[[edgeOutline texture] setAntiAliasTexParameters];
CCSprite *edgeFill = [self.graphEdgeFills objectForKey:e];
[edgeFill setPosition:ccp((ax+bx)/2, (ay+by)/2)];
edgeFill.scaleX = (dist)/edgeFill.contentSize.width;
edgeFill.scaleY = (self.nodeSize * 0.2)/edgeFill.contentSize.height;
edgeFill.rotation = -angle;
//The (same) line we hoped would fix the jagged edge problem.
[[edgeFill texture] setAntiAliasTexParameters];
}
}
我们正在使用 Cocos2D v2.0 和 XCode v4.5。
任何帮助将不胜感激。谢谢!
更新:显示问题的图片:
【问题讨论】:
-
1-2 张截图(正确和错误)将极大地帮助理解问题
-
更新了图片链接。感谢您的反馈!
-
如果可能,请向我们展示 EdgeFill.png 和 EdgeOutline.png
-
EdgeFill.png 和 EdgeOutline.png 分别是黑白矩形。没有边框 - 黑白矩形占据了 png 中的整个空间。
标签: xcode cocos2d-iphone antialiasing