【问题标题】:New programmer needs help increasing an integer. Visual C++新程序员需要帮助增加整数。视觉 C++
【发布时间】:2012-08-21 03:58:45
【问题描述】:

我目前正忙于为我一直在计划的游戏制作标题画面。

表单加载,TMRopI(计时器)开始计时,增加表单的不透明度,创建淡入效果,并在表单上显示徽标。每次计时器滴答作响,一个整数都会增加 1(或者至少应该如此)。图片框应该在整数达到 150 后变得可见(当整数等于 100 时,表单处于完全不透明状态),在图片更改之前创建一个暂停。唯一的问题是,它似乎完全忽略了我的整数。

private: System::Void Form1_Load(System::Object^  sender, System::EventArgs^  e) {

             TMRopI->Enabled=true;
         }
private: System::Void TMRopI_Tick(System::Object^  sender, System::EventArgs^  e) {

             int num=0;
             num+=1;
             this->Opacity+=0.01;

             if (num >= 150)
                 PBXtitle->Visible=true;
         }

【问题讨论】:

  • 我在 CLR Windows 窗体应用程序上编写代码,如果这有什么不同的话。
  • 附带说明:我再说一遍:不要使用c++-cli。你不需要它。比c++c# 加起来还要难。选择其中之一。
  • @AndreyT:没错,但微软还是称它为 C++。
  • @AndreyT - 哇,哇,什么?这意味着什么?我一直在读一本教你如何用 C++ 编写代码的书,我一直在使用这个编译器,请详细说明。
  • @lol4t0 我不知道 c++-cli 是什么,我只是查找了有关如何使用 Visual c++ 启动 Windows 窗体应用程序的教程。如何使用普通的 c++?

标签: visual-c++ c++-cli opacity


【解决方案1】:

另一种选择是将num 的定义更改为static。但是,将num 设为类的成员变量是更多C++ 的做法。

static int num=0;
num+=1;
this->Opacity+=0.01;

if (num >= 150)
    PBXtitle->Visible=true;

这样,num 在第一次调用该函数时被设置为 0,并在后续调用之间保存它的值。

【讨论】:

    【解决方案2】:
    int num=0 
    

    每次都将 num 设置为 0,不是吗?

    【讨论】:

    • +1 用于发现这一点。无论如何,马克的回答更好地解释了解决问题的方法。
    【解决方案3】:

    正如所写,numTMRopI_Tick 方法中将始终为 1。您应该在调用方法中声明它并通过引用将其作为参数传递。或者,正如@Matt 在评论中指出的那样,将其声明为该类的成员。

    编辑您当前的num 声明将其创建为局部变量。每次调用方法时都会“创建”它,并在方法结束后立即“销毁”它。因此,每次调用该方法时,它都会从零开始,然后递增到一。例如,如果TMRopI_Tick 在另一个方法的循环内被重复调用,您可以在该调用方法中将num 定义为局部变量。然后它将在该方法的持续时间内存在。然后,如果您将它传递给TMRopI_Tick(通过引用),它就会递增,并且它的范围(将其视为它的“生命”)将存在于每次调用的整个过程中(以及之后)。

    【讨论】:

    • 要么将其声明为类的成员变量。
    • @MattDavis:好点。我正要补充,你的评论出现了。这个网站有时就像读心术一样。
    • @MattDavis"您应该在调用方法中声明它,并通过引用将其作为参数传递。" “将其声明为班级成员。”我感到很迷茫,我刚读了这本厚厚的书,内容是如何使用微软可视化编译器在 C++11 中编程,但它从来没有说过任何关于这些事情的内容。请解释一下。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-24
    • 2014-08-27
    • 1970-01-01
    • 1970-01-01
    • 2013-01-26
    相关资源
    最近更新 更多