
ClipPingNode.h
#import "cocos2d.h"@interface ClipPingNode : CCNode { CGRect clipPingRegionInNodeCoordinates; CGRect clipPingRegion;}@property (nonatomic) CGRect clipPingRegion;@end ClipPingNode.m
#import "ClipPingNode.h"@interface ClipPingNode (PrivateMethods)-(voID) deviceOrIEntationChanged:(NSNotification*)notification;@end@implementation ClipPingNode-(CGRect) clipPingRegion { return clipPingRegionInNodeCoordinates;}-(voID) setClipPingRegion:(CGRect)region { // keep the original region coordinates in case the user wants them back unchanged clipPingRegionInNodeCoordinates = region; self.position = clipPingRegionInNodeCoordinates.origin; self.contentSize = clipPingRegionInNodeCoordinates.size; // convert to retina coordinates if needed region = CC_RECT_POINTS_TO_PIXELS(region); // respect scaling clipPingRegion = CGRectMake(region.origin.x * scaleX_,region.origin.y * scaleY_,region.size.wIDth * scaleX_,region.size.height * scaleY_);}-(voID) setScale:(float)newScale { [super setScale:newScale]; // re-adjust the clipPing region according to the current scale factor [self setClipPingRegion:clipPingRegionInNodeCoordinates];}-(voID) deviceOrIEntationChanged:(NSNotification*)notification { // re-adjust the clipPing region according to the current orIEntation [self setClipPingRegion:clipPingRegionInNodeCoordinates];}-(voID) visit { glEnable(GL_SCISSOR_TEST); CGPoint worldposition = [self convertToWorldspace:CGPointZero]; const CGfloat s = [[CCDirector sharedDirector] contentScaleFactor]; glScissor((clipPingRegion.origin.x) + (worldposition.x*s),(clipPingRegion.origin.y) + (worldposition.y*s),(clipPingRegion.size.wIDth),(clipPingRegion.size.height)); [super visit]; gldisable(GL_SCISSOR_TEST);}@end 但是,我需要剪切一个旋转的CCNode.关于如何完成这项任务的任何想法?
解决方法 由此替换ClipPingNode类中的visit方法-(voID) visit{ float rotationAngle = 15; glPushmatrix(); CCRenderTexture* renderTexture = [[CCRenderTexture renderTextureWithWIDth:512 height:512] retain]; glEnable(GL_SCISSOR_TEST); glScissor(0,clipPingRegion.size.wIDth,clipPingRegion.size.height); [renderTexture begin]; glPushmatrix(); glrotatef(rotationAngle,1); glTranslatef(-clipPingRegion.origin.x,-clipPingRegion.origin.y,0); [super visit]; glPopMatrix(); [renderTexture end]; gldisable(GL_SCISSOR_TEST); renderTexture.sprite.position = CGPointMake(clipPingRegion.origin.x,clipPingRegion.origin.y); renderTexture.sprite.anchorPoint = CGPointMake(0,1); renderTexture.sprite.rotation = rotationAngle; [renderTexture.sprite visit]; [renderTexture release]; glPopMatrix();} 基本上它创建了一个纹理,用于呈现ClipPingNode内容
然后翻译场景,使裁剪区域中的原点现在为(0,0)
通过rotationAngle旋转整个场景
启用剪刀
渲染场景
翻译,旋转和渲染包含纹理的精灵
@H_419_50@ 总结以上是内存溢出为你收集整理的cocos2d-iphone – Cocos2d中的旋转剪辑节点全部内容,希望文章能够帮你解决cocos2d-iphone – Cocos2d中的旋转剪辑节点所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)