操作非静态变量

Posted

技术标签:

【中文标题】操作非静态变量【英文标题】:Manipulating non-static variables 【发布时间】:2022-01-14 10:55:59 【问题描述】:

所以在我的课堂上,我们让对象根据 x 和 y 坐标变量移动,这很简单。但是,如果我在单独的静态类中声明 x 和 y 变量,我似乎只能让我的工作,而教师示例代码似乎没有这样做。我一直在看老师的示例代码,它为什么会这样工作是有道理的,但是当我尝试将类似的方法应用于我的代码时,它似乎不起作用,我无法找出我的'我做错了。

教师代码:

// A Bug that moves from left to right and vibrates up and down randomly in the output window 
class Bug 
    // The x- and y-coordinates as well as the speed a Bug is moving
    int x;
    int y;
    int speed;
    // The color of the Bug
    int red;
    int green;
    int blue;

    // Initialize the x- and y-coordinates, the speed and the RGB colors
    Bug() 
        x = -80;
        y = (int) random(10, height - 10);
        speed = (int) random(1, 5);
        red = (int) random(255);
        green = (int) random(255);
        blue = (int) random(255);
    

    // Set the fill color and ellipseMode
    // Create a for loop that draw “bugs” as six consecutive attached circles 
    void displayBug() 
        fill(red, green, blue, 175);
        ellipseMode(CENTER);
        for (int ctr = 0; ctr < 90; ctr += 15) 
            circle(x + ctr, y, 20);
        
    

    // Add the speed instance variable to the x-coordinate
    // Add a random value between -2 and 2 to the y-coordinate
    void moveBug() 
        x += speed;
        y += (int) random(-2, 2);
    

    // Constrain the y-coordinate between 10 and the height of the output window minus 10
    void boundaries() 
        y = constrain(y, 10, height - 10);
    
    // If the x-coordinate is greater than width of the output window, reset the x-coordinate to 
    -80

    void resetBug() 
        if (x > width) 
            x = -80;
        
    

我尝试在没有静态类的情况下移动圆圈的示例:

class Test
    int x;
    int y;
    int speed;
    Test()
        x = 1;
        y =(int) random(0,400);
        speed = 1;
    
    void drawThing()
        circle(x,y,10);
    
    void moveThing()
        x += speed;
    

【问题讨论】:

那应该怎么读? 我们可以看看你是如何在你的代码中使用这个类的吗?正如它所写的那样,它应该从左到右移动......如果你正确使用你的方法。 【参考方案1】:

这是我的驱动程序中的代码:

Test draw;
Test move;
void setup()
size(400,400);
draw = new Test();
move = new Test();

void draw()
draw.drawThing();
move.moveThing();

但是用draw.moveThingmove 换成move.moveThing 已修复。

【讨论】:

只是一个建议,但您可以在绘制之前更新位置(移动)。这样,用户看到的内容和您正在计算的内容将保持一致。当然,在 60 FPS 时这并不重要,但在某些极端情况下它可能会有所帮助,特别是如果您可以“暂停”移动。顺便说一句,感谢您发布这个自我回答,很少有新用户这样做,我们永远不知道它将来会帮助谁。

以上是关于操作非静态变量的主要内容,如果未能解决你的问题,请参考以下文章

C++对象模型:成员变量<一>非静态成员

无法从静态上下文中引用非静态 变量 this

c#静态变量和非静态变量的区别

MFC中静态成员函数调用其他类的非静态变量

"无法从静态上下文中引用非静态变量,非静态方法"

1.7Oob 静态变量静态方法