2012-01-30 92 views
1

我试图用CCRenderTexture像素完美碰撞检测,在此论坛发帖概述: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

请注意,您关注的纹理存在于'_rt.sprite'。因此,任何定位点计算都应该应用于rendertexture中的精灵,而不是rendertexture本身(其大小为(0,0)) – 2012-01-30 09:52:22

+0

我不做任何定位点计算。 _rt。sprite就是我所说的 - 位置永远是0,0 – xcoder 2012-01-30 10:21:25

+0

注意:如果你的精灵都没有旋转,你可以使用我的CCRenderTexture教程中描述的更快的像素完美的碰撞代码:http://www.learn- cocos2d.com/2011/12/how-to-use-ccrendertexture-motion-blur-screenshots-drawing-sketches/ – LearnCocos2D 2012-01-30 22:38:10

回答

1

你需要调用绘制或访问之前移动你打算动用到渲染纹理的区域的精灵。移动renderTexture不会改变_rt.sprite的位置。

交集矩形必须在渲染纹理的区域,否则你会得到不准确的碰撞。

看来你不能改变_rt.sprite的位置。

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

当确定渲染纹理的尺寸时,我确保它们至少与交叉矩形一样大,并且确保交集矩形完全位于渲染纹理内。这样就有准确的碰撞。如果即使部分交叉框在渲染纹理之外,我也会得到不准确的碰撞,因此在绘制到渲染纹理之前,请确保移动您想要访问的精灵,以使交集框完全位于渲染纹理内。

记住你完成后,精灵回迁。 :)