问题标签 [ccspritebatchnode]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
98 浏览

ios - 如何复制 ccsprite 作为另一个子节点但使用批处理节点的效果?

我正在设计的游戏使用多个嵌套的 CCSprite,因此当父精灵移动、旋转、缩放等时,子精灵也会自动完成,孙子也会这样做。

它工作得很好,但很快就陷入困境,因为我没有实现批处理节点,目前它一次进行了超过 4000 次绘制调用,这显然不是最佳的。

但是据我所知,使用批处理节点的唯一方法是使所有精灵成为批处理节点的子节点。我想也许我可以将每个父节点添加到批处理节点,然后将其余的添加为那个节点的子节点,但这不起作用。

有任何想法吗?我想避免每次父子移动时都必须手动计算每个子精灵的位置、旋转、比例等,目前这似乎是我能想到的唯一方法。

0 投票
1 回答
142 浏览

cocos2d-iphone - 使 SpriteSheets 工作 cocos2d

所以我一直在我的 cocos2d 游戏上工作了一段时间,现在只使用静态的一帧精灵,因为我还没有得到完整精灵表的图形。现在我有了精灵表,但在实现它时遇到了麻烦。

我目前制作“玩家”(精灵)的方式是拥有一个单独的玩家类,如下所示

播放器.h

还有 Player.m(我不会展示完整的东西,因为它很长,它只是定义了角色的所有内容)

现在在我的 GameLevelLayer.m 中,我像这样初始化 sprite(这是我们从 player.m 中的 init 获取文件名的地方):

所以一切都很好。当我尝试将该精灵变成带有精灵表的精灵时,问题就来了。所以我尝试在 player.m 中执行此操作

仅供参考,self.forwardMarch 是一个布尔值,每次用户按下按钮移动播放器时都会设置,所以只要它是真的,我就会像这样移动播放器。

但是当我尝试这个时,我得到了错误

'NSInvalidArgumentException', reason: '-[CCSprite setWalkAction:]: unrecognized selector sent to instance 0x88fab50'

任何帮助表示赞赏。

如果您更喜欢他们的代码显示系统(颜色编码之类的) http://www.cocos2d-iphone.org/forums/topic/making-spritesheets-work/,我也在 cocos2d 论坛上发布了这个

编辑:

好的,所以我取得了一些进展,但我仍然有点卡住。我已经在 GameLevelLayer.m 的 init 中定义了批处理节点和所有动作

然后在我的 Player.m 中运行

我使用 NSLogs 发现上面的部分 ([self runAction: self.WalkAction]; 正在被调用但没有完成。这是我发生崩溃的地方,但是控制台没有输出关于为什么会发生崩溃的输出。 . 字面上只是说 (lldb)

0 投票
1 回答
184 浏览

objective-c - CCSprite spriteWithSpriteFrameName 抛出异常

我正在尝试创建一个动画精灵类,它具有启动和停止动画的方法。当我将 CCSprite 变量从本地移动到 ivar 时,该类会引发异常。使用 CCSprite 变量作为局部变量,类工作,即精灵出现并被动画化。

该项目启用了 ARC,所有 coocs2d 文件都用 -fno-objc-arc 标记。我使用 TexturePacker 创建底层文件,尽管我认为这与问题无关。

我究竟做错了什么?

cocos2D 版本 2.01.00 Xcode 版本 4.6.2

类的调用方式:

类头

有效的课程

抛出异常的类

堆栈跟踪

0 投票
0 回答
134 浏览

cocos2d-iphone - 将精灵批处理节点添加到图层时防止抖动滚动

每当我添加以下代码行来更改滚动背景(对于每个 switch-case),它都会变得紧张大约一秒钟。每个背景主题都有自己的精灵表,因此我使用两个批处理节点来处理它们的更改的开关案例。

如何以防止抖动的方式将批处理节点添加到图层?

0 投票
1 回答
187 浏览

cocos2d-iphone - 了解精灵表内存消耗

我想知道每个标记的代码行如何影响内存消耗。鉴于我的精灵表占用了 4MB 的内存。

i) 4MB sprite sheet 在哪一行开始消耗内存?

ii) 第 5 行是否会导致任何额外的内存消耗?

iii) 在第 8 行(再次添加第 7 行)的情况下会发生什么,它如何影响内存?

iv) 第 9 行和第 10 行如何影响内存消耗?他们释放内存吗?

v) 如果批处理节点暂时不使用,第 11 行是否可取?以后再添加有什么影响。

0 投票
1 回答
425 浏览

cocos2d-iphone - 如何显示添加到 CCSpriteBatchNode 的精灵的边界框?

我有一些添加到 CCSpriteBatchNode 的精灵。一切正常。现在我想看看他们的边界框。

我已经尝试进入 ccConfig 并打开 CC_SPRITE_DEBUG_DRAW 但我得到的只是所有内容的白色方块:我用于关卡的图块、角色等。

