바둑판 식 배경 위에 사용자가 선택할 수있는 사용 가능한 레벨이 있고 그 순서대로 배경을 팬 할 수있는 장면을 만들려고합니다. 모든 레벨을 볼 수 있습니다.바둑판 식 배경 : 모든 스프라이트가 나타나지 않습니다.
자습서 별 iOS 게임에서 제안한대로 모든 타일뿐만 아니라 다른 것들도 포함하는 SKNode *_backgroundLayer
을 만들었습니다. 이렇게하면 SKNode
을 움직일 수있게되었고, 모든 아이들은 그걸 가지고 움직일 수있게되었습니다. 큰. 자, 내 타일은 450x450 pixels
입니다. 따라서 _backgroundLayer
에 9 개의 타일이 필요하다고 계산했고, 아래 코드를 사용하여 타일을 추가했습니다.
이해가 안되는 점은 내 화면에 나타나야하는 첫 번째 두 타일을로드하고 위치를 지정하고 나머지는로드하지 않는 것입니다. 시뮬레이터의 "x 노드"에는 노드가 9 개가 아니라 2 개의 노드가 있다고합니다. 처음에는 노드가 내 아이폰 화면에 있지 않기 때문에 노드를 만든 다음 제거합니까? 나는 그것을 얻지 않는다. 이 문제를 해결하고 해결하는 방법에 대한 아이디어가 있습니까?
업데이트 : 내 iPad Retina에서 9 대신 6 개의 노드가 생겨서 왜 아래의 코드에서 요청할 때만 화면에 표시 될 수있는 노드가로드되고 유지되는 것입니까?
UPDATE2 : NSLog (@ "% d", _backgroundLayer.children.count); 9를 반환합니다. 나는 UIPanGestureRecognizer에 관한 일을 잘못하고 있다고 확신한다. 내가 잘못된 층을 옮기고 있습니까?
#import "LevelSelectScene.h"
#import "TurtleWorldSubScene.h"
@interface LevelSelectScene()
@property (nonatomic, strong) SKSpriteNode *selectedNode;
@end
@implementation LevelSelectScene
{
SKNode *_backgroundLayer;
}
-(id)initWithSize:(CGSize)size {
if (self = [super initWithSize:size]) {
/* Setup your scene here */
_backgroundLayer = [SKNode node];
_backgroundLayer.name = @"backgroundLayer";
[self addChild:_backgroundLayer];
SKTexture *backgroundTexture = [SKTexture textureWithImageNamed:@"levelSelect"];
int textureID = 0;
for (int i = 0; i<3; i++) {
for (int j = 0; j<3; j++) {
SKSpriteNode *background = [SKSpriteNode spriteNodeWithTexture:backgroundTexture];
background.anchorPoint = CGPointZero;
background.position = CGPointMake((background.size.width)*i, (background.size.height)*j);
background.zPosition = 0;
background.name = [NSString stringWithFormat:@"background%d", textureID];
NSLog(@"x:%f, y:%f", background.position.x, background.position.y);
textureID++;
[_backgroundLayer addChild:background];
}
}
NSLog(@"%d", _backgroundLayer.children.count);
//[TurtleWorldSubScene displayTurtleWorld:self];
}
return self;
}
- (void)didMoveToView:(SKView *)view {
UIPanGestureRecognizer *gestureRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePan:)];
[[self view] addGestureRecognizer:gestureRecognizer];
}
- (void)handlePan:(UIPanGestureRecognizer *)recognizer {
CGPoint translation = [recognizer translationInView:self.view];
recognizer.view.center = CGPointMake(recognizer.view.center.x + translation.x,
recognizer.view.center.y + translation.y);
[recognizer setTranslation:CGPointMake(0, 0) inView:self.view];
if (recognizer.state == UIGestureRecognizerStateBegan) {
} else if (recognizer.state == UIGestureRecognizerStateChanged) {
} else if (recognizer.state == UIGestureRecognizerStateEnded) {
}
}
@end
고마워요!
하지만 왜 내가 배경 레이어를 팬 할 때 나머지 스프라이트는 보지 못합니까? 9 개의 스프라이트가 모두 있기 때문에 배경 레이어 (sknode)는 1500x1500 픽셀과 같지 않아야합니까? 다른 배경 스프라이트 대신 검은 색 배경이 보입니다. 아마 패닝에 뭔가 잘못하고있는 걸까요? 그러나 배경 레이어를 팬합니다. 코드를 업로드 할 것입니다. 어떤 아이디어? Btw, 답장을 보내 주셔서 감사합니다! –
_backgroundLayer.children.count는 무엇을 반환합니까? 9를 반환하면 노드가 단순히 올바른 위치에 그려지지 않습니다. 속성을 확인하십시오 : position, zPosition, hidden, anchorPoint, xScale, yScale, 프레임 및 크기. – LearnCocos2D
UPDATE2 : NSLog (@ "% d", _backgroundLayer.children.count); 9를 반환합니다. 나는 UIPanGestureRecognizer에 관한 일을 잘못하고 있다고 확신한다. 내가 잘못된 층을 옮기고 있습니까? –