2011-01-25 49 views
0

二叉树让我陷入了无所事事的状态,所以我想我会尝试一种更简单的方法(如果显得更加混乱)。
例如...是否可以手动遍历嵌套的if语句?

if (a) { 
    do something 
    // wait for a button press before checking the next 'if' 
    if (aa) { 
     do something 
    } else if (ab) { 
     do something 
    } 
} else if (b) { 
    do something else 
} 

等等。
如何强制我的应用程序在询问'aa'是否返回true之前等待按钮按下? (等等等等。)

开关看起来像是一个更清洁的替代品,所以如果有人对该方法有相反的答案,我很乐意放弃它。不过,这也是同样的问题。我无法弄清楚如何一步一步地完成进度,而不是一次完成。

+0

重新标记,因为这心不是什么做的Objective-C,它是一个传统的C查询 – 2011-01-25 16:13:38

+0

我的道歉。我所做的唯一一个与C相关的事情不是Objective-C,它是一个Box2D(Cocos2D物理引擎)教程中的C++的窥视。不完全相同,但你明白了。 – Thromordyn 2011-01-25 16:16:36

+0

调试器不会做你想要的吗?或者,除了检查代码的运行时行为还有更多吗? – 2011-01-25 16:29:52

回答

1

下面是一种不同的方法,使用视图的状态或控制变量来确定在按下按钮后应该执行的操作。

// pseudo-code based on your example 
-(IBAction) buttonPress1 
if (a) { 
    do something 
    self.setState = stateA; 
} else if (b) { 
    do something else 
    self.setState = stateB; 
} 

-(IBAction) buttonPress2 
if (self.state == stateA) { 
    if (a) { 
     do something 
    } else if (b) { 
     do something 
    } 
} 

希望有助于,如果不是,请在评论中提出要求。


[编辑]

OK,你解释了DA/ME/ME2参考后,我才知道自己在找什么。

你可能会想要做的是将你的对话存储在plist中,以加载到NSDictionary中。 (上的NSDictionary读了)

每NSDictionary的应该是这样的:

键=值

@ “提示”= @ “嗨,我的名字是鲍勃” @ “是指”=的NSDictionary对象接下来康沃选择均值 @“NICE” =的NSDictionary对象为下康沃的选择。不错

const BOOL NICE = YES; 
const BOOL MEAN = !NICE; 

NSDictionary *convo = //loaded to initial starting point from your plist file 

- (IBAction) playerChoseMean:(id)sender 
{ 
    [self sayConvo:convo withChoice:MEAN]; 
} 

- (IBAction) playerChoseNice:(id)sender 
{ 
    [self sayConvo:convo withChoice:NICE]; 
} 

- (void) sayConvo:(NSDictionary)convo withChoice:(BOOL)b 
{ 
    NSLog(@"NPC says: %@", [convo valueForKey:@"prompt"]); 
    if(b) { 
    convo = (NSDictionary*)[convo valueForKey:@"NICE"]; 
    } else { 
    convo = (NSDictionary*)[convo valueForKey:@"MEAN"]; 
    } 

    if (convo == [NSNull null] || convo == nil) then continue; 
    //else continue 
} 

下面是一个例子NSDictionary的图应该让你开始。

NSDictionary *intro = [NSDictionary dictionaryWithCapacity:3]; 
NSDictionary *nice = [NSDictionary dictionaryWithCapacity:3]; 
NSDictionary *nicenice = [NSDictionary dictionaryWithCapacity:3]; 
NSDictionary *nicegoodbye = [NSDictionary dictionaryWithCapacity:3]; 
NSDictionary *mean = [NSDictionary dictionaryWithCapacity:3]; 
NSDictionary *meangoodbye = [NSDictionary dictionaryWithCapacity:3]; 

[intro addValue:@"hi there!" forKey:prompt]; 
[intro addValue:nice forKey:@"NICE"]; 
[intro addValue:mean forKey:@"MEAN"]; 

[nice addValue:@"that was nice" forKey:prompt]; 
[nice addValue:nicenice forKey:@"NICE"]; 
[nice addValue:mean forKey:@"MEAN"]; 

[nicenice addValue:@"awww" forKey:prompt]; 
[nicenice addValue:nicegoodbye forKey:@"NICE"]; 
[nicenice addValue:mean forKey:@"MEAN"]; 

[nicegoodbye addValue:@"you were super nice, here's a bonus for being so nice" forKey:prompt]; 
[nicegoodbye addValue:[NSNull null] forKey:@"NICE"]; 
[nicegoodbye addValue:[NSNull null] forKey:@"MEAN"]; 

[mean addValue:@"that was mean" forKey:prompt]; 
[mean addValue:nice forKey:@"NICE"]; 
[mean addValue:meangoodbye forKey:@"MEAN"]; 

[meangoodbye addValue:@"you're a jerk! goodbye!" forKey:prompt]; 
[meangoodbye addValue:[NSNull null] forKey:@"NICE"]; 
[meangoodbye addValue:[NSNull null] forKey:@"MEAN"]; 

看看这个很好的例子在上GameDeve.SE

1

如果本功能是辅助线程,那么你可以使用

CFRunLoopRun() - 停止线程那么一旦按下按钮呼叫CFRunLoopStop()以继续操作。

我宁愿你做相同的实现有点不同: 制动器2份

在第一部分

流---

if (a) { 
    do something 

    } 
} else if (b) { 
    do something else 
} 

在第二部分做---做这一次按钮被点击。

if (aa) { 
     do something 
    } else if (ab) { 
     do something