Я создаю игру с 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";
}
Через некоторое время текстовый слой, похоже, исчезнет. Если добавить новые блоки, они больше не имеют текстового слоя. И еще один побочный эффект заключается в том, что старые textLayers на существующих блоках больше не обновляются.
На следующем шаге новые блоки становятся невидимыми. Или лучше сказать - они никогда не получают CALayer. Но физические тела все еще работают.
И иногда вид падает. Отладчик говорит, что что-то вроде положения области сбоя не может быть найдено. После этого вид деформируется. Но я все еще могу назвать SCNActions, который очищает представление и отображает все созданные объекты, которые НЕ являются этими блоками, как я опубликовал. Эти блоки полностью выбиты из поля зрения.
Кстати, когда я настраиваю «phonglighttype» для этих блоков, этот прослушивающий каскад происходит раньше.
Есть еще одна вещь, которую я заметил. Когда я вкладка из App (протестировано с iPhone 5) и вкладки снова через некоторое время, шоу
self.gameView.showsStatistics = YES;
на панели GPU голубая линия. Через 2 или 3 секунды синяя полоса исчезнет, а полноцветная панель графического процессора показывает, что она готова к использованию. И все работает так, как должно. Через некоторое время эти блоки снова становятся невидимыми. Если я снова выберет и снова закрою, вновь добавленные блоки снова будут видны.
Как-то я думаю, что я спам в кэше своего устройства, пока приложение не сработает. Но Xcode нет полезного намека. Интересно, может ли опция очистить кеш viewControllers решить эту проблему - если есть опция для этого.
С наилучшими пожеланиями