2014-04-19 3 views
1

현재 스프라이트 키트를 사용중인 앱을 만들고 있습니다. 사용자가 스 와이프 할 때 객체의 속도를 변경하려고합니다. 그러나 함수가 호출 되더라도 속도는 변하지 않습니다. 나는 업데이트 기능에서 호출 다른 기능의 속도를 변경할 수 있어요iOS : 속도 설정이 작동하지 않습니다. 스프라이트 키트

- (void)swipedUp { 
    NSLog(@"swiped up!"); 
    _player.physicsBody.velocity = CGVectorMake(_player.physicsBody.velocity.dx, 200.0f); 
} 

: 여기 내 코드의 현재 버전에서

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

    _player = [self updatePlayer]; 

    [self moveBackgound]; 
} 

- (SKNode *)updatePlayer { 

    /* Create the node */ 

    SKNode *playerNode = [SKNode node]; 
    SKSpriteNode *sprite = [SKSpriteNode spriteNodeWithImageNamed:@"Car_normal.png"]; 

    // dx > 0 => right ; dy > 0 => up 
    _player.physicsBody.velocity = CGVectorMake(0.0f, 10.0f); 


    if (_player.physicsBody.velocity.dy < 0.0f) { 
     sprite = [SKSpriteNode spriteNodeWithImageNamed:@"Car_brake.png"]; 
    } 

    [playerNode addChild:sprite]; 


    return playerNode; 
} 

을, 나는 updatePlayer 함수에서 _player.physicsBody.velocity = CGVectorMake(0.0f, 10.0f); 맞추을 제거 , 그러나 그것은 여전히 ​​속도를 변화시키지 않습니다.

또한 swipedUp 함수에서 부울 값을 사용하여 updatePlayer 함수를 호출하여 속도를 변경해야합니다. 다시, ligne는 읽히지 만 속도 변화는 적용되지 않습니다. 이전에 다른 응용 프로그램에서 UILabel의 텍스트를 변경하는 비슷한 문제가있었습니다. 나는 [_player performSelector:<#(SEL)#> onThread:<#(NSThread *)#> withObject:<#(id)#> waitUntilDone:<#(BOOL)#>]을 사용했다. 그러나, CGVector를 전달해야합니다.이 CGVector는 'id'유형이 아니므로 해당 코드를 사용할 수 없습니다.

+0

왜 각 프레임에 대한 새로운 플레이어를 만드는? update :가 호출 될 때마다 _player를 생성하여 장면에 배치합니다. 이것은 결코 작동하지 않을 것입니다. –

+0

_player의 이미지를 변경하려면 저것을하고 있습니다. – user3079660

+0

몸체는 동적이어야하며 물리학 만 속도를 적용합니다. – balagurubaran

답변

0

본문은 동적이어야하며 physicsworld 만 속도를 적용 할 수 있습니다.

Swift3.0

_player.physicsBody.isDynamic = true 
관련 문제