0

编辑(附加测试后的较短版本): 我只添加了:

        CGSize winSize = [[CCDirector sharedDirector] winSize];
        CCRenderTexture *rt = [CCRenderTexture renderTextureWithWidth:winSize.width height:winSize.height];

到我的游戏项目中的BulletCache(有一个 GameScene,其中添加了 BulletCache 的实例),现在应用程序在尝试加载游戏场景实例时确实崩溃了(在此之前我没有遇到此崩溃的问题)。

注意:我在 CCRenderTexture 的 init 方法中添加了一个断点,它似乎运行顺利,它必须是 init 之后的东西。

相反,我在 GameScene 的 init 方法中尝试了相同的方法,它不会使应用程序崩溃。同样,如果我将它添加到一个空的 cocos2d-ios helloworld 模板项目中。

因此,在 cocos2d-ios helloworld 模板中,我做了一个额外的测试思考,看看有一个 batchnode 和一个 CCRenderTexture 实例是否存在冲突,并在 helloworldlayer.m init 方法的末尾添加了以下内容:

    CCSpriteFrameCache* frameCache = [CCSpriteFrameCache sharedSpriteFrameCache];
    [frameCache addSpriteFramesWithFile:@"art1-hd.plist"];
    CCSpriteBatchNode*  spriteBatch = [CCSpriteBatchNode batchNodeWithFile:@"art1-hd.png"];
    [self addChild:spriteBatch];

    CGSize winSize = [[CCDirector sharedDirector] winSize];        
    CCRenderTexture *rt = [CCRenderTexture renderTextureWithWidth:winSize.width height:winSize.height];
    [self addChild:rt];

没有崩溃。

关于如何解决这个问题,我没有多少胶水。

编辑:删除了我提到的一个像素完美碰撞项目的原始问题,在那里我找到了 CCRenderTexture

4

1 回答 1

0

也许问题只是原始代码假设每个精灵都使用自己的纹理。现在,如果您有纹理图集,则每个精灵仅从该纹理的较小区域(矩形)进行渲染。您必须使用精灵帧的纹理部分相应地初始化碰撞测试。

总而言之,可以使用精灵帧和纹理图集进行像素完美碰撞检测,但根据碰撞测试的实际实现会更加复杂。

于 2012-10-20T20:28:10.710 回答