gpt4 book ai didi

iphone - 如何移动 CGPath 而不创建新的

转载 作者:行者123 更新时间:2023-12-03 19:33:57 27 4
gpt4 key购买 nike

我正在创建一个CGPath在我的游戏中定义一个区域,如下所示:

CGPathMoveToPoint   ( myPath, NULL, center.x, center.y );
CGPathAddLineToPoint( myPath, NULL,center.x + 100, center.y);
CGPathAddLineToPoint( myPath, NULL, center.x + 100, center.y + 100);
CGPathAddLineToPoint( myPath, NULL, center.x, center.y + 100);
CGPathCloseSubpath ( myPath );

我知道这只是一个正方形,我可以使用另一个 CGRect但我希望实际创建的路径实际上并不是一个矩形(我现在只是在测试)。然后简单地使用以下命令检测触摸区域:

if (CGPathContainsPoint(myPath, nil, location, YES))

一切正常,问题是 CGPath每秒可能移动多达 40 次。我怎样才能移动它而不需要创建一个新的?我知道我可以做这样的事情来“移动”它:

center.y += x;
CGPathRelease(myPath);
myPath = CGPathCreateMutable();
CGPathMoveToPoint ( myPath, NULL, center.x, center.y );
CGPathAddLineToPoint( myPath, NULL,center.x + 100, center.y);
CGPathAddLineToPoint( myPath, NULL, center.x + 100, center.y + 100);
CGPathAddLineToPoint( myPath, NULL, center.x, center.y + 100);
CGPathCloseSubpath ( myPath );

但我必须每秒释放并创建一条最多 40 次的新路径,我认为这可能会降低性能;这是真的吗?

我希望能够移动它,就像我目前正在移动一些CGRects一样通过简单地将原点设置为不同的值,这可以用 CGPath 实现吗? ?

谢谢。

编辑:我忘了提及我没有 GraphicsContext,因为我没有在 UIView 上绘图。 .

最佳答案

对 CGPath 应用变换并针对点进行测试,相当于对点应用变换。

因此,您可以使用

CGPoint adjusted_point = CGPointMake(location.x - center.x, location.y - center.y);
if (CGPathContainsPoint(myPath, NULL, adjusted_point, YES))

但是 CGPathContainsPoint 已经采用了 CGAffineTransform 参数(您对其进行了 NULL 编辑),因此您也可以使用

CGAffineTransform transf = CGAffineTransformMakeTranslation(-center.x, -center.y);
if (CGPathContainsPoint(myPath, &transf, location, YES))
<小时/>

如果您正在绘图,则可以直接更改绘图代码中的 CTM,而不用更改路径。

CGContextSaveGState(c);
CGContextTranslateCTM(c, center.x, center.y);
// draw your path
CGContextRestoreGState(c);

如果需要性能,请使用 CAShapeLayer

关于iphone - 如何移动 CGPath 而不创建新的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2255090/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com