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"を設定すると、このバグのカスケードは早く発生します。
もう1つ気がついたことがあります。ときにアプリケーション(iPhone 5からテスト)のうちIタブとGPUバーの
self.gameView.showsStatistics = YES;
ショーブルーライン、しばらく後に再度タブ付き。 2〜3秒後、青色のバーが消え、完全な緑のGPUバーが使用可能になったことが示されます。そして、それはすべきことのようにすべて機能します。しばらくすると、これらのブロックは再び見えなくなります。タブアウトして再びタブインすると、新しく追加されたブロックが再び表示されます。
何とか私は、アプリケーションがクラッシュするまで私のデバイスキャッシュをスパムしていると思います。しかし、Xcodeからのヒントはありません。 viewControllersキャッシュをクリアするオプションがこの問題を解決できるかどうかは疑問です。
種類よろしく