cocos2d-iphone – Cocos2d中的旋转剪辑节点

cocos2d-iphone – Cocos2d中的旋转剪辑节点,第1张

概述我在这里使用剪切节点: http://www.learn-cocos2d.com/2011/01/cocos2d-gem-clippingnode ClippingNode.h #import "cocos2d.h"@interface ClippingNode : CCNode { CGRect clippingRegionInNodeCoordinates; CGRect c 我在这里使用剪切节点: http://www.learn-cocos2d.com/2011/01/cocos2d-gem-clippingnode

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中的旋转剪辑节点所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1000046.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-21
下一篇2022-05-21

发表评论

登录后才能评论

评论列表(0条)

    保存