2013-06-24 32 views
-2

我正在制作一个关卡游戏,我正在寻找一种比较两次的方法。 第一次是玩家需要第二次完成关卡的时间是我选择的时间。如果第一次低于第二次,如果高于第二次,则得不到明星。我已经在NSDates中存储了2次,如下面的代码中所示。我使用NSComparisonResult来比较结果。我的问题是NSComparisonResult Result1 = 4294967295而不是NSOrderedDescending或类似的东西。如何比较Objective-C中的时间?

NSDate *currentDate = [NSDate date]; 
    NSTimeInterval timeInterval = [currentDate timeIntervalSinceDate:self.startDate]; 
    NSDate *timerDate = [NSDate dateWithTimeIntervalSince1970:timeInterval]; 

    NSComparisonResult result1; 
    NSComparisonResult result2; 
    NSComparisonResult result3; 
    // Create a date formatter 
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
    [dateFormatter setDateFormat:@"mm:ss.SSS"]; 
    [dateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0.0]]; 

    //has three possible values: NSOrderedSame,NSOrderedDescending, NSOrderedAscending 
    NSDate *level1ThreeStarRequirement = [dateFormatter dateFromString:@"00:01.500"]; 
    NSDate *level1TwoStarRequirement = [dateFormatter dateFromString:@"00:02.500"]; 
    NSDate *level1OneStarRequirement = [dateFormatter dateFromString:@"00:02.500"]; 

    result1 = [timerDate compare:level1ThreeStarRequirement]; // comparing two dates 
    result2 = [timerDate compare:level1TwoStarRequirement]; 
    result3 = [timerDate compare:level1OneStarRequirement]; 
    if (result1 == NSOrderedAscending){ 
     self.star1.image = [UIImage imageNamed:@"star1.png"]; 
     self.star2.image = [UIImage imageNamed:@"star2.png"]; 
     self.star3.image = [UIImage imageNamed:@"star3.png"]; 
    } 
    if (result2 == NSOrderedAscending){ 
     self.star1.image = [UIImage imageNamed:@"star1.png"]; 
     self.star2.image = [UIImage imageNamed:@"star2.png"]; 
     self.star3.image = [UIImage imageNamed:@"noStar.png"]; 

    } 
    if (result3 == NSOrderedDescending){ 
     self.star1.image = [UIImage imageNamed:@"star1.png"]; 
     self.star2.image = [UIImage imageNamed:@"noStar.png"]; 
     self.star3.image = [UIImage imageNamed:@"noStar.png"]; 
    } 

感谢马蒂斯

+2

打印所有日期的值以开始调试问题。 – Wain

+0

Gaah !!在一级接受一颗星和两颗星的时间是相同的!岂有此理! – Groot

+0

你好菲利普,那是因为接收两颗星的时间必须低于2.500,得到1星的时间必须高于2.500。所以球员总是至少有一个明星。 – MatisDS

回答

1

你为什么不比较使用内置的一个日期函数的NSDate

– timeIntervalSinceDate: 
– timeIntervalSinceNow 
+ timeIntervalSinceReferenceDate 
– timeIntervalSinceReferenceDate 
– timeIntervalSince1970 

这会给你以秒为单位。那么你的result1等不应该是一些破损的数字,你可以直接比较时间,并像他们那样排列

+0

Thx,但你能告诉我我的代码中必须改变什么吗? – MatisDS

+0

我从来没有像那样的事情。 – MatisDS

+0

'NSTimeInterval gap = [firstDate timeIntervalSince:secondDate];''NSTimeInterval'是double的典型值。 – JeremyP