我不能对精灵使用 draw 方法,因为它们是通过批处理节点绘制的,并且它永远不会被调用。

我正在使用 cocos2d-iphone v2.0。

那么有没有办法为通过批处理节点绘制的精灵绘制一个边界框?

0 投票
1 回答
646 浏览

ios - 如何使用 Multipack Texture Atlas 加载 CCSpriteBatchNode

在尝试使用带有多个 sprite 的 Texture Packer 创建纹理图集时,我收到一个 Texture Packer 错误“8 not fit sprites - try using multipacking”。

所以,我看到在 Texture Packer UI 的 Layout 下,有一个按钮可以点击,上面写着“Multipack”。它还提供了一个帮助,说明您必须使用诸如 {n1} 这样的标签,以便多个输出文件被唯一命名。这可以正常工作并创建(在我的情况下)2 个 plist 文件和 2 个 png 文件(例如 GameObjectAtlas1-iPad.plist、GameObjectAtlas2-iPad.plist、GameObjectAtlas1-iPad.png 和 GameObjectAtlas2-iPad.png)。

现在我有了这些多个文件,你如何将它们实际加载到 cocos2D 项目中。对于一对文件,代码将是:

如何将 GameObjectAtlas1-iPad.png 和 GameObjectAtlas2-iPad.png 加载到批处理节点中?

0 投票
2 回答
528 浏览

ios - Cocos2dx 2.1.4 游戏,Continuos FPS 下降且永不恢复

我正在使用 cocos2dx 2.1.4 创建游戏。它的FPS不断下降,永远不会恢复。请找到以下详细信息

关于我做事方式的背景:- 它关于向下滚动一些形状的游戏,每个形状由一些方形块组成。我有 7 种块。全部加载到 Sprite 表中,并使用此 sprite 表中的这些块创建一个形状。一个关卡文件由这些形状组成。我同时加载两个级别,一个在屏幕上,另一个在屏幕外,以使其无缝滚动。为了同时加载两个关卡,我使用了两个不同的 CCSprite 游戏批处理节点:-

我面临的问题是,当我继续玩游戏时,帧率不断下降,从 60 fps 到 10 fps 并且永远不会恢复或可能在不久的将来恢复,正如我观察了 20 分钟但等待的时间太长了。

我的观察:-

1> 我使用了时间分析器,它显示最大时间在 draw() 调用中。此外,如果我玩游戏的速度非常快,赛道上的时间峰值会增加,这应该没问题,因为我要做更多的工作,但是一旦达到峰值,即使我让游戏闲置,它也只会保持在那个高度。正常吗?根据我的说法,一旦当前的工作完成,它应该会恢复到正常的峰值。

2> 我认为它发生的一些地方,因为我使用了两个批处理节点并在用户触摸时立即删除它的子节点可能会导致它变慢,但在删除子节点之后它应该运行正常。给出一个想法是否可以立即从批处理节点中删除 10 个子节点?有些人说它的过程非常缓慢。只是为了检查这是否导致问题,我做了:-

我没有删除它们,而是将孩子的可见性设置为 false。但 FPS 仍然下降并且永远不会恢复。

请分享您对此的看法。

0 投票
2 回答
1208 浏览

ios - 在资源文件夹的主包中找不到纹理图集文件

我遇到了一个问题,即我的资源目录中的文件未被识别为位于主捆绑包中。

我正在使用 texturePacker 使用 pvr 文件格式创建纹理图集。texturePacker 的输出产生两个文件 xxx_iPhone-hd.pvr.ccz 和 xxx_iPhone-hd.plist。这两个文件存储在我的 cocos2d 项目的资源目录中。将文件存储在资源文件夹中后,我转到资源文件夹并右键单击“将文件添加到“myProject””(未选中将项目复制到目标框)。

当我的 cocos2d 项目运行并尝试加载此文件时,主包不知道绝对路径。具体来说,我的代码执行以下代码行:

cocos2d 代码知道设备有视网膜显示器,并修改文件名以创建“StoreMenuBackground_iPhone-hd.pvr.ccz”的relPath。然后它尝试执行以下操作:

这导致完整路径为零。我之前用上面的过程创建了一个不同的xxx_iPhone5-hd.pvr.ccz文件,上面的代码成功返回了全路径。我已经非常仔细地检查并重新检查了拼写,没有发现任何问题。我还尝试删除并重新添加项目“构建阶段”的“复制捆绑资源”下的文件。我可以做些什么来强制 mainBundle 找到这个文件吗?

0 投票
1 回答
52 浏览

cocos2d-iphone - 子类 CCSpriteBatchNode 对象为 nil

我将 CCSpriteBatchNode 子类化为一个符合 NSCoding 的对象。我主要对 CCSpriteBatchNode 的字符串名称感兴趣。设置断点后,我意识到对象的字符串名称始终为零。我有一种感觉,我的重写方法可能是一个促成因素,但我不太确定。请参阅下面的相关代码:

SpriteBatchNode 接口:

SpriteBatchNode 实现: