CCRenderText在Cocos2d-iphone中的大小和位置

时间:2012-01-30 09:46:25

标签: cocos2d-iphone collision-detection

我试图使用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

1 个答案:

答案 0 :(得分:1)

在调用draw或visit之前,您需要将想要绘制的精灵移动到renderTexture的区域。移动renderTexture不会改变_rt.sprite的位置。

交叉矩形必须​​位于renderTexture的区域内,否则会出现不准确的碰撞。

似乎你无法改变_rt.sprite的位置。

我使用的解决方案是确定交叉点的原点(x,y),并将碰撞的精灵偏移那么多。这将确保交叉矩形的原点为0,0。然后我再次计算交叉矩形(在确保交点矩形的原点为0,0之后)。然后我按照论坛帖子中的说明进行操作。

在确定渲染纹理的尺寸时,我确保它们至少与交叉矩形一样大,并且我确保交叉矩形完全在渲染纹理内。这种方式存在准确的碰撞。如果交叉框的一部分甚至在渲染纹理之外,则会得到不准确的碰撞,因此在绘制渲染纹理之前,请确保移动要访问的精灵,以便交叉框完全在渲染纹理内。

记得在完成后移回精灵。 :)