从另一个具有 CADisplayLink 的方法调用一次方法

发布于 2024-12-15 01:56:31 字数 738 浏览 3 评论 0原文

我想从方法“method1”调用另一个方法“method2”。问题是“method1”上有一个 CADisplayLink,当我想从“method1”调用“method2”时,它会以 6Ofps 的速度调用它,所以每秒 60 次,但我只想它调用一次。我知道我必须使用 BOOL 变量,但我不知道如何使用它们。谁能帮助我吗?对不起我的英语我是法国人:/

//编辑: method1 上有一个 CADisplayLink:

-(void)method1{
if(
if ( leScore % 20000 == 0) {
[self method2];

}

-(void)method2{

etatJeu = arc4random() / (UINT_MAX/3);

switch(etatJeu) {
    case 0: /* top */
        etatJeu=kEtatJeu2;
        break;
    case 1: /* bottom */
        etatJeu=kEtatJeu3;              
        break;
    case 2: /* bottom */
        etatJeu=kEtatJeu4;              
        break;
    default:
        break;


}

所以每次 'leScore % 20000 == 0' 都会调用一次 method2。

I would like to call from a method 'method1' another method 'method2'. The problem is that there is a CADisplayLink on 'method1' and when I want to call 'method2' from 'method1' it call it at 6Ofps so 60 times per second, but I just want that it call it one time. I know that I have to use BOOL variable but I don't know how to use them . Can anyone help me ? sorry for my english I'm french :/

//EDIT:
there is a CADisplayLink on method1:

-(void)method1{
if(
if ( leScore % 20000 == 0) {
[self method2];

}

-(void)method2{

etatJeu = arc4random() / (UINT_MAX/3);

switch(etatJeu) {
    case 0: /* top */
        etatJeu=kEtatJeu2;
        break;
    case 1: /* bottom */
        etatJeu=kEtatJeu3;              
        break;
    case 2: /* bottom */
        etatJeu=kEtatJeu4;              
        break;
    default:
        break;


}

so every time 'leScore % 20000 == 0' call one time method2.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

随风而去 2024-12-22 01:56:31

如果您想让方法调用只发生一次,那么可以这样使用 bool:

@interface SomeClass {
    BOOL method2RunFlag; // set to NO in init
}
@end

// ... in your method1

if( method2RunFlag == NO ) {
    // call your method2
    method2RunFlag = YES;
}

基于上面编辑的代码:

-(void)method1{
if( method2RunFlag == NO ) {
method2RunFlag = YES;
  if ( leScore % 20000 == 0) {
    [self method2];
  }
    // wait 1 second before able to call again
    [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(resetMethod2RunFlag:) userInfo:nil repeats:NO];
}
- (void)resetMethod2RunFlag:(NSTimer *)timer {
  method2RunFlag = NO;
}

仍然不完全确定您想要什么,但这是我最好的猜测。 =)

If you want to make the method call happen only once, then use a bool this way:

@interface SomeClass {
    BOOL method2RunFlag; // set to NO in init
}
@end

// ... in your method1

if( method2RunFlag == NO ) {
    // call your method2
    method2RunFlag = YES;
}

Based on your edited code above:

-(void)method1{
if( method2RunFlag == NO ) {
method2RunFlag = YES;
  if ( leScore % 20000 == 0) {
    [self method2];
  }
    // wait 1 second before able to call again
    [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(resetMethod2RunFlag:) userInfo:nil repeats:NO];
}
- (void)resetMethod2RunFlag:(NSTimer *)timer {
  method2RunFlag = NO;
}

Still not entirely sure what you're after but this is my best guess. =)

静谧幽蓝 2024-12-22 01:56:31

您可能想要创建 method1 的 2 种变体,一种与 CADisplayLink 一起使用,另一种在其他地方使用,可能调用帮助器 method1A 中的所有公共代码,但使用一个标志参数来指示是否调用 method2。

You probably want to create 2 variations of method1, one to use with CADisplayLink, the other elsewhere, perhaps calling all the common code in a helper method1A, but with a flag parameter saying whether to call method2 or not.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文