我在我的游戏中使用cocos2d。我在其中播放电影并具有用于控件的单独叠加视图。在叠加视图中检测触摸。现在,当检测到触摸时,必须调用游戏代码中的功能。但是没有检测到该功能,也没有错误。我不知道出了什么问题。有人请帮帮我。 代码如下
协议部分是
@protocol Protocol
@required
- (void)transition1:(id)sender;
@end
游戏代码中要调用的函数是
- (void)transition1:(id)sender
{
[[Director sharedDirector] replaceScene: [ [Scene node] addChild: [Layer4 node] z:0] ];
}
MovieOverlayViewController.h中叠加视图中的代码
#import "Protocol.h"
@interface MovieOverlayViewController : UIViewController
{
UIImageView *overlay;
NSObject <Protocol> *transfer;
}
@end
MovieOverlayViewController.m
中叠加视图中的代码@implementation MovieOverlayViewController
- (id)init
{
if ((self = [super init]))
self.view = [[[UIView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]] autorelease];
return self;
}
-(void) viewWillAppear:(BOOL)animated
{
overlay = [[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"overlay.png"]] autorelease];
[self.view addSubview:overlay];
}
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *touch = [touches anyObject];
CGPoint point = [touch locationInView:self.view];
NSLog(@"pointx: %f pointy:%f", point.x, point.y);
if (CGRectContainsPoint(CGRectMake(1, 440, 106, 40), point))
{
// the function is called here
[transfer transition1: nil];
}
else if (CGRectContainsPoint(CGRectMake(107, 440, 106, 40), point))
NSLog(@"tab 2 touched");
}
- (void)dealloc
{
[overlay release];
[super dealloc];
}
@end
答案 0 :(得分:0)
最好使用调试器来处理这类问题:在touchesBegan:withEvent:
中设置断点并查看是否调用该方法。然后单步看看会发生什么。在调试器中,您还可以检查transfer
的值是否为nil
,这可能是问题所在。
哦,既然这是你的第二个问题,请在SO中查看how code should be formatted。加价并不困难。
答案 1 :(得分:0)
您没有初始化transfer
。
当未初始化ivar时,其值为0(零)。将消息发送到nil是一个无操作,因此没有错误,也没有任何反应。