【发布时间】:2014-05-09 07:55:46
【问题描述】:
我是 SpriteKit 的新手。
我正在尝试解决这个问题: 我的场景中有两个球,当我拖动一个球并“击中”另一个球时,这个球应该使用正确的物理原理滚开。
在我的测试代码中,我只能“移动”第二个球,他没有使用击球的“力”...
这是我的场景代码:
#import "HittingScene.h"
@interface HittingScene()
@property (nonatomic, strong) SKShapeNode *targetBall;
@property (nonatomic, strong) SKShapeNode *mainBall;
@property (nonatomic, weak) SKShapeNode *draggedNode;
@end
@implementation HittingScene
- (id)initWithSize:(CGSize)size
{
if (self = [super initWithSize:size]) {
[self addChild:[self createMainBall]];
[self addChild:[self createTargetBall]];
[self setPhysicsBody:[SKPhysicsBody bodyWithEdgeLoopFromRect:self.frame]];
}
return self;
}
- (SKShapeNode *)createTargetBall
{
self.targetBall = [SKShapeNode node];
CGPathRef path = CGPathCreateWithEllipseInRect((CGRect){{-20, -20}, {40, 40}}, NULL);
[self.targetBall setPath:path];
CGPathRelease(path);
[self.targetBall setPosition:CGPointMake(200, 200)];
[self.targetBall setName:@"targetBall"];
[self.targetBall setPhysicsBody:[SKPhysicsBody bodyWithCircleOfRadius:20.0]];
self.targetBall.physicsBody.dynamic = YES;
self.targetBall.physicsBody.affectedByGravity = NO;
self.targetBall.physicsBody.restitution = 0.7;
return self.targetBall;
}
- (SKShapeNode *)createMainBall
{
self.mainBall = [SKShapeNode node];
CGPathRef path = CGPathCreateWithEllipseInRect((CGRect){{-20, -20}, {40, 40}}, NULL);
[self.mainBall setPath:path];
CGPathRelease(path);
[self.mainBall setPosition:CGPointMake(100, 100)];
[self.mainBall setName:@"mainBall"];
[self.mainBall setPhysicsBody:[SKPhysicsBody bodyWithCircleOfRadius:20.0]];
self.mainBall.physicsBody.dynamic = YES;
self.mainBall.physicsBody.affectedByGravity = NO;
self.mainBall.physicsBody.restitution = 0.7;
return self.mainBall;
}
- (void)touchesBegan:(NSSet*) touches withEvent:(UIEvent*) event
{
self.draggedNode = (SKShapeNode *)[self nodeAtPoint:[[touches anyObject] locationInNode:self]];
}
- (void)touchesMoved:(NSSet*) touches withEvent:(UIEvent*) event
{
self.draggedNode.position = [[touches anyObject] locationInNode:self];
}
- (void)touchesEnded:(NSSet*) touches withEvent:(UIEvent*) event
{
self.draggedNode = nil;
}
@end
有人知道如何解决这个问题吗?
谢谢, 乌尔克曼
【问题讨论】:
-
那是因为你经常改变节点(身体)的位置,因此身体没有从运动中积累的力(即速度保持为0)。为此,您必须通过 applyForce/Impulse 移动对象,或者根据球的先前位置自行计算冲击冲量,并由此得出运动速度并将其应用于任何接触的身体。
-
听起来很清楚 :) 但是我如何使用 applyForce 或 applyImpact 移动主球?我已经在网上搜索过,但没有找到任何东西:(
-
如果您找到了解决方案,请将其发布为答案。
标签: ios sprite-kit game-physics