![](/img/trans.png)
[英]applyImpulse on SKSpriteNode in touchesBegan not working
[英]iOS - SpriteKit : ApplyImpulse not working on SKSpriteNode
我对SpriteKit有点陌生,我在物理上遇到了一些麻烦,我尝试了很多方法使SKSpriteNode受到力或冲动移动,但它永远不会动,当我设置时,只有重力会影响它。
-(id)initWithSize:(CGSize)size {
if (self = [super initWithSize:size]) {
self.anchorPoint = CGPointMake(0.5, 0.5);
myWorld = [SKNode node];
[self addChild:myWorld];
SKSpriteNode* map = [SKSpriteNode spriteNodeWithImageNamed:@"grass"];
[myWorld addChild:map];
self.physicsBody = [SKPhysicsBody bodyWithEdgeLoopFromRect:map.frame];
self.physicsBody.friction = 0.0f;
self.physicsBody.categoryBitMask = 2;
self.physicsWorld.gravity = CGVectorMake(0.0, 0.0);
self.physicsWorld.contactDelegate = self;
pointOfView = [SKSpriteNode spriteNodeWithColor:[UIColor colorWithWhite:1 alpha:0.2] size:CGSizeMake(300, 548)];
[myWorld addChild:pointOfView];
pointOfView.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:pointOfView.frame.size];
pointOfView.physicsBody.friction = 0.0f;
pointOfView.physicsBody.restitution = 1.0f;
pointOfView.physicsBody.linearDamping = 0.0f;
pointOfView.physicsBody.allowsRotation = NO;
pointOfView.physicsBody.collisionBitMask = 2;
pointOfView.physicsBody.categoryBitMask = 3;
[pointOfView.physicsBody applyImpulse:CGVectorMake(10.0f, -10.0f)];
}
return self;
}
这是我主要场景中的大多数代码,除了诸如update或touchesBegan之类的空方法外,没有别的。 我已经尝试了很多东西,我开始失去它了哈哈
非常感谢您的帮助!
有点晚了,但是答案就在这里: 无法将脉冲应用于SKSpriteNode物理主体
问题是您已经使用bodyWithEdgeLoopFromRect创建了一个物理物体。 这将创建一个不会对applyImpulse做出响应的静态物理实体。 您需要使用bodyWithRectangleOfSize:添加物理物体。
pointOfView.physicsBody.dynamic = YES;
动态属性决定了精灵是否应该受到物理力的影响。
您编写了错误的代码,pointOfView不受重力影响,您只是在上面施加了一个小障碍。
将此行self.physicsWorld.gravity = CGVectorMake(0.0,0.0)更改为self.physicsWorld.gravity = CGVectorMake(0.0,-9.8); 如果您正在寻找向上的负重力,而CGVectorMake(0.0,9.8)如果您正在寻找向下的正重力。 并尝试在间隔后施加脉冲[pointOfView.physicsBody applyImpulse:CGVectorMake(10.0f,-10.0f)];
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.