检测游戏中的有序词

时间:2014-06-15 22:20:21

标签: ios iphone objective-c ipad

如果已经提出这个问题,我很抱歉,但我已经被问了一个星期了。我有3个图像视图,包含三个标签。我需要做的是允许用户将这些图像视图按字母顺序移动。我已经在图像视图上设置了平移手势,并且已经为所有内容设置了标签。我只需要帮助弄清楚如何在移动标签时检测标签。我将标签文本设置为可变数组,并且正如我所做的那样检查它似乎只运行数组而不是实际标签。这是我第一次做这么复杂的事情。我希望这是有道理的。这是我的代码,感谢任何帮助。

- (void) handlePan:(UIPanGestureRecognizer *)pan
{
if ([pan state] == UIGestureRecognizerStateBegan || [pan state] == UIGestureRecognizerStateChanged) {
    CGPoint translation = [pan translationInView:[[pan view] superview]];

    [[pan view] setCenter:CGPointMake([[pan view] center].x + translation.x, [[pan view] center].y + translation.y)];
    [pan setTranslation:CGPointZero inView:[[pan view] superview]];
}
@try {
    if (pan.state == UIGestureRecognizerStateEnded) {
        for (int i = 0; i < self.alphabeticalWords.count; i++) {
            NSString *labelTextBefore = [self.labels[i] text];
            NSString *labelTextAfter = [self.labels[i+1] text];

            if ([labelTextBefore compare:labelTextAfter] == NSOrderedAscending) {
                NSLog(@"Alphabetical");
                [self completedLevel];
                self.alphabeticalWords = nil;
            }
            else {
                NSLog(@"First two are not alphabetical!");
                labelTextAfter = labelTextBefore;
                labelTextBefore = labelTextAfter;
            }
        }
    }
}
@catch (NSException *exception) {
    NSLog(@"Method: %s", __PRETTY_FUNCTION__);
}
@finally {}
}

enter image description here

2 个答案:

答案 0 :(得分:1)

在正常操作中不要使用try / catch。在Objective C / Cocoa中,你应该避免异常,而不是捕获它们的代码。

至于你的问题,你需要一种从屏幕上的位置转换为订单的方法。

用户是否应该按照正确的顺序将单词拖到黄色框中?你不想让某些方法让用户拖入框中,以便框突出显示,当用户释放对象时,它会捕捉到框的中间?这将带来更好的用户体验。您可以使用CGRectContainsPoint()函数来判断汽车对象的中心是否在矩形内。当汽车中心进入一个盒子时,您可以填充中心或以不同颜色绘制盒子以显示该盒子是目标。然后,当用户释放时,您可以将汽车卡入该框中。

然后,由于您的代码现在知道汽车所在的箱子,您可以根据收到汽车的箱子为其分配值1/2/3。

答案 1 :(得分:1)

如果您有一个名为alphabeticalWords的数组(按字母顺序排序)和另一个名为labels的数组(用户正在重新调整),您只能查看该文本中的文本每个标签是否匹配alphabeticalWords中每个字符串中的文字? E.g。

BOOL ordered = YES;
for (NSUInteger i = 0; i < [alphabeticalWords count]; ++i)
{
    if ([[(UILabel *)labels[i] text] isEqualToString:alphabeticalWords[i]] == NO)
    {
        ordered = NO;
        break;
    }
}