@akashg, 나는 컨베이어 벨트 모양을 만드는 방법으로 내 대답을 제공하고있는 컨베이어 벨트를 통해 움직이는 물체에 대한 해결책을 지적하고 내 최초의 직관 배치했다 장면의 화면보다 큰 직사각형을 지정하고 반복적으로 이동합니다. 반영하자면, 이것은 좋은 해결책이 아니라고 생각합니다. 중간에 컨베이어 벨트를 놓고 싶다면 두 가지 방법으로 끝나는 것을 볼 수 있기 때문에 여분의 클리핑 마스크 없이는 불가능합니다.
SKSpriteNode
에 SKTexture
을 타일링하고이 텍스처를 오프셋하는 것이 가장 이상적인 해결책입니다. 그러나 이것은 Sprite Kit (타일 메커니즘 없음)에서 가능하지는 않습니다.
기본적으로 내가하고있는 일은 [타일] 타일 (반복 가능한 타일의 2 배)와 같은 텍스처에서 하위 텍스처를 만드는 것입니다. 그리고 애니메이션을 생성하기 위해이 서브 텍스처를 차례로 보여줍니다. 수동 2 개 타일 이미지를 할 필요가 있기 때문에 지금이 여전히 좋지 않은
- (SKSpriteNode *) newConveyor
{
SKTexture *conveyorTexture = [SKTexture textureWithImageNamed:@"testTextureDouble"];
SKTexture *halfConveyorTexture = [SKTexture textureWithRect:CGRectMake(0.5, 0.0, 0.5, 1.0) inTexture:conveyorTexture];
SKSpriteNode *conveyor = [SKSpriteNode spriteNodeWithTexture:halfConveyorTexture size:CGSizeMake(conveyorTexture.size.width/2, conveyorTexture.size.height)];
NSArray *textureArray = [self horizontalTextureArrayForTxture:conveyorTexture];
SKAction *moveAction = [SKAction animateWithTextures:textureArray timePerFrame:0.01 resize:NO restore:YES];
[conveyor runAction:[SKAction repeatActionForever:moveAction]];
return conveyor;
}
- (NSArray *) horizontalTextureArrayForTxture : (SKTexture *) texture
{
CGFloat deltaOnePixel = 1.0/texture.size.width;
int countSubtextures = texture.size.width/2;
NSMutableArray *textureArray = [[NSMutableArray alloc] initWithCapacity:countSubtextures];
CGFloat offset = 0;
for (int i = 0; i < countSubtextures; i++)
{
offset = i * deltaOnePixel;
SKTexture *subTexture = [SKTexture textureWithRect:CGRectMake(offset, 0.0, 0.5, 1.0) inTexture:texture];
[textureArray addObject:subTexture];
}
return [NSArray arrayWithArray:textureArray];
}
: 여기
는 코드입니다.또한 타일 2 개로 텍스처를 생성하는 데 사용될 수있는
CIFilter
변형을 사용하여
SKTexture
을 편집 할 수도 있습니다.
이 외에도이 솔루션은 화면 크기에 의존하지 않고 메모리가 효율적이기 때문에 더 좋다고 생각합니다. 하지만 전체 화면에서 사용하기 위해서는 더 많은 SKSpriteNode
개체를 만들어야합니다. moveAction
을 사용합니다. 타일링은이 소스에 따라 Sprite Kit에서 가능하지 않으므로 How do you set a texture to tile in Sprite Kit입니다.
여러 SKSpriteNode
개체를 사용하여 바둑판 식으로 배열 할 수 있도록 코드를 업데이트하려고합니다.
의견에 감사드립니다. 내 질문을 업데이트했습니다. 내가 찾고있는 효과는 컨베이어 벨트가 움직이는 것처럼 보이게 만드는 것입니다. 마찬가지로 http://www.randomfeature.co.uk/files/gimgs/47_quartet01.gif. 이 효과를 얻으려면 무엇이 좋은 방법일까요? –
내 대답에 대한 업데이트를 확인하십시오. – ZeMoon
다른 텍스처를 순환 할 때 애니메이션과 객체를 동기화하여 (따라서 동일한 속도로 움직이는 것처럼 보이기 때문에) 애니메이션을 얻는 것이 어려울 것입니다. 그러나이 효과는 CoreAnimation을 사용하여 쉽게 얻을 수 있습니다 (이를 달성하는 여러 가지 방법이 있습니다, StackOverflow 검색). 아이디어는'view width = screen width + texture width'를 설정하고'x = texture extidth'를'x = 0'으로 옮겨서 반복합니다. – DarkDust