- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前在 cocos2d 3.3 版中的 addChild
方法存在性能问题。我目前的情况是,我有大约十个 CCNode
,其中包含一捆其他 CCNode
(大约 500 个),我将这十个称为“大节点”。
“大节点”的子节点有自己的子节点(大约 3 个)。那些 CCNodes 是 Sprite 。
“大节点”的子节点均未执行任何操作。一切都发生在他们的更新方法中(如果相关的话)。
在我的主场景中,我找出了屏幕上的“大节点”。如果他们是一个新的“大节点”或者旧节点在屏幕上不再可见,我运行此代码:
self = mainScene
_allBigNodes = holds all avaible big nodes
NSMutableArray * childsToRemove = [NSMutableArray arrayWithCapacity: _children.count];
for(CCNode * child in _children){
if([child isKindOfClass:[BigNode class]]){
[childsToRemove addObject:child];
}
}
for(CCNode * child in childsToRemove){
[child removeFromParentAndCleanup:NO];
}
[childsToRemove removeAllObjects];
for(int BigNodeIndex = _fromBigNodePosition; BigNodeIndex<=_toBigNodePosition; ++BigNodeIndex){
BigNode * BigNode = [_allBigNodes objectAtIndex: BigNodeIndex];
[self addChild: BigNode];
}
主屏幕通常最多有两个子屏幕。上述方法效果很好。
关于这个问题:有时在我的游戏中我有一些紧张的 Action 。因此,我使用分析工具计算出上述 addChild 方法的耗时在 60-100 毫秒之间。
Running Time Self Symbol Name
90.0ms 79.6% 0.0 -[CCNode addChild:]
90.0ms 79.6% 0.0 -[CCNode addChild:z:name:]
89.0ms 78.7% 0.0 -[CCNode onEnter]
88.0ms 77.8% 0.0 -[NSArray makeObjectsPerformSelector:]
88.0ms 77.8% 0.0 -[CCNode onEnter]
72.0ms 63.7% 0.0 -[NSArray makeObjectsPerformSelector:]
71.0ms 62.8% 0.0 -[CCNode onEnter]
42.0ms 37.1% 0.0 -[NSArray makeObjectsPerformSelector:]
42.0ms 37.1% 0.0 -[CCNode onEnter]
39.0ms 34.5% 0.0 -[CCScheduler scheduleTarget:]
38.0ms 33.6% 2.0 PrioritySearch
1.0ms 0.8% 1.0 DYLD-STUB$$objc::DenseMap<objc_object*, unsigned long, true, objc::DenseMapInfo<objc_object*> >::grow(unsigned int)
1.0ms 0.8% 0.0 -[CCNode physicsNode]
1.0ms 0.8% 0.0 -[CCNode physicsNode]
1.0ms 0.8% 1.0 objc_msgSend
1.0ms 0.8% 1.0 objc_object::sidetable_release(bool)
28.0ms 24.7% 0.0 -[CCScheduler scheduleTarget:]
26.0ms 23.0% 1.0 PrioritySearch
1.0ms 0.8% 0.0 -[CCScheduler scheduledTargetForTarget:insert:]
1.0ms 0.8% 1.0 DYLD-STUB$$objc_msgSend
1.0ms 0.8% 0.0 -[CCNode physicsNode]
1.0ms 0.8% 1.0 DYLD-STUB$$objc_msgSend
16.0ms 14.1% 0.0 -[CCScheduler scheduleTarget:]
14.0ms 12.3% 0.0 PrioritySearch
2.0ms 1.7% 0.0 -[CCScheduler scheduledTargetForTarget:insert:]
1.0ms 0.8% 0.0 -[CCScheduler scheduleTarget:]
1.0ms 0.8% 1.0 -[CCNode wasRunning:]
所以我的问题是:有没有一种方法可以停用 ccnode 或者什么是最好的解决方案来处理这种具有许多 ccnode 或这些屏幕外的“大节点”的情况?
提前致谢
最佳答案
500 个节点是很多节点。您不想在运行时添加/删除它们。
相反,当您不需要它们时,只需更改它们父级的 visible
和 paused
属性,以防止它们呈现和运行预定的选择器和操作。
关于ios - Cocos2d v3 - addChild 方法产生性能问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27346655/
添加子节点时,如何根据其兄弟节点选择它的位置? 这是一个例子:
谁能帮助我插入 highscoreLabel,我一直在产生错误,我已经考虑将代码移动到 viewDidAppear 和 viewDidLoad。 我刚开始使用 swift,所以如果有人能提供帮助那就太
我正在使用下面的脚本将输入字段中的文本添加到 XML 文件。我对在列表顶部添加一个元素感到困惑,也许是 firstChild?因为每当 PHP 发布输入字段中的文本时,它会将它添加到 XML 树的底部
我有一个问题。 我制作了 swift 自定义类 test.swift 并想将此类中的 Sprite 添加到 GameScene.swift 这是我的自定义类 import SpriteKit impo
我正在尝试添加 在页面加载后( " ),但它不起作用。我做错了什么? 这是脚本本身: function random() { var points = Math.floor((Math.ran
我是编码和 AS3 的新手。我正在阅读有关使用 AS3 向舞台添加内容的内容,并了解了 addChild 方法。阅读更多我发现有不同的使用方法。我还读到有些方法比其他方法更好,有些方法根本不好,最好避
我正在使用 Cocos3D。我有一个不同的 CC3Node 列表。我想在每个图片旁边放一张图片。我的问题是:如何创建一个新的 CC3Node 并将其添加为子节点。 最佳答案 你需要做这样的事情: CC
我有一个排序游戏,其中有 10 个元素可以按正确的顺序拖放。 当我开始拖动一个对象时,我希望它出现在所有其他对象的前面。由于 createjs 没有 zindex 属性,我被告知要使用 stage.a
当我在另一个 View Controller 中添加 ViewController 时,我应该 addChild,没有这个,它不起作用 @objc func openMenuHandler() {
在 Swift 中,我有一些这样的代码: let wand = SKSpriteNode(imageNamed: "Wand") let item = SKSpriteNode(imageNamed:
第一次编码,我想我会从使用 Spritekit (Swift 3) 的游戏开始。我遇到了一个问题,当我向场景添加 Sprite 节点时,它会复制它。我还应该提到我这样做是作为一个重复出现的功能,我随机
请耐心等待,因为我是 OOP/ObjC/Cocos2d 的新手。 我有一个像这样每秒触发的方法:[self schedule:@selector(eyelidsBlink:) interval:1.0
我在这里发现了很多关于这个问题的问题,但我仍然不知道如何在我的情况下解决它。现在我创建了一个新的 html 文件,其中只有以下代码: window.onload = function() {
我正在尝试构建一个小型简历生成器。我希望用户能够输入任意数量的电话号码。但是,appendChild() 没有按预期工作。事实上,它根本不起作用。它什么也不做。有什么想法吗? HTML:
我有两个顶级的 QTreeWidgetItem。我想让第二个成为第一个的父级。调用第一个的 addChild(second item) 显示没有变化。我将如何做到这一点? 最佳答案 您可能必须首先使用
我有一个简单的类函数,用于在许多不同的场合添加 SKEmitterNode。 发生异常时我无法重现步骤。它很少发生而且很随机。我可以调用此方法 500 次而不会出错,或者在某些情况下,调用 1 次或
我正在尝试使用 SimpleXML 的 SimpleXMLElement(实际上是 SimpleXMLIterator,它是 SimpleXMLElement 的子类)的 addChild 方法来添加
这是一个愚蠢的问题,但是函数 self.addChild() 做了什么? 我很熟悉这个函数,也很熟悉如何使用它,但我不确定它把 child 添加到什么地方。 例如,我创建并设计了一个名为 spinny
import SpriteKit class GameScene: SKScene { let player = SKSpriteNode(imageNamed: "Gun")
在我的 php 代码中,我有两个变量 $parent 和 $child。他们都有一些 xml 数据。在 $parent 变量中有一个名为 的标签,它可能包含多个 标签。在 $child 变量中只有
我是一名优秀的程序员,十分优秀!