使用顶部/左侧具有原点(0,0)的数据点定义轨道路径。
从这些点开始创建UIBezierPath
。
沿着路径的汽车移动以距离给出,从中计算百分比。
UIBezierPath
上的类别提供了沿路径的汽车坐标。
#import "UIBezierPath-Points.h"
CGPoint currCoordinates = [self.trackPath pointAtPercent:percent withSlope:nil];
问题在于SpriteKit会将轨道路径颠倒过来。
在SKScene
班级......
SKShapeNode *shapeNode = [[SKShapeNode alloc] init];
[shapeNode setPath:self.trackPath.CGPath]; <== path is rendered upside-down?
[shapeNode setPath:cgPath];
[shapeNode setStrokeColor:[UIColor blueColor]];
[self addChild:shapeNode];
我尝试了UiBezierPath
上的各种变换,但无法将坐标转换为SpriteKit
坐标,我认为这些坐标是基于中心的。
有谁知道如何从UIBezierPath
坐标转换为SpriteKit
(SKScene)坐标?
*没有enuf声望来发布图片。
答案 0 :(得分:1)
对不起,我觉得这是不言自明的。
来自Source
void ApplyCenteredPathTransform(UIBezierPath *path, CGAffineTransform transform)
{
CGRect rect = CGPathGetPathBoundingBox(path.CGPath);
CGPoint center = CGPointMake(CGRectGetMidX(rect), CGRectGetMidY(rect));
CGAffineTransform t = CGAffineTransformIdentity;
t = CGAffineTransformTranslate(t, center.x, center.y);
t = CGAffineTransformConcat(transform, t);
t = CGAffineTransformTranslate(t, -center.x, -center.y);
[path applyTransform:t];
}
void ScalePath(UIBezierPath *path, CGFloat sx, CGFloat sy)
{
CGAffineTransform t = CGAffineTransformMakeScale(sx, sy);
ApplyCenteredPathTransform(path, t);
}
然后
ScalePath(path, 1.0, -1.0);