我对 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 这样的空方法之外什么都没有。我错过了什么吗?我尝试了很多东西,我开始失去它哈哈
非常感谢您的帮助!
3 回答
这有点晚了,但答案就在这里:无法对 SKSpriteNode 物理体施加冲动
问题是你用 bodyWithEdgeLoopFromRect 创建了一个物理体;这会创建一个静态物理主体,它不会响应 applyImpulse。您需要使用 bodyWithRectangleOfSize:添加物理主体。
动态属性决定精灵是否应受物理力的影响。
你写了错误的代码你的 pointOfView 不受重力影响你只是在它上面施加一个小的 impusle。
将此行 self.physicsWorld.gravity = CGVectorMake(0.0,0.0)更改为 self.physicsWorld.gravity = CGVectorMake(0.0,-9.8);如果你正朝向上方寻找负重力并且 CGVectorMake(0.0,9.8)如果你寻找向下的正重力。并尝试在间隔后施加冲动[5];