首页 > 解决方案 > 从另一个类调用函数

问题描述

我正在为一个学校项目编写一个小程序。主题是“objective Coding”,所以在 draw 方法和 setup 方法所在的地方有“main Tab”。在其他选项卡中,我编写了其他类和函数。

所以在我的“主选项卡”中有这个功能void draw,它看起来像这样:

void draw() {               
  background();            
  h1.displayH();
  steuerungH();
  t1.displayT();
}                           

这三种方法background();h1.displayH();t1.displayT();没有问题。我尝试编写如下代码:

...
...
h1.streuerungH();
...

h1是一个对象,一个矩形我尝试用函数移动void steuerungH();,但总是有一个错误说:

该功能steuerungH()不存在。

我不确定到底是什么问题,因为我编写函数的类void steuerungH();看起来与其他类完全一样

float gravity = 0.1;
float speed = 0;

class Steuerung {

  void steuerungH(){
    if (key == UP|| key == 'w') {
      playerYPosition = playerYPosition +speed;
      speed = speed + gravity;
        if (playerYPosition >= 30); {
          speed = speed *-1;
        }
    } else if (key == DOWN ||key == 's') {
      /*Duck methode muss noch geschrieben werden*/
    } else if (key == RIGHT || key == 'd') {
      playerXPosition = playerXPosition +10;
    } else if (key == LEFT ||key == 'a') {
      playerXPosition = playerXPosition -10;
    }
  }
}

标签: javafunctionprocessing

解决方案


首先,您应该考虑playerXPositionplayerYPositionPlayer用属性playerXPositionplayerYPosition方法创建一个类不是更好streuerungH吗?

class Player {

    float gravity = 0.1;
    float speed = 0;
    float playerXPosition;
    float playerYPosition;

    // [...]

    void steuerungH(){
        if (key == UP|| key == 'w') {
            playerYPosition = playerYPosition +speed;
            speed = speed + gravity;
            if (playerYPosition >= 30); {
                speed = speed *-1;
            }
        } else if (key == DOWN ||key == 's') {
            /*Duck methode muss noch geschrieben werden*/
        } else if (key == RIGHT || key == 'd') {
            playerXPosition = playerXPosition +10;
        } else if (key == LEFT ||key == 'a') {
            playerXPosition = playerXPosition -10;
        }
    }
}

无论如何,如果您想保留当前的设计,那么您必须选择解决问题:

创建一个Steuerung. 例如

Steuerung s = new Steuerung();

void draw() {
    // [...]

    s.streuerungH();

    // [...]
}

另一种选择是:

由于Processing在全局命名空间中提供了函数,因此您可以转向steuerungH函数:

float gravity = 0.1;
float speed = 0;

void steuerungH(){
    // [...]
}
void draw() {
    // [...]

    streuerungH();

    // [...]
}

推荐阅读