• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

使用 SpriteKit 渲染时,iOS UIBezierPath 是颠倒的?

[复制链接]
菜鸟教程小白 发表于 2022-12-12 22:18:19 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

轨道路径是使用顶部/左侧原点 (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 声誉。



Best Answer-推荐答案


对不起,我认为这是不言自明的。

来自 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);

关于使用 SpriteKit 渲染时,iOS UIBezierPath 是颠倒的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23788985/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap