내 응용 프로그램에는 바닥으로 작동하고 아래쪽으로 스크롤되는 이미지가 있습니다.SpriteKit Scrolling Bottom에는 루프가 틈이 있습니다.
-(void)initalizingScrollingBackground
{
for (int i = 0; i < 2; i++)
{
SKSpriteNode *bg = [SKSpriteNode spriteNodeWithImageNamed:@"Bottom_Scroller"];
bg.zPosition = BOTTOM_BACKGROUND_Z_POSITION;
bottomScrollerHeight = bg.size.height;
bg.position = CGPointMake((i * bg.size.width) + (bg.size.width * 0.5f) - 1, bg.size.height * 0.5f);
bg.name = @"bg";
bg.physicsBody = [SKPhysicsBody bodyWithTexture:bg.texture size:bg.texture.size];
bg.physicsBody.categoryBitMask = bottomBackgroundCategory;
bg.physicsBody.contactTestBitMask = flappyBirdCategory;
bg.physicsBody.collisionBitMask = 0;
bg.physicsBody.affectedByGravity = NO;
[self addChild:bg];
}
}
- (void)moveBottomScroller
{
[self enumerateChildNodesWithName:@"bg" usingBlock: ^(SKNode *node, BOOL *stop)
{
SKSpriteNode * bg = (SKSpriteNode *) node;
CGPoint bgVelocity = CGPointMake(-BG_VELOCITY, 0);
CGPoint amtToMove = CGPointMultiplyScalar(bgVelocity,_dt);
bg.position = CGPointAdd(bg.position, amtToMove);
//Checks if bg node is completely scrolled of the screen, if yes then put it at the end of the other node
if (bg.position.x + bg.size.width * 0.5f <= 0)
{
bg.position = CGPointMake(bg.size.width*2 - (bg.size.width * 0.5f) - 2,
bg.position.y);
}
}];
}
그러나 너무 오랫동안 스크롤 한 후에는 다음과 같이 간격을 표시합니다. 이 문제를 어떻게 해결할 수 있습니까?
같은 루프에서 노드가 화면 밖으로 나가는 것을 감안할 때, 두 번째 노드가 움직이기 전에 첫 번째 노드의 위치가 변경되면 (화면이 보이지 않기 때문에) 어떻게 될까요? 디버거를 사용하여 단계별로 진행하고 위치를 "예상"한 것으로 확인하면 문제가 나타납니다. – prototypical
프로토 타입에 동의합니다. 일반적으로 모든 배경 위치를 업데이트 한 다음 화면에서 요소를 확인합니다. 같은 루프에서 하나 이상의 배경 화면을 벗어나지 않을 것입니다. 더 정확하게하려면 절대 위치 대신 다른 Bg의 위치를 사용하여 배경의 위치를 다시 지정할 수 있습니다. – gzafra
지금 SpriteKit을 배우고 있습니다. 그래서 당신이 말한 내용 중 일부는 내 머리 위로하고, 이것은 자습서에서 나온 것입니다. 그래서 어디로 가야할 지 모르겠습니다. – user717452