我正在为引擎中的组件创建一个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调用中,由于我将原点随位置移动,因此可以将坐标放置为发动机坐标系,并使其正确显示。
我进行绘制并在默认SpriteKit项目的- (void)didMoveToView:(SKView *)view
中设置引擎。
Screen scr;
scr.width = self.view.frame.size.width;
scr.height = self.view.frame.size.height;
_testEngine->setScreen(scr);
[self visualizeEngineBounds];
您会认为这意味着引擎太大,因此我将引擎初始化大小缩小了0.5,这就是我得到的
请注意左下角仍不在正确位置。几乎就像坐标系略有偏移一样。为什么会这样?