首页 > 解决方案 > CGMutablePathRef 或 SKShapeNode 不在正确位置

问题描述

我正在为我的引擎中的一个组件创建一个 SpritKit 可视化,以帮助调试并允许我在没有完整图形负载的情况下测试功能。

我的第一个目标本质上是确保我可以将“引擎模拟”中的点与 SpriteKit 基元相关联。为了实现这一点,我试图在屏幕周围绘制一个简单的矩形。我认为这很简单,但我遇到了最奇怪的问题,就好像坐标系是错误的一样。

因此,为了绘制矩形(技术上是沙漏,我正在执行以下代码:

CGMutablePathRef path = CGPathCreateMutable();
CGPathMoveToPoint(path, nil, 0, 0);
CGPathAddLineToPoint(path, nil, engineSize.width, 0);
CGPathAddLineToPoint(path, nil, engineSize.width , engineSize.height);
CGPathAddLineToPoint(path, nil, 0, engineSize.height );
CGPathAddLineToPoint(path, nil, 0, 0);
CGPathAddLineToPoint(path, nil, engineSize.width, engineSize.height);
CGPathAddLineToPoint(path, nil, 0, engineSize.height);
CGPathAddLineToPoint(path, nil, engineSize.width,0);
_engineBounds = [SKShapeNode shapeNodeWithPath:path];
_engineBounds.lineWidth = 20;
_engineBounds.strokeColor = UIColor.purpleColor;
_engineBounds.position = CGPointMake(self.view.frame.size.width * -0.5, self.view.frame.size.height * -0.5);
_engineBounds.zPosition = 1;
_engineBounds.fillColor = UIColor.greenColor;
[self addChild:_engineBounds];

目标是在 CG 调用中,我可以根据引擎坐标系放置坐标,并让它们正确显示,因为我会随着位置移动原点。

- (void)didMoveToView:(SKView *)view我在默认 SpriteKit 项目中绘制并设置引擎。

Screen scr;
scr.width = self.view.frame.size.width;
scr.height = self.view.frame.size.height;
_testEngine->setScreen(scr);
[self visualizeEngineBounds];

但是,这导致发生以下情况 在此处输入图像描述

你会认为这意味着引擎太大,所以我将引擎初始化大小缩小了 0.5,这就是我得到的

在此处输入图像描述

请注意左下角仍然不在正确的位置。几乎就像坐标系稍微移动了一样。为什么会这样?

标签: sprite-kit

解决方案


推荐阅读