【问题标题】:CCRenderTexture size and position in Cocos2d-iphoneCocos2d-iphone 中的 CCRenderTexture 大小和位置
【发布时间】:2012-01-30 09:46:24
【问题描述】:

我正在尝试使用 CCRenderTexture 进行像素完美碰撞检测,如本论坛帖子所述:

http://www.cocos2d-iphone.org/forum/topic/18522/page/2

代码“按原样”工作,我已将其与我的项目集成

但我在讨论其他一些事情时遇到了麻烦: 如果我将 renderTexture 创建为小于屏幕尺寸的任何尺寸,则碰撞检测将无法正常工作 - 当精灵彼此靠近(

我也无法更改渲染纹理的位置。无论我指定的位置如何,它似乎都是从左下角 (0,0) 到指定的宽度和高度。我关注了这个帖子:

http://www.cocos2d-iphone.org/forum/topic/18796

但这并不能解决我的问题。我仍然会遇到上面指定的严重碰撞。此外,我在列表中提到的第一个帖子包含许多用户的 cmets,他们已将纹理大小调整为 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

【问题讨论】:

  • 请注意,您关注的纹理存在于_rt.sprite 中。所以任何锚点计算都应该应用于渲染纹理中的精灵,而不是渲染纹理本身(大小为(0,0))
  • 我不做任何锚点计算。 _rt.sprite 就是我所说的——位置总是 0,0
  • 注意:如果您的精灵都没有旋转,您可以使用我的 CCRenderTexture 教程中描述的更快的像素完美碰撞代码:learn-cocos2d.com/2011/12/…

标签: cocos2d-iphone collision-detection


【解决方案1】:

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

相交矩形必须在renderTexture的区域内,否则你会得到不准确的碰撞。

您似乎无法更改_rt.sprite的位置。

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

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

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

【讨论】:

    猜你喜欢
    • 2011-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多