Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 缩放用斯普瑞泰诺制作的钟摆_Ios_Objective C_Sprite Kit_Skphysicsbody_Skphysicsjoint - Fatal编程技术网

Ios 缩放用斯普瑞泰诺制作的钟摆

Ios 缩放用斯普瑞泰诺制作的钟摆,ios,objective-c,sprite-kit,skphysicsbody,skphysicsjoint,Ios,Objective C,Sprite Kit,Skphysicsbody,Skphysicsjoint,我有一个带钟摆的工作钟,但摆臂的刻度不正确。下面是缩放前的样子 然后,在缩放之后 时钟面向下缩放,摆臂(绿线)也向下缩放,但它看起来像是围绕着它的中心点而不是面中心的支点缩放。我可以通过设置swing的锚点来修正这种缩放,使其向一端而不是中心缩放 swing.anchorPoint = CGPointMake(0, 0.5); 但这样做会导致钟摆不摆动。(我想是因为物理力作用于swing的锚定点,如果我把它移到一端,它就位于固定的销锚上) 如何使手臂向支点方向伸缩,同时仍允许手臂摆动? 这

我有一个带钟摆的工作钟,但摆臂的刻度不正确。下面是缩放前的样子

然后,在缩放之后

时钟面向下缩放,摆臂(绿线)也向下缩放,但它看起来像是围绕着它的中心点而不是面中心的支点缩放。我可以通过设置swing的
锚点来修正这种缩放,使其向一端而不是中心缩放

swing.anchorPoint = CGPointMake(0, 0.5);
但这样做会导致钟摆不摆动。(我想是因为物理力作用于swing的
锚定点
,如果我把它移到一端,它就位于固定的销锚上)

如何使手臂向支点方向伸缩,同时仍允许手臂摆动?

这是密码

// in my SKScene
ClockFace *face = [ClockFace face]; // just an SKNode subclass
face.name = @"face";
face.position = CGPointMake(150, 150);
[self addChild:face];

// add the pendulum
SKSpriteNode *fulcrum = [SKSpriteNode spriteNodeWithColor:[UIColor redColor] size:CGSizeMake(5, 5)];
[face addChild:fulcrum];
fulcrum.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:fulcrum.frame.size];
fulcrum.physicsBody.dynamic = NO;

SKSpriteNode *swing = [SKSpriteNode spriteNodeWithColor:[UIColor greenColor] size:CGSizeMake(190, 2)];
[face addChild:swing];
swing.position = CGPointMake(95, 0);
swing.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:swing.frame.size];

SKPhysicsJointPin *pinJoint = [SKPhysicsJointPin jointWithBodyA:fulcrum.physicsBody bodyB:swing.physicsBody anchor:face.position];
[self.physicsWorld addJoint:pinJoint];

在Swift 3示例中:

let nodeSize=CGSize(宽:10,高:10)
let node=SKSpriteNode(颜色:。红色,大小:nodeSize)
node.physicsBody=SKPhysicsBody(矩形:nodeSize)
node.physicsBody?.isDynamic=false
self.addChild(节点)
let node2Size=CGSize(宽:60,高:8)
设node2=SKSpriteNode(颜色:。绿色,大小:node2Size)
node2.position=CGPoint(x:5,y:0)

node2.anchorPoint=CGPoint(x:0.0,y:0.5)/缩放之所以奇怪,是因为你如何做锚点。想象一下,一条橡皮筋上有图钉。锚定点是指图钉所在的位置。现在来衡量一下。只要抓住橡皮筋拉就行了。当图钉位于中间时,您会发现很容易均匀地拉伸两侧(这就是您在y轴上所做的)。当你把它放在橡皮筋的左边时,你只能缩放右边(这就是你想要做的)

现在,使用PhysicsBody,您需要基于精灵定位点调整实体定位点。要做到这一点,您需要做一些数学计算:

let centerPoint = CGPointMake(sprite.size.width / 2 - (sprite.size.width * sprite.anchorPoint.x), sprite.size.height / 2 - (sprite.size.height * sprite.anchorPoint.y))
 sprite.physicsBody = SKPhysicsBody(rectangleOfSize: sprite.size, center: centerPoint)
