我试图使用CCRenderTexture进行像素完美碰撞检测,如本论坛帖子中所述:
http://www.cocos2d-iphone.org/forum/topic/18522/page/2
代码“按原样”有效,我已将其与我的项目
集成但是我在讨论其他一些事情时遇到了麻烦: 如果我将renderTexture创建为小于屏幕大小的任何大小,则碰撞检测无法正常工作 - 当精灵彼此接近(<15px)但实际上没有碰撞时,似乎会显示碰撞。
此外,我无法更改渲染纹理的位置。无论我指定的位置如何,它似乎都是从左下角(0,0)到宽度和宽度。高度指定。我跟着这篇文章:
http://www.cocos2d-iphone.org/forum/topic/18796
但它并没有解决我的问题。我仍然会遇到如上所述的错误碰撞。此外,我在列表中提到的第一篇文章包含许多用户的评论,他们将纹理大小调整为10x10,并将它们重新定位在屏幕外。
有没有人有任何示例代码,所以我可以看到我做错了什么?我只使用样板代码:
CCRenderTexture* _rt = [CCRenderTexture renderTextureWithWidth:winSize.width height:winSize.height];
_rt.position = CGPointMake(winSize.width*0.5f, winSize.height*0.5f);
[[RIGameScene sharedGameScene]addChild:_rt];
_rt.visible = YES;
我使用cocos2d-iphone 1.0.1
答案 0 :(得分:1)
在调用draw或visit之前,您需要将想要绘制的精灵移动到renderTexture的区域。移动renderTexture不会改变_rt.sprite的位置。
交叉矩形必须位于renderTexture的区域内,否则会出现不准确的碰撞。
似乎你无法改变_rt.sprite的位置。
我使用的解决方案是确定交叉点的原点(x,y),并将碰撞的精灵偏移那么多。这将确保交叉矩形的原点为0,0。然后我再次计算交叉矩形(在确保交点矩形的原点为0,0之后)。然后我按照论坛帖子中的说明进行操作。
在确定渲染纹理的尺寸时,我确保它们至少与交叉矩形一样大,并且我确保交叉矩形完全在渲染纹理内。这种方式存在准确的碰撞。如果交叉框的一部分甚至在渲染纹理之外,则会得到不准确的碰撞,因此在绘制渲染纹理之前,请确保移动要访问的精灵,以便交叉框完全在渲染纹理内。
记得在完成后移回精灵。 :)