变量在NSLog中看起来很奇怪?

Cyc*_*one 1 debugging xcode objective-c nslog cocos2d-iphone

我对iphone app开发很新,所以我开始使用Cocos2d框架而不是从头开始完全客观c,因为它降低了学习曲线,我发现它更容易.我正在尝试从Cocos2d网站上做一些教程,但是,作为人而不是羊,已经决定尝试一些本教程中没有的东西.

所以,这是教程中的相关代码:

- (void)ccTouchEnded:(UITouch *)touch withEvent:(UIEvent *)event {
    CGPoint location = [self convertTouchToNodeSpace: touch];
    [cocosGuy stopAllActions];
    [cocosGuy runAction: [CCMoveTo actionWithDuration:1 position:ccp( location.x + 32, location.y + 32)]];
Run Code Online (Sandbox Code Playgroud)

这按预期工作,cocos家伙移动到我触摸我的ipod的地方,延迟一秒和32像素偏移.所以现在,我想得到一些文字反馈,以及我在点击屏幕的位置.我尝试使用NSLog显示有关location触摸的一些信息:

 NSLog([NSString stringWithFormat:@"x=%d y=%d", location.x, location.y]);
Run Code Online (Sandbox Code Playgroud)

Xcode好心地告诉我:Format not a string literal and no format arguments.除非我完全弄错,否则@"text"是目标C中的字符串文字,两个位置变量是格式参数.

运行时,控制台显示如下内容:

2011-06-20 19:54:22.765 Lesson1[315:707] x=0 y=1078640640
2011-06-20 19:54:23.887 Lesson1[315:707] x=0 y=1080631296
2011-06-20 19:54:24.576 Lesson1[315:707] x=0 y=1080242176
Run Code Online (Sandbox Code Playgroud)

当我在三个随机位置触摸ipod屏幕时.x似乎永远不会改变,y总是一个大整数.

我的代码有什么问题,并且对iphone开发,目标c和cocos2d这个世界不熟悉,我怎么能在将来尝试更好地调试它?

请注意,这实际上是我第二天尝试所有这些,所以请原谅我,如果这是一个非常明显或愚蠢的问题.

小智 8

x, y成员CGPointfloatS,没有intS,因此,你应该使用%f来代替%d.

此外,NSLog()能够自己格式化.尝试:

NSLog(@"x=%f y=%f", location.x, location.y);
Run Code Online (Sandbox Code Playgroud)

代替.请注意,在上面的代码中,第一个参数为NSLog():

@"x=%f y=%f"
Run Code Online (Sandbox Code Playgroud)

是一个字符串文字,而在你的代码中,第一个参数不是文字的:

[NSString stringWithFormat:@"x=%d y=%d", location.x, location.y]
Run Code Online (Sandbox Code Playgroud)