使用“中心点”可以移动身体中心所在的位置

// in my SKScene
ClockFace *face = [ClockFace face]; // just an SKNode subclass
face.name = @"face";
face.position = CGPointMake(150, 150);
[self addChild:face];

// add the pendulum
SKSpriteNode *fulcrum = [SKSpriteNode spriteNodeWithColor:[UIColor redColor] size:CGSizeMake(5, 5)];
[face addChild:fulcrum];
fulcrum.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:fulcrum.frame.size];
fulcrum.physicsBody.dynamic = NO;

SKSpriteNode *swing = [SKSpriteNode spriteNodeWithColor:[UIColor greenColor] size:CGSizeMake(190, 2)];
[face addChild:swing];
swing.anchorPoint = CGPointMake(0,0.5);
CGPoint *centerPoint = CGPointMake(swing.size.width / 2 - (swing.size.width * swing.anchorPoint.x), swing.size.height / 2 - (swing.size.height * swing.anchorPoint.y));

swing.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:swing.frame.size center:centerPoint];

SKPhysicsJointPin *pinJoint = [SKPhysicsJointPin jointWithBodyA:fulcrum.physicsBody bodyB:swing.physicsBody anchor:face.position];
[self.physicsWorld addJoint:pinJoint];

添加缩放代码。我不明白。这不正是我的代码加上分配node2主播点吗?当我在那里移动锚时,接头不起作用。你能给我看一下你的代码来添加关节吗?也许你也能用语言告诉我这个想法是什么,也许你可以发布你的项目?谢谢我更新回购协议,并用锚定点代码回答:)@Maetschl他正在缩放人脸和钟摆,您可能需要更新代码以反映that@Maetschl-我的代码和你的代码相同,但有一个重要的例外没有在任何地方提到:
node2.position=CGPoint(x:5,y:0)
。销接头锚的微小推动x==5使其工作。它离锚越近,摆动越慢,甚至根本不摆动。你知道吗?知道为什么吗?谢谢。我想我明白你关于锚的作用的观点(解释得很好)。我仍然不明白为什么当橡皮筋的末端正好连接到另一个节点时,不会发生运动。请看我对@Maetschl的最后一条评论(他对代码很有帮助,但不太清楚它的含义以及它与我的问题的关系),你是否输入了我的代码来改变你的物理身体的中心?不。我应该试试这个(读得不够仔细)。我几小时后再试,然后告诉你。这可能是更正确的答案。谢天谢地,这很有意义,而且效果更好,因为它不依赖于任何无法解释的位置调整。(在objective c中,使用了我的变量名等)。我认为推的位置是为了保持手臂与fulcrom的边缘对齐。但是他的问题应该与你的问题相同,如果你做了
view.showsPhysics=true
你应该看到主体与图形不对应
// in my SKScene
ClockFace *face = [ClockFace face]; // just an SKNode subclass
face.name = @"face";
face.position = CGPointMake(150, 150);
[self addChild:face];

// add the pendulum
SKSpriteNode *fulcrum = [SKSpriteNode spriteNodeWithColor:[UIColor redColor] size:CGSizeMake(5, 5)];
[face addChild:fulcrum];
fulcrum.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:fulcrum.frame.size];
fulcrum.physicsBody.dynamic = NO;

SKSpriteNode *swing = [SKSpriteNode spriteNodeWithColor:[UIColor greenColor] size:CGSizeMake(190, 2)];
[face addChild:swing];
swing.anchorPoint = CGPointMake(0,0.5);
CGPoint *centerPoint = CGPointMake(swing.size.width / 2 - (swing.size.width * swing.anchorPoint.x), swing.size.height / 2 - (swing.size.height * swing.anchorPoint.y));

swing.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:swing.frame.size center:centerPoint];

SKPhysicsJointPin *pinJoint = [SKPhysicsJointPin jointWithBodyA:fulcrum.physicsBody bodyB:swing.physicsBody anchor:face.position];
[self.physicsWorld addJoint:pinJoint];