2013-11-23 3 views
1

비행기가 SKSpriteNode입니다. 이미지가 내 Xcode 프로젝트에 [email protected]로 이름SKPhysicsBody가 너무 크게 나타납니다.

An airplane

: 여기 이미지 (300 픽셀의 X의 83px)이다.

는 지금은 비행기로 물리 몸을 추가 해요 :
CGFloat offsetX = self.size.width * self.anchorPoint.x; 
CGFloat offsetY = self.size.height * self.anchorPoint.y; 

CGMutablePathRef path = CGPathCreateMutable(); 

CGPathMoveToPoint(path, NULL, 24 - offsetX, 124 - offsetY); 
CGPathAddLineToPoint(path, NULL, 24 - offsetX, 47 - offsetY); 
CGPathAddLineToPoint(path, NULL, 339 - offsetX, 1 - offsetY); 
CGPathAddLineToPoint(path, NULL, 401 - offsetX, 3 - offsetY); 
CGPathAddLineToPoint(path, NULL, 452 - offsetX, 52 - offsetY); 
CGPathAddLineToPoint(path, NULL, 411 - offsetX, 78 - offsetY); 
CGPathAddLineToPoint(path, NULL, 295 - offsetX, 78 - offsetY); 
CGPathAddLineToPoint(path, NULL, 268 - offsetX, 93 - offsetY); 
CGPathAddLineToPoint(path, NULL, 95 - offsetX, 78 - offsetY); 
CGPathAddLineToPoint(path, NULL, 62 - offsetX, 124 - offsetY); 

CGPathCloseSubpath(path); 

self.physicsBody = [SKPhysicsBody bodyWithPolygonFromPath:path]; 

CGPath

가 나는 경우와 동일 CGPath와 함께 SKShapeNode을 추가 한 비행기의 물리학 몸을 디버깅하려면 SKPhysicsBody Path Generator

에 의해 생성되는 물리학 몸 :

SKShapeNode *shape = [[SKShapeNode alloc] init]; 
shape.path = path; 
shape.strokeColor = [SKColor colorWithRed:1.0 green:0 blue:0 alpha:0.5]; 
[self addChild:shape]; 

결과는 다음과 같습니다.

result

내가 잘못하고 있나?

추 신 : 흥미로운 점 유의 사항. 다음과 같이 CGPath을 지정하면

CGPathMoveToPoint(path, NULL, 24/3.0 - offsetX, 124/3.0 - offsetY); 
CGPathAddLineToPoint(path, NULL, 24/3.0 - offsetX, 47/3.0 - offsetY); 

모양이 비행기에 잘 어울립니다.

+0

@ 2x 버전의 이미지를 사용하여 생성기로 모양을 만들었습니까? "@ 2x"이미지를 사용하여 망막 체크 박스가 설정되어 있는지 확인하십시오. 일반적으로 망막 및 비 망막 장치에서 보이는 모습을 보려면 다양한 변형을 시도하십시오. 모양이 2x 배율로 보이지는 않지만 3x 또는 4x와 비슷합니다. – LearnCocos2D

+0

첨부 한 이미지를 사용하고 있습니다. 동일한 이미지가 Xcode 프로젝트로 이동합니다. 모양은 배율 3 배처럼 보입니다. –

답변

1

이것은 관련이 없지만 정의 된 모양은 concave입니다. 문서에 따르면 convex이어야합니다. 볼록한 모양으로 경로를 재현한다면 도움이 될까요?

enter image description here

예 : Convex and Concave polygons

+0

의사가 말하는 곳에 연결할 수 있습니까? 나는 그것이 당신이 오목한 것을 사용할 수 있다고 말했을 것이라고 확신하지만, 당신은 느린 게임 플레이를 할 것입니다. – Andriko13

+0

아, 그래. 아마 내 실수 야. 내가 읽은 모든 것에서 볼 때 오목한 SKPhysics 바디를 만들 수는 없지만 볼록 바디를 결합하여 오목한 몸체를 만들 수 있지만 볼록한 모양으로 이루어져 있습니다. (https://developer.apple.co.kr/library/ios/documentation/SpriteKit/Reference/SKPhysicsBody_Ref/index.html # // apple_ref/occ/clm/SKPhysicsBody/bodyWithPolygonFromPath :). "... laggy gameplay .."에 대해 어디서 읽었습니까? – RichS

+0

글쎄, 뒤늦은 부분은 내 생각에 말했듯이, 복잡한 볼록형 모양을 사용해야하므로 처리 속도가 더 빨라졌습니다. – Andriko13

0

원래 크기 (320 × 480) 또는 아이폰 5 + (568 X 320)의 경우를 사용한다. @ 2x/@ 4x 이미지는 망막 장치의 고해상도 이미지를 제공하기위한 것입니다. 그러나 이전 버전과의 호환성을 위해 모든 장치는 여전히 동일한 좌표계를 공유합니다. 난 당신이 지점이 아닌 픽셀을 계산해야 같은데요

SKSpriteNode *sprite = [SKSpriteNode spriteNodeWithImageNamed:@"jPfsF.png"]; 

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

CGMutablePathRef path = CGPathCreateMutable(); 

CGPathMoveToPoint(path, NULL, 18 - offsetX, 41 - offsetY); 
CGPathAddLineToPoint(path, NULL, 31 - offsetX, 25 - offsetY); 
CGPathAddLineToPoint(path, NULL, 91 - offsetX, 31 - offsetY); 
CGPathAddLineToPoint(path, NULL, 95 - offsetX, 24 - offsetY); 
CGPathAddLineToPoint(path, NULL, 136 - offsetX, 26 - offsetY); 
CGPathAddLineToPoint(path, NULL, 148 - offsetX, 18 - offsetY); 
CGPathAddLineToPoint(path, NULL, 133 - offsetX, 2 - offsetY); 
CGPathAddLineToPoint(path, NULL, 75 - offsetX, 1 - offsetY); 
CGPathAddLineToPoint(path, NULL, 9 - offsetX, 16 - offsetY); 
CGPathAddLineToPoint(path, NULL, 11 - offsetX, 40 - offsetY); 

CGPathCloseSubpath(path); 

sprite.physicsBody = [SKPhysicsBody bodyWithPolygonFromPath:path]; 
0

:

그래서 경로는 무언가 같이해야합니다. @ 1x 이미지가있는 경우 점과 픽셀의 크기가 동일합니다. @ 2x의 경우 같은 수의 점을 갖지만 3x의 경우 두 배의 픽셀 수 등 ...

관련 문제