如何使用cocos2d确保手指实际上在屏幕上

时间:2014-05-21 22:13:19

标签: ios cocos2d-iphone

我想测试以确保每隔几秒就会在屏幕上显示一个手指。目前,当ccTouchesBegan发生时,我发生的事情是,你可以关闭你的设备并将其重新打开,它仍然认为手指在屏幕上,或者至少功能仍在继续。有办法防止这种情况吗?就像创建一个@selctor来测试它一样?

1 个答案:

答案 0 :(得分:0)

这就是我要做的......

在我的实现中,我会创建一个名为' isItStillBeingTouched'

的bool

HelloWorldLayer.h

@interface HelloWorldLayer

@property bool isItStillBeingTouched; // Should be fine anywhere between interface & end

@end

虽然你还没有说过,但我猜你有循环正在执行你想要实现的任务,因此他们为什么不自行停止。您可以尝试将其全部包装在Do While循环中:

-(void) ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    isItStillBeingTouched = YES;

    while (isItStillBeingTouched) {

        // Your current code....
    }
}

您需要从AppDelegate访问HelloWorldLayer类的isItStillBeingTouched bool,因此更改所述类以在helloWorldLayer.m中包含此方法

+ (id)sharedManager {
 static HelloWorldLayer *sharedMyManager = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        sharedMyManager = [[self alloc] init];
    });
    return sharedMyManager;
}

然后在HelloWorldLayer.h中,在+(id)sharedManager;@interface HelloWorldLayer语句之间的任何位置插入@end。任何{}内的

下一步是在应用程序进入后台时将bool isItStillBeingTouched更改为NO

转到你的AppDelegate.m,找到:

-(void) applicationDidEnterBackground:(UIApplication*)application

将此更改为包括将isItStillBeingTouched bool设置为NO(在if语句中),并且您的方法应该停止运行。

首先调用HelloWorldLayer的实例,然后将属性更改为NO。为此,您需要添加#import "HellowWorldLayer.h"

假设您之前从未改变AppDelegate,它应该看起来像这样:

#import "AppDelegate.h"
#import "IntroLayer.h"
#import "HellowWorldLayer.h"

//...The stock appDelegate code...

-(void) applicationDidEnterBackground:(UIApplication*)application
{
    if( [navController_ visibleViewController] == director_ )
    {
        [director_ stopAnimation];
        HelloWorldLayer *myLocalInstanceOfTheHelloWorldLayerClass;
        myLocalInstanceOfTheHelloWorldLayerClass.levelToLoadUp = NO;
    }
}