对于循环变量,总是评估为true

时间:2012-02-21 22:19:17

标签: objective-c ios

这里讨厌的新手问题。一触摸该片段,此变量isPlayerTouchingAnotherPlayer就会设置为true。我几乎是肯定的我知道为什么但是我找不到在日志中显示这个以确认的方法。我可以通过为每个对象设置不同的标志号来做到这一点,但我希望还有另一种方式。

问题是,piece是一个也位于p1Array的对象,因此只要我触摸它就会自动点击,isPlayerTouchingAnotherPlayer会被评估为真。

有没有办法可以打印出以某种方式触摸的对象的视图或图像名称来确认这一点?此外,有没有办法以某种方式避免这种恼人的冲突。

for (int i = 0; i <[p1Array count]; i++) {
    UIImageView *tempP1;
    tempP1 =[p1Array objectAtIndex:i];

    if (CGRectIntersectsRect(piece.frame, tempP1.frame)) {
        NSLog(@"selected piece: %@, touched piece: %@ ", piece, tempP1);
        isPlayerTouchingAnotherPlayer = TRUE;
    }
}

4 个答案:

答案 0 :(得分:1)

为什么不使用快速枚举并跳过您不想检查的图像视图。

for (UIImageView *imageView in p1Array) {
    if (imageView == piece)
        continue;

    if (CGRectIntersectsRect(imageView.frame, piece.frame)) {
       // do whatever
    }
}

您似乎已经打印出了所提供的代码示例中触摸的对象的名称。如果你想打印出对象的特定属性,你可以这样做。

答案 1 :(得分:0)

  

一触摸它就会自动触及isPlayerTouchingAnotherPlayer   被评估为真。

然后你应该得到一条日志消息,显示所选部分和被触摸部分的相同对象。如果这是正在发生的事情,那么只需在if添加一个条件就可以阻止它:

if (piece != tempP1 && CGRectIntersectsRect(piece.frame, tempP1.frame)) {

答案 2 :(得分:0)

简单地

NSLog(@"%@ %@", piece, tempP1);

NSLog(@"%ld %ld", (NSInteger) piece, (NSInteger) tempP1);

第一个将显示对象的描述,第二个将显示内存中的地址,如果它是相同的地址,则它是相同的对象。

您可以通过简单的相等检查来检查它是否是同一个对象(指针),以排除同一个对象:

if (piece != tempP1) {
   if (CGRectIntersectsRect(piece.frame, tempP1.frame)) {
    ...
}

答案 3 :(得分:0)

此外,你想写这个:

for ( int i = 0; 
     (  ( i < [p1Array count] ) 
     && ( ! isPlayerTouchingAnotherPlayer )
     ); 
     i++
    ) {
 ...
}