请教一个问题,,没搞明白。请大家帮我看看。谢谢。

_scrollingDelta是GameLayer里的成员:
float _scrollingDelta;

我在GameLayer的init里给_scrollingDelta赋值:
auto bg = widget->getChildByName(“bg”);
_scrollingDelta = bg->getContentSize().width / 900;

_scrollingDelta是滚动条0.1秒改变的位移。这里的值是:
_scrollingDelta 1.20000005 float

然后是:

      auto acts = Sequence::create(
    MoveTo::create(1.5f, endPos),
    CallFunc::create(
        =]() {
            scrollbar->schedule(schedule_selector(GameLayer::scrolling), 0.1f);
        }
    ), NULL);

             scrollbar->runAction(acts);
             .....................................................
       这些代码都在init里

下面是每隔0.1秒调用的函数,这里改变滚动条的位置:
void GameLayer::scrolling(float dt)
{
this->setPositionX(this->getPositionX() - _scrollingDelta);
}

可是这里的_scrollingDelta调试时发现却是一个类似随机值的值,并不是1.20000005
_scrollingDelta 2.55187212e-038 float
每隔0.1秒进入函数都是这个值。
而如果关闭程序再打开,这个值又会变,比如是:
_scrollingDelta 9.362e-039#DEN float

请问这是怎么回事?

没看出什么问题,是不是其他代码影响到了。

看下_scrollingDelta是不是在哪被赋值了。多找几个位置去打下log。

你并没有提到 scrollbar 是不是GameLayer,按你的说明,猜测scrollbar并不是一个GameLayer对象,因为schedule里执行的是scrollbar->GameLayer:: scrolling,如果scrollbar不是GameLayer的话,这个函数指针就是不对的, scrollbar->_scrollingDelta的地址当然也是个未赋值的区域

你检查一下你定义变量的地方,property是不是定义成了retain,基本类型应该使用assign,可能是这个问题造成了

可是楼主的代码是C++吧。。。哪来的retain assign。。。。。:10:

也有可能是数组越界什么的把这个变量值给改了

啥意思啊?:14:脖子都疼了!