SceneKit으로 게임을 만들고 있습니다. 추가 및 제거되는 SCNBoxes를 기반으로합니다. 끝에 30 개의 상자가 루트 노드에 추가됩니다.Scenekit : 여러 객체가 추가 된 후에 객체가 보이지 않습니다. (Objective-C)
// Prepare Surface Layer for Blocks
self.colorOfBlock = [CALayer layer];
self.colorOfBlock.frame = CGRectMake(0, 0, 1000, 1000);
self.colorOfBlock.backgroundColor = [UIColor colorWithHue:0 saturation:1 brightness:1 alpha:1].CGColor;
self.textLayer = [CATextLayer layer];
self.textLayer.frame = self.colorOfBlock.bounds;
self.textLayer.fontSize = 750;//self.colorOfBlock.bounds.size.height;
self.textLayer.string = @"2";
self.textLayer.alignmentMode = kCAAlignmentCenter;
self.textLayer.foregroundColor = [UIColor blackColor].CGColor;
[self.textLayer display];
[self.colorOfBlock addSublayer:self.textLayer];
// Prepare Material for the Block
SCNMaterial *material = [SCNMaterial material];
material.diffuse.contents = self.colorOfBlock;
// Create the Block
self.blockNode = [SCNNode node];
self.blockNode.geometry = [SCNBox boxWithWidth:0.95 height:0.95 length:0.95 chamferRadius:0.1];
self.blockNode.geometry.firstMaterial = material;
self.blockNode.position = position;
// Setup the physics body
self.blockNode.physicsBody = [SCNPhysicsBody dynamicBody];
self.blockNode.physicsBody.affectedByGravity = NO;
self.blockNode.physicsBody.categoryBitMask = CollisionCategoryBlock;
self.blockNode.physicsBody.contactTestBitMask = CollisionCategoryBorder | CollisionCategoryBlock;
self.blockNode.physicsBody.collisionBitMask = CollisionCategoryBorder | CollisionCategoryBlock;
self.blockNode.physicsBody.angularVelocityFactor = SCNVector3Make(0, 0, 0);
[self addChildNode:self.blockNode];
self.gameValue = 2;
if (position.z < 1) {
self.name = @"Front";
} else {
self.name = @"Back";
}
잠시 후 textLayer가 사라지는 것 같습니다. 새로운 블록이 추가되면 더 이상 textLayer가 없습니다. 또 다른 부작용은 기존 블록의 오래된 textLayers가 더 이상 업데이트되지 않는다는 것입니다.
다음 단계에서 새로 추가 된 블록이 보이지 않게됩니다. 또는 말할 것도없이 - 그들은 CALayer를 얻지 못합니다. 하지만 물리학은 아직 작동 중입니다.
때때로보기가 충돌합니다. 디버거는 충돌 영역의 위치를 찾을 수없는 것과 같은 것을 말합니다. 이 후에보기가 변형됩니다. 그러나 뷰를 지우고 게시 된 것처럼 이러한 블록이 아닌 모든 생성 된 개체를 표시하는 SCNActions를 호출 할 수도 있습니다. 이 블록들은 완전히보기에서 쫓겨납니다.
그런데이 블록에 대해 "phonglighttype"을 설정할 때이 도청 폭포가 일찍 발생합니다.
내가 눈치 챈 것이 한 가지 더 있습니다. 앱 중 I 탭 (아이폰 5에서 테스트)와 GPU 줄 파란색 줄에, 잠시 후 다시에
self.gameView.showsStatistics = YES;
쇼를 탭합니다. 2 ~ 3 초 후 파란색 막대가 사라지고 녹색의 GPU 막대가 사용 준비가되었음을 나타냅니다. 그리고 모든 것은 그것이해야하는 것처럼 작동합니다. 잠시 후이 블록들은 다시 보이지 않게됩니다. 탭 아웃하고 다시 탭하면 새로 추가 된 블록이 다시 표시됩니다.
어쨌든 나는 앱 크래시가 발생할 때까지 내 장치 캐시를 스팸하고 있다고 생각합니다. 그러나 Xcode에서 유용한 힌트는 없습니다. viewControllers 캐시를 지우는 옵션이이 문제를 해결할 수 있는지 궁금합니다.
친절 감사