cocos2d游戏中添加放大镜

Posted

技术标签:

【中文标题】cocos2d游戏中添加放大镜【英文标题】:Add a magnifier in cocos2d games 【发布时间】:2011-05-30 10:04:30 【问题描述】:

我想在 cocos2d 游戏中添加放大镜。这是我在网上找到的: http://coffeeshopped.com/2010/03/a-simpler-magnifying-glass-loupe-view-for-the-iphone 我稍微修改了代码:(因为我不想让放大镜跟随我们的触摸)

- (id)initWithFrame:(CGRect)frame 
if ((self = [super initWithFrame:magnifier_rect])) 
    // make the circle-shape outline with a nice border.
    self.layer.borderColor = [[UIColor lightGrayColor] CGColor];
    self.layer.borderWidth = 3;
    self.layer.cornerRadius = 250;
    self.layer.masksToBounds = YES;
    touchPoint = CGPointMake(CGRectGetMidX(magnifier_rect), CGRectGetMidY(magnifier_rect));

return self;

然后我想将它添加到我的场景初始化方法之一中:

    loop = [[MagnifierView alloc] init];
    [loop setNeedsDisplay];
    loop.viewToMagnify = [CCDirector sharedDirector].openGLView;

    [[CCDirector sharedDirector].openGLView.superview addSubview:loop];

但结果是:放大镜内的区域是黑色的。 此外,这个放大镜只是放大相同比例的图像,我怎样才能改变它以放大靠近中心而不放大边缘附近? (就像真正的放大镜一样) 谢谢!!!

【问题讨论】:

【参考方案1】:

这里我假设你想放大屏幕的中心。

您必须根据您的应用需求动态更改大小属性。

CGSize size = [[CCDirector sharedDirector] winSize];

id lens = [CCLens3D actionWithPosition:ccp(size.width/2,size.height/2) radius:240 grid:ccg(15,10) duration:0.0f]; 

[self runAction:lens];

【讨论】:

正是我想要的!!!非常感谢。不敢相信 cocos2d 已经嵌入了这么多很酷的东西。我想我会花一些时间来深入研究示例代码。干杯!!! i(we) 可以在任何关于 iphone 的事情上帮助你(一起)更多,如果你来 Iphone/Ipad 房间聊天。谢谢 伙计,这不是论坛。请不要使用短信速记,如“u”、“ur”、“i”等,因为它们不会提升专业的感觉,而这正是 SO 的意义所在。我已经编辑了您的帖子,但以后不要这样做。【参考方案2】:

Cocos2d 使用 OpenGL 绘制,而不是 CoreAnimation/Quartz。您正在绘制的 CALayer 是空的,因此您什么也看不到。您要么必须使用 OpenGL 图形代码来执行放大镜效果,要么对像素进行采样并适当地更改它们以实现放大效果,正如您链接到的文章中引用的 the Christmann article 中所做的那样。该代码还依赖于 CoreAnimation/Quartz,因此您需要找到另一种方法来获取您希望放大的图像数据。

【讨论】:

那怎么办?他的源代码很短,所以我认为 cocos2d 也应该很简单。 (我完全是opengl的菜鸟)谢谢。 他的源代码很短,因为 CoreAnimation 和 Quartz 是为 2D 图形设计的,并且整个 ios 绘图系统都与 CoreAnimation 挂钩。该代码只需要适当地构建图形上下文,然后调用与通常通过-renderLayerInContext: 使用的完全相同的绘图代码。我不知道您是否可以在 OpenGL 中使用相同风格的解决方案,因为我现在也是 OpenGL n00b。

以上是关于cocos2d游戏中添加放大镜的主要内容,如果未能解决你的问题,请参考以下文章

unity3d iTween如何放大UI大小

Cocos2d iphone 应用程序在实际 iphone 上运行异常

html+css3实现放大镜效果 (2021-08-25)

Spritekit 场景内容被放大

js放大镜效果

将 CADisplayLink 添加到 Cocos2D