2014-11-10 11 views
0

을하고 여기 저기 몇 가지 튜토리얼을 얻으려고 .. 내가 높은 건물의 이동이 stickman 같은 Stickman의 그림을하기 위해 노력하고있어SpriteKit : 나는 아직도 spritekit 슈퍼 멍청한 놈이야 Stickman의 바운스

지상 노드

노드가 원

의 physicsbody 공은 그러나 구형의 물리학 몸을하려고 할 때 ...이 반송되지 않을 때 잘 작동을 쳤을 때와 반송 .. 난이 코드 snipt을 시도했습니다

중력 세계의

SKSpriteNode * victim = [SKSpriteNode spriteNodeWithImageNamed:@"victim_base"]; 
    victim.position = CGPointMake(5, 500); 
    victim.zPosition = 2; 
    victim.name = @"victim"; 
    victim.xScale=0.7; 
    victim.yScale=0.7; 
    [self addChild:victim]; 

    CGFloat offsetX = victim.frame.size.width * victim.anchorPoint.x; 
    CGFloat offsetY = victim.frame.size.height * victim.anchorPoint.y; 

    CGMutablePathRef path = CGPathCreateMutable(); 

    CGPathMoveToPoint(path, NULL, 13 - offsetX, 59 - offsetY); 
    CGPathAddLineToPoint(path, NULL, 43 - offsetX, 58 - offsetY); 
    CGPathAddLineToPoint(path, NULL, 38 - offsetX, 3 - offsetY); 
    CGPathAddLineToPoint(path, NULL, 7 - offsetX, 3 - offsetY); 

    CGPathCloseSubpath(path); 
    victim.physicsBody = [SKPhysicsBody bodyWithPolygonFromPath:path]; 
    victim.physicsBody.friction = 0.0f; 
    // 4 
    victim.physicsBody.restitution = 1.0f; 
    // 5 
    victim.physicsBody.linearDamping = 0.0f; 
    // 6 
    victim.physicsBody.allowsRotation = NO; 

    [victim.physicsBody applyImpulse:CGVectorMake(10.0f, -10.0f)]; 
그리고 설치가

self.physicsWorld.gravity = CGVectorMake(0.0f, 0.0f); 
// 1 Create an physics body that borders the screen 
SKPhysicsBody* borderBody = [SKPhysicsBody bodyWithEdgeLoopFromRect:self.frame]; 
// 2 Set physicsBody of scene to borderBody 
self.physicsBody = borderBody; 
// 3 Set the friction of that physicsBody to 0 
self.physicsBody.friction = 0.0f; 

하지만 그는 점프 그냥 정말 잘못된 here.any 무엇인지 알아낼 수 없습니다 결코

을 수신 거부와 함께 지상에 여전히 남아있다 도움을 주시면 감사하겠습니다.

+0

설정 scene.showsPhysics = TRUE이 샘플을. 물리학자가 어떻게 나오는지 확인할 수 있습니다. – ZeMoon

+0

왜 중력을 꺼 냈습니까? 'self.physicsBody' 속성을 설정할 때'self.frame' 값을 확인해보십시오. – Astoria

+0

나는이 튜토리얼에 따라이 코드를 끄겠다. http://www.raywenderlich.com/49721/how-to-create-a-breakout-game-using-spritekit 그를 영원히 튀게한다. –

답변

0

체크 아웃 화면에 physicsBodies을 렌더링 할

#import "milkhuntMyScene.h" 

@implementation milkhuntMyScene 

-(id)initWithSize:(CGSize)size {  
    if (self = [super initWithSize:size]) { 
     /* Setup your scene here */ 

     self.backgroundColor = [SKColor colorWithRed:0.15 green:0.15 blue:0.3 alpha:1.0]; 

     SKLabelNode *myLabel = [SKLabelNode labelNodeWithFontNamed:@"Chalkduster"]; 

     myLabel.text = @""; 
     myLabel.fontSize = 30; 
     myLabel.position = CGPointMake(CGRectGetMidX(self.frame), 
             CGRectGetMidY(self.frame)); 

     [self addChild:myLabel]; 
     self.physicsBody=[SKPhysicsBody bodyWithEdgeLoopFromRect:self.frame]; 
     self.physicsWorld.gravity=CGVectorMake(0.0, -9.8); 

     SKSpriteNode *node=[SKSpriteNode spriteNodeWithImageNamed:@"dummy"]; 
     node.physicsBody=[SKPhysicsBody bodyWithRectangleOfSize:CGSizeMake(node.size.width, node.size.height)]; 
     node.position=CGPointMake(200, 50); 
     node.physicsBody.affectedByGravity=FALSE; 
     node.physicsBody.dynamic=TRUE; 
     node.physicsBody.restitution=1; 
     node.physicsBody.allowsRotation=FALSE; 
     node.physicsBody.mass=9999999; 

     [self addChild:node]; 

    } 
    return self; 
} 
// 




// 
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 
    /* Called when a touch begins */ 

    for (UITouch *touch in touches) { 
     CGPoint location = [touch locationInNode:self]; 

     SKSpriteNode *sprite = [SKSpriteNode spriteNodeWithImageNamed:@"Spaceship"]; 
     sprite.xScale=sprite.yScale=0.5; 
     sprite.position = location; 
     sprite.physicsBody.allowsRotation=FALSE; 
     sprite.physicsBody.restitution=1.0; 
      sprite.physicsBody.angularDamping=0.0; 
     sprite.physicsBody.linearDamping=0.0; 
     // SKAction *action = [SKAction rotateByAngle:M_PI duration:1]; 

     //[sprite runAction:[SKAction repeatActionForever:action]]; 
     sprite.physicsBody=[SKPhysicsBody bodyWithRectangleOfSize:CGSizeMake(sprite.size.width, sprite.size.height)]; 
     [self addChild:sprite]; 
    } 
} 

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

@end 
+0

나는이 예제를 시도했지만 똑같다. –