Cocos2D是以OpenglES為底層圖形庫, 所以它採用的是OpenglES的座標系統,即x軸向右,y軸向上。 而蘋果的Quarze2D則使用的是不同的座標系統,x軸向右,y軸向下。在初學OpenglES紋理的時候,用Quarze2D讀取的圖片在貼在OpenglES座標系裡圖片是上下顛倒的,原因就是座標系的不同造成的。
最近在學習Cocos2D的時候,用它的API進行渲染到紋理的時候也出現了上下顛倒的情況。
具體是這樣發生的。首先我進行渲染到紋理的功能,虛擬碼如下:
- // 1: Create new CCRenderTexture
- CCRenderTexture *rt = [CCRenderTexture renderTextureWithWidth:textureSize height:textureSize];
-
- // 2: Call CCRenderTexture:begin
- [rt beginWithClear:bgColor.r g:bgColor.g b:bgColor.b a:bgColor.a];
- // 3: Draw all you want here with OpenglES
- // 4: Call CCRenderTexture:end
- [rt end];
-
- // 5: Create a new Sprite from the texture
- CCSprite *renderSprite [CCSprite spriteWithTexture:rt.sprite.texture];
- // 1: Create new CCRenderTexture
- CCRenderTexture *rt = [CCRenderTexture renderTextureWithWidth:textureSize height:textureSize];
-
- // 2: Call CCRenderTexture:begin
- [rt beginWithClear:bgColor.r g:bgColor.g b:bgColor.b a:bgColor.a];
- // 3: Draw all you want here with OpenglES
- // 4: Call CCRenderTexture:end
- [rt end];
-
- // 5: Create a new Sprite from the texture
- CCSprite *renderSprite [CCSprite spriteWithTexture:rt.sprite.texture];
然後我用第五步產生的精靈加到情境中,發現圖是上下倒立的。因為我在第三步中我是採用的是openglES的座標系,如果我用Quarze2D座標系的方式去繪製,結果就是正確的。
還有一種解決辦法,就是
- renderSprite.flipY = YES;
發生這種問題的具體原因不太清楚,只有看看cocos2d具體實現了。
小結:解析Cocos2D中座標系問題的內容介紹完了,希望通過本文的學習,能對你有所協助!