【问题标题】:Why does this logic work on my main loop, but not on a method?为什么这个逻辑适用于我的主循环,而不适用于方法?
【发布时间】:2019-05-21 14:03:45
【问题描述】:

我把它写成一个占位符,知道它不会起作用:

While(true)
    if (red > 1.0f)
        redinc = -0.01f;
    if (red < 0.0f)
        redinc = 0.01f;
    red += redinc;

这是在我的主循环中,我不知道为什么,但它有效,红色从 0 变为 1。但是,当将代码移动到方法时

void Move(float& a) {
    float ainc;
    if (a > 0.7f)
        ainc = -0.05f;
    if (a < -0.7f)
        ainc = 0.05f;
    a += ainc;

确实如此。它完全符合我最初的预期,0.7 - 0.65 - 0.7。

有没有人遇到过这种情况?为什么它首先起作用?

【问题讨论】:

  • 函数中的代码没有循环。您需要在函数中包含while 语句(或其他一些循环构造),或者在循环中调用该函数。
  • 代码以无限循环开始:while (true) if (red &gt; 1.0f) redinc = -0.01f;。它永远不会改变red 的值。是不是少了一些花括号?

标签: c++ algorithm math geometry


【解决方案1】:

如果a 介于-0.7+0.7 之间,则ainc 已声明但从未初始化,因此您基本上最多只能向a 添加一个随机数,最坏的情况是随机崩溃。

在主循环中,redinc 保留它分配的最后一个值,因为它在整个循环的范围内,所以它会工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-15
    相关资源
    最近更新 更多