在cocos2d游戏中添加放大镜

3
我希望在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];

但结果是:放大镜内部的区域是黑色的。此外,这个放大镜只能以相同的比例放大图像,如何调整它使得中心区域放大更多,边缘区域放大更少?(就像真正的放大镜一样)谢谢!
2个回答

2

我假设您想放大屏幕的中心。

根据您的应用程序需求,您必须动态更改大小属性以符合您的要求。

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已经内置了这么多好玩的东西。我想我会花些时间来研究一下示例代码。干杯!!! - OMGPOP
如果你来到 iPhone/iPad 聊天室,我(我们)可以帮助你更多关于 iPhone 的任何事情。谢谢。 - Vijay-Apple-Dev.blogspot.com
5
伙计,这不是一个论坛。请不要使用短信缩写,比如'u'、'ur'、'i'等,因为它们不能营造出 SO 所需要的专业感。我已经修改了你的帖子,请以后避免这样做。 - Richard J. Ross III

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

那么怎么办呢?他的源代码非常短,所以我认为对于cocos2d来说也应该很简单。(我在opengl方面完全是个新手)谢谢。 - OMGPOP
他的源代码很短,因为CoreAnimation和Quartz是为2D图形设计的,并且整个iOS绘图系统都与CoreAnimation挂钩。代码只需要适当地设置图形上下文,然后调用与-renderLayerInContext:通常使用的完全相同的绘图代码即可。我不知道你是否可以在OpenGL中采用相同的解决方案风格,因为我现在也是一个OpenGL新手。 - Jeremy W. Sherman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接