【问题标题】:Why the float variable is always 0 even though i have changed its value [closed]为什么即使我更改了浮点变量的值,它也始终为 0 [关闭]
【发布时间】:2012-11-02 00:03:36
【问题描述】:

我今天遇到了两个有趣的问题。以下是我在编码中所做的

1.在.H文件中,我声明了一个浮点变量“currentPer”和一个CCProgressTime变量“_strengthBar”

2.在UIPanGestureRecognizer的回调函数processPanGesture()中,我计算了手指的移动距离,然后更新了CCProgressTime的百分比属性。但是在屏幕上,CCProgressTime的可见部分没有更新,所以我的第一个问题是为什么CCProgressTime更改百分比属性时屏幕上没有更新

3.最后我在回调函数processPanGesture()中用手指的移动距离更新了变量“currentPer”。然后在“update”方法中,我打印currentPer,但结果总是“0”,(如果打印_stregnthBar的百分比,即使我在processPanGesture中更改了它的值,它也是“0”)为什么?我的意思是我在processPanGesture()中更改了currentPer的值。但是为什么它不起作用? 如果你还是不明白我说了什么,请看截图。任何帮助对我来说都是非常宝贵的,谢谢你的关注!

图1.AppDelegate.appFinishDidLaunchOption(),注册PanGestureRecognizer

图2.GameLayer.H文件

图3.GameLayer.mm,init(),初始化相关变量

图4.GameLayer.processPanGesture(),手势识别器的回调函数

图5.GameLayer.update()

【问题讨论】:

  • 您忘记在您的帖子中包含链接和一个像样的OCR 程序的许可证。
  • @Joe 哈哈。还有 Chailie - 如果您以一种易于跟踪您所询问的变量的方式构建您的帖子,这将非常有帮助,您发布了相当多的代码。
  • 嗨,你能明白我说的吗?你觉得表达清楚了吗?因为自从我发布这个问题以来,我收到了很多反对票。

标签: objective-c ios cocos2d-iphone box2d-iphone


【解决方案1】:

终于找到原因了:是因为注册PanGestureRecognizer的GameLayer实例A和用来显示屏幕的GameLayer实例B不是同一个实例,所以processPanGesture()函数只是改变实例A的currentPer,而我打印的是实例B的currentPe

【讨论】:

    【解决方案2】:

    试试吧;

    NSNumber * currentPer;
    

    并使用 NSNumber 的 numberWithFloat:(float)value 将浮点值分配给 NSNumber。

    当得到它时使用

    [currentPer floatValue];
    

    Here 简要说明了为什么要使用 NSNumber。

    【讨论】:

    • 好的,谢谢,我会试试看,你能告诉我为什么NSFloat可以但是float不行吗?
    • 如果您坚持使用float而不是NSNumber,请使用分配的属性,试试看它是否有效@property (readwrite, assign) float currentPer;
    • 你好,我刚看了这篇文章,但我仍然无法理解真正的原因!这里如果我的理解:当我定义“initWithTarge:layer action:@selector(processPanGesture:)... ",等于[layer processPanGesture],所以实际上,只是适时调用GameLayer的processPanGesture()。但是currentPer是GameLayer的成员变量,layer是GameLayer的实例,那么为什么layer不能访问和改变自己的成员变量currentPer的value?在您的选择中,似乎一旦将原始类型更改为对象类型,就可以了?但是为什么?float和NSNumber之间有什么实质性区别?
    • 我想原因是关于指针和变量的使用。虽然其他属性是指针,但 currentPer 只是一个变量,不能通过 GameLayer 的实例直接访问。要么将其设为指针,要么以对象的每个实例都有自己的 float currentPer 地址的方式声明它。
    • 但是“_strengthBar”不是原始类型,你可以看到我上传的屏幕截图,它是CCProgressTime实例。我仍然无法在回调函数processPanGesture()中更改_strengthBar.percentage。
    猜你喜欢
    • 1970-01-01
    • 2020-09-02
    • 2011-07-07
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    • 2014-06-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多