2014-10-16 57 views
1

我对SpriteKit有点新了,而且我在物理上遇到了一些麻烦,我尝试了很多事情来让SKSpriteNode用力或冲动移动,但它永远不会移动,只有重力影响它,当我设置它。iOS - SpriteKit:ApplyImpulse无法在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; 
} 

这里是我的大部分代码在我的主场景,有没有其他的像除外或更新一些的touchesBegan空的方法..我缺少的东西?我已经尝试了很多东西,我开始失去它了哈哈

非常感谢您的帮助!

+0

你写了错误的代码,你的pointOfView不受重力影响,你只是在它上面应用一个小的impusle。 – dragoneye 2014-10-17 05:31:18

回答

-1

你写了错误的代码你的pointOfView不受重力的影响,你只是在它上面应用一个小的impusle。 self.physicsWorld.gravity = CGVectorMake(0.0,0.0)改为self.physicsWorld.gravity = CGVectorMake(0.0,-9.8);使用self.physicsWorld.gravity =如果你寻找负向重力向上的方向和CGVectorMake(0.0,9.8),如果你寻找正面向下的重力。并尝试在间隔后应用冲动[pointOfView.physicsBody applyImpulse:CGVectorMake(10.0f,-10.0f)];

+0

不幸的是,我不想将重力应用到我的节点,相反,我已经尝试过它,它正在工作,什么不工作是你谈论的这个小的障碍,节点根本不动。 – user3198930 2014-10-20 13:47:35

0
pointOfView.physicsBody.dynamic = YES; 

动态属性决定了一个精灵是否应该受物理力的影响。

+0

我已经试过这个,但它不工作.. :( 加上根据官方文档,此属性默认设置为是,因为我没有设置为否,我不应该需要指定它.. – user3198930 2014-10-20 13:50:33

0

这是一个有点晚了,但得到的答复是在这里:Not able to apply impulse to SKSpriteNode physics body

的问题是,你已经创建了一个物理体bodyWithEdgeLoopF​​romRect;这创建了一个静态物理体,它不会响应applyImpulse。您需要使用bodyWithRectangleOfSize添加物理体:相反。

相关问题