2014-10-16 38 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添加物理體:相反。

相關問題