2014-09-25 7 views
0

SKNodes 및/또는 SKSpriteNodes에 애니메이션을 적용하는 것과 관련하여 몇 가지 질문이 있습니다. 첫 번째는 뷰가로드되면 이동시키는 방법입니다. 어떻게 그들을 충돌시키고 서로 떨어져서 튕기고 다른 방향으로 가야합니까? 나는 이것을 위해 SKScene을 사용하고있다. 또한 SKLabels와 함께 SKSriteNodes를 그룹화하는 방법이 있습니까?SKNodes 또는 SKSpriteNode에 애니메이션을 적용하고 충돌하여 튀기는 방법?

나는이 : 나는 SKSpriteNodes를 선언 곳

다음
#import <SpriteKit/SpriteKit.h> 

//constants for the collision bitmap 
static const uint32_t classicCategory = 1 << 0; 
static const uint32_t arcadeCategory = 1 << 1; 
static const uint32_t frenzieCategory = 1 << 2; 

@interface HomeScene : SKScene <SKPhysicsContactDelegate> { 

BOOL isSoundActionCompleted; 
} 

@end 

SKSpriteNode *classicMode = [SKSpriteNode spriteNodeWithImageNamed:@"bubble.png"]; 
    classicMode.size = CGSizeMake(130, 130); 
    classicMode.position = CGPointMake(self.size.width/2, self.size.height/2+50); 
    classicMode.name = @"classicMode"; 
    [self addChild:classicMode]; 

    SKLabelNode *classicTitle = [SKLabelNode labelNodeWithFontNamed:@"Noteworthy"]; 
    classicTitle.text = @"Classic"; 
    classicTitle.fontSize = 25; 
    classicTitle.horizontalAlignmentMode = SKLabelHorizontalAlignmentModeCenter; 
    classicTitle.verticalAlignmentMode = SKLabelVerticalAlignmentModeCenter; 
    classicTitle.fontColor = [SKColor darkGrayColor]; 
    classicTitle.position = CGPointMake(self.size.width/2, self.size.height/2+50); 
    classicTitle.name = @"classicTitle"; 
    [self addChild:classicTitle]; 

여기에 다른 하나

SKSpriteNode *arcadeMode = [SKSpriteNode spriteNodeWithImageNamed:@"bubble.png"]; 
    arcadeMode.size = CGSizeMake(130, 130); 
    arcadeMode.position = CGPointMake(self.size.width/2+68, self.size.height/2-65); 
    arcadeMode.name = @"arcadeMode"; 
    [self addChild:arcadeMode]; 

    SKLabelNode *arcadeTitle = [SKLabelNode labelNodeWithFontNamed:@"Noteworthy"]; 
    arcadeTitle.text = @"Arcade"; 
    arcadeTitle.fontSize = 25; 
    arcadeTitle.horizontalAlignmentMode = SKLabelHorizontalAlignmentModeCenter; 
    arcadeTitle.verticalAlignmentMode = SKLabelVerticalAlignmentModeCenter; 
    arcadeTitle.fontColor = [SKColor darkGrayColor]; 
    arcadeTitle.position = CGPointMake(self.size.width/2+68, self.size.height/2-65); 
    arcadeTitle.name = @"arcadeTitle"; 
    [self addChild:arcadeTitle]; 

충돌입니다 :

//collision and contact detection 
    self.physicsBody.categoryBitMask = arcadeCategory; 

    //physics and collision detection 
    classicMode.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:classicMode.size]; 
    classicMode.physicsBody.dynamic = NO; //no gravity 
    classicMode.physicsBody.categoryBitMask = arcadeCategory; 

    arcadeMode.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:arcadeMode.size]; 
    arcadeMode.physicsBody.dynamic = NO; //no gravity 
    arcadeMode.physicsBody.categoryBitMask = classicCategory; 

그리고 충돌 감지 :

//collision detection 
    classicMode.physicsBody.categoryBitMask = classicCategory; 
    classicMode.physicsBody.collisionBitMask = arcadeCategory; 
    classicMode.physicsBody.contactTestBitMask = arcadeCategory; 

    arcadeMode.physicsBody.categoryBitMask = arcadeCategory; 
    arcadeMode.physicsBody.collisionBitMask = classicCategory; 
    arcadeMode.physicsBody.contactTestBitMask = classicCategory; 

답변

0

1) 코드의 첫 번째 문제는 두 개의 정적 몸이 그들을 동적으로 만들 충돌하지 않을 것입니다. 최소한 하나 이상의 몸을 동적으로 만드십시오.

2) 선형 운동의 경우 두 번째로 동적 몸체가있는 body.physicsBody.velocity 속성을 사용하십시오.

3) 비트 마스크 카테고리 변경 classicMode.physicsBody.categoryBitMask = classicCategory; classicMode.physicsBody.collisionBitMask = arcadeCategory; classicMode.physicsBody.contactTestBitMask = arcadeCategory;

arcadeMode.physicsBody.categoryBitMask = arcadeCategory; 

두 물체가 접촉하거나 서로 충돌하고 collisionBitMask가 겹치거나 서로

통과하도록 prevnet 위해 사용될 때 contactTestBitMask가 spritekit에 사용하는 기억 나 절단 arcadeMode.physicsBody.collisionBitMask = classicCategory; arcadeMode.physicsBody.contactTestBitMask = classicCategory; 에 정의되어 있기 때문에 코드에서 classicMode.physicsBody.categoryBitMask = classicCategory; classicMode.physicsBody.collisionBitMask = arcadeCategory; classicMode.physicsBody.contactTestBitMask = arcadeCategory; 그래서 필요를 redfine 없습니다

사용 contactTestBitMask 및 collisionBitMask 한 번 두 종류가 각각

4) didbegincontact 및 didEndContact 내부의 모든 충돌과 충돌 로직을 처리

+0

좋아 멋진 내가 다른 줄 것과 상호 작용 할 때 시도해 봐. – Ed3121577