2012-01-30 59 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之後)。然後我按照論壇發帖中的說明操作。

當確定渲染紋理的尺寸時,我確保它們至少與交叉矩形一樣大,並且確保交集矩形完全位於渲染紋理內。這樣就有準確的碰撞。如果即使部分交叉框在渲染紋理之外,我也會得到不準確的碰撞,因此在繪製到渲染紋理之前,請確保移動您想要訪問的精靈,以使交集框完全位於渲染紋理內。

記住你完成後,精靈回遷。 :)