2015-01-28 3 views
1

저는 지금 iOS 용 게임처럼 끝없는 러너를 만들고 있습니다. 지금은지도 제작에 있습니다.타일 맵 생성 (열 제거 및 추가) 언제?

지도가 고정 속도로 움직일 때 작동합니다. 끝이 없으며 무작위입니다. 타일을 유지하기 위해 배열을 사용하고 있는데 화면 밖으로 벗어난 경우 배열의 첫 번째 객체를 제거한 다음 그 끝에 새로운 열을 생성합니다.

내 문제는 내가지도의 속도를 높이고 싶을 때,지도 생성 속도가 느려지 며 잠시 후지도 자체가 느려지므로 그 이유를 알 수 없습니다.

필자는 (40,0)에서 시작하는 헬퍼 SKSpriteNode를 만들었으며 맵 위치와 동시에 위치를 변경하려고합니다. 0보다 작거나 같으면 열을 제거하고 다른 것을 생성합니다 .

시작 mapNode.mapSpeed는 2.0f이며 시간이 지남에 따라 다양한 값으로 늘리고 싶습니다. 자주 "노드를 제거/작성"전화

self.helperNode.position = CGPointMake(self.helperNode.position.x+self.mapNode.mapSpeed, self.helperNode.position.y); 
self.mapNode.position = CGPointMake(self.mapNode.position.x-self.mapNode.mapSpeed, self.mapNode.position.y); 

if (self.helperNode.position.x <= 0.0f) { 

    [self.mapNode generateNextColumn]; 

    self.helperNode.position = CGPointMake(40.0f, 0.0f); 

    NSArray *array = self.mapNode.map[self.mapNode.rowCount]; 
    SKSpriteNode *row = [self.mapNode buildNextRowFromArray:array]; 
    row.position = CGPointMake((self.mapNode.rowCount*40)-20, 0); 
    [self.mapNode addChild:row]; 

    NSString *string = [NSString stringWithFormat:@"row%li",self.mapNode.rowCount-(long)self.mapNode.children.count]; 
    SKNode *removableRow = [self.mapNode childNodeWithName:string]; 
    [removableRow removeFromParent]; 
} 
+0

어디에서지도 노드의 위치를 ​​확인하고 있습니까? – sangony

+0

helper 노드를 만들어서 mapNode와 같은 속도로 움직이는데 helper 노드를 만들었지 만 위치가 0에 이르면 (40,0) (40 와이드 타일을 가짐)로 재설정하고 열을 제거하고 생성하면 다른, 내 문제는 도우미 노드와지도 노드가 동기화되지 않습니다 (지도가 세대보다 빠름) – sonyeelol

답변

0

오히려 비효율적이다. 더 많은 경우 각 행의 노드를 문자열로 가져와야하는 경우 매우 비효율적입니다.

주어진 시간에 고정 된 수의 활성 스프라이트 (타일)가 있으므로 스프라이트를 미리 할당하고 배열이나 사전에 넣어야합니다.

화면 테두리를지나 스크롤 한 스프라이트의 모든 열은 위치 (및 텍스처)를 업데이트하기 만하면 화면에 나타나는 다음 열이됩니다.

+0

팁을 염두에두고 SKSpirteNode로 30 개의 열을 사전 할당하는 시스템을 구현했으며 그 중 25 개 화면에서 벗어나 다음 열로 슬롯을 채 웁니다. 그래서 뭔가 잘못되었을 때를 대비하여 5 개의 열이 있습니다. 나는 25와 30을 하드 코딩하고 싶지 않으면 무엇을 제안합니까? 얼마나 많은 열을 미리로드할지 결정하는 가장 좋은 방법은 무엇입니까? – sonyeelol

+0

은 기본적으로 스프라이트 크기로 화면 크기를 나누고 너비/높이에 1 (실제로는 2)을 더하고 화면을 덮을만큼 충분한 타일과 "버퍼"행/열을 추가합니다 – LearnCocos2D