2014-07-11 4 views
1

SKSpriteNode를 그릴 때마다 그려야 할 위치보다 더 낮게 그려집니다. 하지만 다른 SKSpriteNode가 문제없이 잘 작동하는 것 같습니다.스프라이트 키트 - 잘못된 위치에 그려지는 SKSpriteNode

이 내 현재 코드입니다 : 폭탄이 지상 거의 직접적으로 가정하고 있지만

func initMainGround() { 
    let gSize = CGSizeMake(self.size.width/4*3, 120); 
    ground = SKSpriteNode(color: SKColor.brownColor(), size: gSize); 
    ground.name = gName; 

    ground.position = CGPointMake(0, 0); 

    ground.physicsBody = SKPhysicsBody(rectangleOfSize: ground.size); 
    ground.physicsBody.restitution = 0.0; 
    ground.physicsBody.friction = 0.0; 
    ground.physicsBody.angularDamping = 0.0; 
    ground.physicsBody.linearDamping = 0.0; 
    ground.physicsBody.allowsRotation = false; 
    ground.physicsBody.usesPreciseCollisionDetection = true; //accurate collision 
    ground.physicsBody.affectedByGravity = false; 
    ground.physicsBody.dynamic = false; 
    ground.physicsBody.categoryBitMask = gBitmask; 
    ground.physicsBody.collisionBitMask = pBitmask; 

    self.addChild(ground); 
} 

func addBomb() { 
    let bomb = SKSpriteNode(imageNamed: "trap"); 
    bomb.size = CGSizeMake(30, 30); 
    bomb.position = CGPointMake(ground.position.x, actualY+10); 

    bomb.physicsBody = SKPhysicsBody(circleOfRadius: bomb.size.width/2); 
    bomb.physicsBody.restitution = 0.0; 
    bomb.physicsBody.allowsRotation = false; 
    bomb.physicsBody.usesPreciseCollisionDetection = true; 
    bomb.physicsBody.affectedByGravity = false; 
    bomb.physicsBody.dynamic = false; 
    bomb.physicsBody.categoryBitMask = bBitmask; 
    bomb.physicsBody.collisionBitMask = pBitmask; 
    bomb.physicsBody.contactTestBitMask = pBitmask; 

    self.addChild(bomb); 
} 

하지만 폭탄 대신 거의 100 + 지상 것 같다.
게임이 가로 방향이므로 바닥이 화면 높이의 거의 1/3을 채우고 있지만 정상보다 낮습니다.

왜 땅이 엉뚱한 위치에 그려지지만 폭탄이 정확한 위치에 그려 집니까?

답변

3

이것은 SpriteKit을 사용하기 시작할 때와 같은 문제인 것 같습니다. 게임에서 .sks 파일을 사용하여 기본 장면을 표시하면이 장면은 .sks 파일에 정의 된 임의의 차원 값을 사용합니다.

씬의 크기를 동적으로 설정하여이 경우인지 확인하십시오. 당신의 didMoveToView 기능에 는 함수의 상단에 이런 식으로 뭔가를 추가

self.size = view.bounds.size 

.sks 파일에서 치수 값이 실제 화면 크기로 무시됩니다 이런 식으로.

희망이 도움이됩니다.

+0

.sks 파일 크기를 필요한 실제 크기로 이미 변경했습니다. self.size.width 또한 올바른 너비를 반환합니다. 그래서'self.size = view.bounds.size'는 정말로 여기에 도움이되지 않았습니다 – junyi00

+0

이것은 대단한 답변입니다. 나는 위치에 대한 백분율을 기반으로 전체 앱을 계획 했으므로 벽에 머리를 두드렸다. – Mike

+0

감사합니다. 내 문제도 정리했습니다. –

2

지상 이미지에 앵커 포인트를 설정합니다.

ground.anchorPoint = CGPointZero // same as CGPointMake(0, 0) 
ground.position = CGPointZero 

기본 앵커 포인트는 이미지의 중심입니다 (0.5, 0.5). 이렇게 설정하지 않으면 바탕 이미지의 중심이 화면의 왼쪽 하단 모서리에 그려집니다 (0, 0).

당신의 폭탄은 같은 이유로 그 위치를 예상하고, 센터는 지정한 위치에 배치됩니다.

+0

유용했던 사람! – Skoua

관련 문제