0

我发现自己对为什么我不能阻止我的触摸处理程序被调用感到困惑:

在 DungeonDisplay.m 中:

-(BOOL) ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event
{
    if (processing || animating) 
        return false;
    processing =  true;
    touchPoint = [self locationFromTouch:touch];
    [self schedule:@selector(keepMoving) interval:0.01];
    [self processTouchAtX:(touchPoint.x/32) AndY:(touchPoint.y/32)];
    return false;
}

-(void) processTouchAtX: (int)x AndY: (int)y
{
//    if (theDungeon.currentDungeonLevel)
         [theDungeon processTouchAtX:x AndY:y];
}

现在,在 [theDungeon processTouchAtX:x AndY:y] 中,DungeonDisplay 实例被释放并且 DungeonDisplay:Dealloc 被正确调用,但是当我逐步执行函数 ccTouchBegan 时,就在最后一个“return false;”之后 下一个“步骤”返回到函数“if(处理 || 动画)”的顶部,下一步使程序崩溃。

我不清楚问题可能是什么。

任何帮助表示赞赏。

4

2 回答 2

0

如果 DungeonDisplay 不是从 CCLayer 派生的,并且您使用 CCTouchDispatcher 注册了触摸,请确保在 cleanup 或 dealloc 方法中调用 CCTouchDispatcher 上的 removeDelegate。否则 CCTouchDispatcher 将继续向对象发送 ccTouch* 消息,即使它已被释放。

于 2012-06-23T10:38:37.540 回答
0

这里没有足够的代码。但这可能是由于您没有将指向接收触摸事件的委托的指针归零。如果您完成的某事是其他某事的代表,您必须确保您告诉那件事您不再是代表。在 iOS 中向 nil 发送消息是可以的。将消息发送到指向已释放对象的指针不是。

于 2012-06-22T00:16:32.100 回答