IOS 8精灵套件与顶部和底部碰撞而不是两侧碰撞?

时间:2015-09-07 10:25:28

标签: ios objective-c sprite-kit collision bounce

我这是一个简单的效果,一个球弹跳的屏幕它只适用于顶部和底部边缘idk为什么,此外,当我在initwithsize方法中的iOS 7精灵工具包模板中尝试此代码时,它的工作原理 是一个bug还是什么?     //

#import "GameScene.h"

@implementation GameScene



-(void)didMoveToView:(SKView *)view {
    self.backgroundColor = [SKColor whiteColor];
    SKSpriteNode *ball =[SKSpriteNode spriteNodeWithImageNamed:@"ball"];
    ball.position =CGPointMake(self.frame.size.width/2, self.frame.size.height/2);
    ball.physicsBody = [SKPhysicsBody bodyWithCircleOfRadius:ball.frame.size.width/2];
    self.physicsBody = [SKPhysicsBody bodyWithEdgeLoopFromRect:self.frame];
    self.physicsWorld.gravity = CGVectorMake(0, 0);
    CGVector impulse =     CGVectorMake(20,20);
    [self addChild:ball];

    [ball.physicsBody applyImpulse:  impulse];

    ball.physicsBody.restitution = 1;
    ball.physicsBody.friction = 0;
    ball.physicsBody.linearDamping = 0;




  /* 
   SKSpriteNode *wall =[SKSpriteNode spriteNodeWithImageNamed:@"wall"];

   SKSpriteNode *bar =[SKSpriteNode spriteNodeWithImageNamed:@"bar"];

   wall.position= CGPointMake(self.frame.size.width/2, 103);
    bar.position = CGPointMake(self.frame.size.width/2,  (wall.frame.size.height));
    [self addChild:wall];
    [self addChild:bar];


    */

}


-(void)update:(CFTimeInterval)currentTime {
    /* Called before each frame is rendered */
}

@end

2 个答案:

答案 0 :(得分:2)

  1. 您没有设置非常重要的锚节点,将其设置为CGPointMake(0.5,0.5)

  2. 重力矢量应设置为(0,-9.8),但是(0,0)也会改变它。

  3.   

    现在你的问题,

    你必须为球和你的直接设置锚点(0.5,0.5),无论它是什么(自我),你需要将物理体设置为你分配的大小的一半。

    通过将锚点设置到身体的中心(0.5,0.5),您告诉物理引擎通过将中心视为原点来设置物理体,在这种情况下,您需要设置一半的边长度和球,你必须设置好极了。

    但ios7如何运作我真的很惊讶,它不应该,但我希望在这些修正之后都能工作。

答案 1 :(得分:1)

拉萨姆关于锚点的说法不准确,默认位置为(0.5,0.5)。

显然它与场景的大小有关。您的场景比屏幕宽。 NSLog场景的宽度来测试我的假设。