【发布时间】:2011-08-08 15:27:17
【问题描述】:
我正在使用 cocos2d,但是问题很笼统。 我有课
CCNode *scaleLayer
在我设置的 touchesMoved 事件中
scaleLayer.scale=(some calculation)
如果我在设备中编译程序崩溃,在模拟器上运行良好。 如果我将 nslogs 放在先例指令之前,即使在设备中也能正常工作。 可能是一些内存、指针或它可能是什么? 但是,是否存在一个 xcode 工具可以让我找到或了解我的视线? 谢谢
代码如下:
- (void)ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
NSSet *allTouches = [event allTouches];
//NSLog(@"comincio");
switch ([allTouches count]) {
case 2: { //Double Touch
UITouch *t1 = [[allTouches allObjects] objectAtIndex:0];
UITouch *t2 = [[allTouches allObjects] objectAtIndex:1];
CGPoint p1=[self convertTouchToNodeSpace: t1];
CGPoint p2=[self convertTouchToNodeSpace: t2];
initialDistance = [self distanceBetweenTwoPoints:p1 B:p2];
oldScale=scaleLayer.scale;
NSLog(@"distanza iniz %f",initialDistance);
} break;
default:
break;
}
}
-(void)ccTouchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{
CGPoint location;
UITouch *t1,*t2;
CGPoint p1,p2;
NSSet *allTouces=[event allTouches];
switch ([allTouces count]) {
case 2:
//NSLog(@"2 tocchi");
t1=[[allTouces allObjects] objectAtIndex:0];
t2=[[allTouces allObjects] objectAtIndex:1];
p1=[self convertTouchToNodeSpace: t1];
p2=[self convertTouchToNodeSpace: t2];
CGFloat finalDistance=[self distanceBetweenTwoPoints:p1 B:p2];
//if i put here NSLog("%f %f %f",oldScale,finalDistance,initialDistance); all goes well
scaleLayer.scale=oldScale*finalDistance/initialDistance;
NSLog(@"scala %f",scaleLayer.scale);//finalDistance/initialDistance);
//this nslog give me error if i not put that nslog before
break;
default:
break;
}
}
-(CGFloat)distanceBetweenTwoPoints:(CGPoint)A B:(CGPoint)B{
float x=B.x-A.x;
float y=B.y-A.y;
return sqrt(x*x+y*y);
}
【问题讨论】:
-
在哪里初始化 scaleLayer 变量?如果它没有被初始化,它可能是模拟器上的
null(所以当你做.scale时它没有任何反应)但是设备上没有初始化垃圾(所以你会崩溃)。 -
什么是崩溃日志..什么类型的崩溃..bad_access?
标签: iphone ios objective-c memory-management