我正在使用SpriteKit的带有多边形帮助器工具的SKPhysicsBody提供的答案为我的Sprite节点创建物理实体的多边形

但是CGPathMoveToPoint / CGPathAddLinetoPoint方法的offset参数令人困惑(我也无法在Apple的文档中找到引用)。

在该脚本生成的代码中,offsetX和offsetY定义为:

CGFloat offsetX = sprite.frame.size.width * sprite.anchorPoint.x;
CGFloat offsetY = sprite.frame.size.height * sprite.anchorPoint.y;

在演示中提供的gif中,它是:

CGFloat offsetX = sprite.frame.size.width/2; 
CGFloat offsetY = sprite.frame.size.height/2;

这两个偏移量均用于纠正CGPathMoveToPoint / CGPathAddLinetoPoint方法中的参数,例如:

CGPathMoveToPoint(path, NULL, 0 - offsetX, 0 - offsetY); (for the bottom left corner of the texture)
CGPathAddLineToPoint(path, NULL, 11 - offsetX, 0 - offsetY); 
  1. 为什么需要此偏移量?

  2. 对于纹理的左下角,为什么我不能只提供(0,0)像这样:

    CGPathMoveToPoint(path,NULL,0,0);

  3. 当Sprite节点在屏幕上移动时,此偏移量(如果需要)会改变吗?

  4. 如果父场景的锚点位于左上角,则这些方法的偏移应为多少?

#1楼 票数:0

您要引用的偏移量变量只是一个起点。 您可以轻松地用固定的起始坐标(如0,0)替换变量。

您的问题是关于物理物体的,因此在这种情况下锚点不适用。 物理实体0,0坐标始终相对于节点的宽度和高度居中。 因此,在更改节点的锚点时,会影响其坐标的居中方式,但对物理实体没有影响。

  ask by DroidHeaven translate from so

未解决问题?本站智能推荐:

1回复

Sprite Kit -Update方法中删除数组中的SKSpriteNodes

我在sprite工具包中有一个sprite数组,在我的更新方法中,我检查了这些sprite是否落在屏幕底部。 如果他们这样做了,我将其从其父级中删除,并将它们从其数组中删除..我想知道的是,如果这是最佳做法,他们是否会这样做? 这会降低性能吗? 如果是这样,实现此目标的最佳方法是什么?
2回复

有没有办法使用SKSpriteNode和PhysicsBody参数使用Spritekit制作柔体?

我有以下精灵落在屏幕的底部: 当它碰到屏幕的底部边界时,有没有办法使它的侧面凸出? 像果冻一样的东西或柔软的身体仍然保持其形状在一定程度上,但在自重下膨胀? 我希望这是有道理的....
1回复

一次添加了SKSpriteNode,但出现了令人困惑的六次

我只在动作块中添加了SKSpriteNode,项目符号,但不知何故,它导致六个不同的节点出现在模拟器中。 我对在模拟器中出现六个节点感到非常困惑。 为什么会这样呢? 可能是Xcode中的错误吗? 我删除了我代码的无关部分,因此您不必通读所有代码。 先感谢您!
1回复

使用PhysicsKit类型调用的SKPhysicsContactDelegate方法?

我在SKPhysicsBody添加了一些便捷方法,以便在SKPhysicsContactDelegate类的didBeginContact方法中更轻松地应对它们。 看起来,委托使用了不同的类型,但随后进行了记录。 当我尝试在didBeginContact中使用此便捷方法时,出现异常。
3回复

使用bodyWithPolygonFromPath:方法进行蛋形时,断言失败

我正在模拟一个蛋形SKSprite节点的物理。 但是,有断言失败错误发生: 断言失败:(edge.LengthSquared()> 1.19209290e-7F * 1.19209290e-7F),函数集,文件/SourceCache/PhysicsKit_Sim/Physic
1回复

在Touch移动方法中,物理体大小不随SKSpriteNode尺寸变化而变化

我正在尝试创建一个弹簧发射器,当触摸在场景上移动时,弹簧会在触摸被拖动的同时盘绕并且在触摸结束方法上弹出弹簧上方的物品。 为此我改变了触摸移动方法中SKSpriteNode的大小和位置 - 但SKSpriteNode的物理主体没有改变它是这样的 - 请帮助..如果改变SKSp
1回复

没有调用SKPhysicsContactDelegate协议方法

在我的.h文件中,我已经添加了委托: 在我的.m文件中,我有这个 我也有节点,他们有时会彼此接触。 他们正确设置了他们的physicsBody属性,我似乎无法弄清楚问题是什么。 有什么问题?谢谢!
1回复

快速跳转方法碰撞对象和地面

我正在开发iPhone游戏。 基本上如果英雄碰到障碍物就放弃了。 现在我想给我的英雄增加跳跃能力。 但是,当我在地面上使用“ physicsBody = SKPhysicsBody(rectangleOfSize:size)”时,一旦游戏开始并且英雄出现在地面上,“ func didBeg