iPad應用程序設置:SceneA包含layerA - 1024x768。按下layerA中的一個按鈕,layerB使用CCMoveTo操作在頂部下拉。 LayerB僅爲800x600,因此您可以在其後看到layerA(想想覆蓋式暫停屏幕類型效果)。 LayerB包含一個800x600的精靈,用戶可以通過按下一個按鈕來放大。縮放效果僅僅是CCScaleTo和CCMoveTo的組合,以使其保持居中在放大的部分上。然而,當精靈縮放時,層B在層A的頂端也會變大。有沒有辦法在包含的窗口中縮放精靈?Cocos2d如何縮放sprite而不縮放圖層?或者,如何縮放和裁剪精靈/圖層?
2
A
回答
1
LayerB應使用GL_SCISSOR_TEST
修剪自身的外部。您可以輕鬆地谷歌瞭解更多關於它的信息,它基本上定義了一個rect
,然後使用glScissor
去除外部。我有一個I類延伸,當我需要做到這一點,那去如下:
//
// CCNodeClip.h
//
// Created by Ignacio Orlandoni on 7/29/11.
//
#import <Foundation/Foundation.h>
#import "cocos2d.h"
@interface CCNodeClip : CCLayer {
}
-(void)preVisit;
-(void)postVisit;
@end
-
//
// CCNodeClip.m
//
// Created by Ignacio Orlandoni on 7/29/11.
//
#import "CCNodeClip.h"
@implementation CCNodeClip
-(void)visit {
[self preVisit];
[super visit];
[self postVisit];
}
-(void)preVisit {
if (!self.visible)
return;
glEnable(GL_SCISSOR_TEST);
CGPoint position = [self position];
//I don't remember if this rect really serves for both orientations, so you may need to change the order of the values here.
CGRect scissorRect = CGRectMake(position.x, position.y, [self contentSize].width, [self contentSize].height);
// CCLOG(@"Scrissor Rect: X: %02f, Y:%02f, W: %02f, H: %02f", scissorRect.origin.x, scissorRect.origin.y, scissorRect.size.width, scissorRect.size.height);
// Handle Retina
scissorRect = CC_RECT_POINTS_TO_PIXELS(scissorRect);
glScissor((GLint) scissorRect.origin.x, (GLint) scissorRect.origin.y,
(GLint) scissorRect.size.width, (GLint) scissorRect.size.height);
}
-(void)postVisit {
glDisable(GL_SCISSOR_TEST);
}
@end
隨着進口到LayerB
,現在就可以定義爲一個CCNodeClip
代替CCLayer
。
一些鏈接...
Circle shape clipping with opengl-es in cocos2d << StackOverflow
Cocos2d iPhone - Sprite cliping/mask/frame << StackOverflow
Another Cocos2D gem: ClippingNode << Learn-Cocos2d.com
作爲一個側面說明...
如果精靈的定位點居中,則CCScaleTo + CCMoveTo可以避免,因此圖像在縮放時保持居中居中。 (.anchorPoint = ccp(0.5, 0.5);
)
相關問題
- 1. Cocos2d:將圖層縮放到精靈
- 2. 在Cocos2d中縮放精靈
- 3. R:裁剪/縮放地圖
- 4. php縮放圖像裁剪
- 5. 縮放背景圖片而不縮放疊加層
- 6. GoJS單張圖層縮放
- 7. 如何在iPhone中縮放圖像而不縮放子視圖?
- 8. QGraphicsView滾動和圖像縮放/裁剪
- 9. XML中的縮放和裁剪圖像
- 10. 裁剪,縮放和居中位圖
- 11. SVG viewBox縮放和裁剪
- 12. cocos2d縮放精靈沒有失真?
- 13. Cocos2d縮放精靈導致神器
- 14. 縮放或剪裁背景圖片而不是拉伸它
- 15. 同時縮放和移動圖層
- 16. 通知中的縮放,裁剪圖標
- 17. 裁剪縮放的圖像'Android'
- 18. 縮放圖像以在android中裁剪
- 19. C#裁剪,縮放,旋轉圖像
- 20. 一個手指圖像縮放/裁剪
- 21. 如何在縮放的CALayer中保留子圖層的縮放比例
- 22. 如何讓CALayer(CATiledLayer的子圖層)在縮放後更改縮放比例?
- 23. 縮放D3裁剪問題
- 24. 單張縮放地圖圖層
- 25. 如何縮放,旋轉和裁剪圖像
- 26. 如何有效裁剪和縮放圖像數據
- 27. 如何使用php-imagick來縮放和裁剪圖像?
- 28. 縮放,裁剪和剪切視頻iPhone
- 29. XNA sprite縮放
- 30. 如何移動,放大或縮小圖層,如cocos2d-x中的coc?
使用你的代碼似乎完美的工作!這很容易實現。我的應用程序僅適用於橫向,我不必在代碼中改變任何內容。就CCScaleToTo和MoveTo而言,我實際上是根據用戶觸摸位置而不是中心來放大圖層的不同點。雖然好點。非常感謝! – BobbyScon 2012-03-09 14:31:56
儘管問題已解決,但我建議您查看'GlScissor',試着全面瞭解它是如何工作的以及它可以做什麼。不用謝。 – 2012-03-09 14:41:00
是的,只要我看到你的帖子(大約3分鐘後你發佈)我做了一個谷歌搜索,並找到了許多你發佈的相同鏈接。我的問題確實是一個不知道要搜索什麼的情況。我以前沒聽說過GLScissor。您的代碼似乎比Learn-Cocos2d.com上的設置更有效 – BobbyScon 2012-03-09 14:44:52