Получение значения из одного класса в другой

#java

#java

Вопрос:

 private void update(float delta) {

    playerRectangle.setPosition(getX()   velocity.x * delta, 300);

    setX(getX()   velocity.x * delta);

}
  

Итак, допустим, у меня есть вышеупомянутый метод в ClassA, но я хочу использовать

 playerRectangle.setPosition(getX()   velocity.x * delta, 300);
  

однако для ClassB дельта не будет определена в ClassB, поэтому мне было интересно, как мне получить значение дельты?

* Я создал методы получения для velocity и playerRectangle в ClassA

 public class Player extends Sprite implements InputProcessor{

private Vector2 velocity;
private float speed = 500;
private Rectangle playerRectangle, rightRectangle, leftRectangle;

public Player(Sprite sprite){
    super(sprite);
    playerRectangle = new Rectangle(0,0,286,160);
    rightRectangle = new Rectangle(1280,0,0,720);
    leftRectangle = new Rectangle(0,0,0,720);
    velocity = new Vector2(0,0);

}

public void draw(SpriteBatch spriteBatch){
    update(Gdx.graphics.getDeltaTime());
    super.draw(spriteBatch);
}

private void update(float delta) {

    playerRectangle.setPosition(getX()   velocity.x * delta, 300);

    setX(getX()   velocity.x * delta);

}

public Rectangle getPlayerRectangle(){
    return playerRectangle;
}

public Rectangle getRightRectangle(){
    return rightRectangle;
}

public Rectangle getLeftRectangle(){
    return leftRectangle;
}

public Vector2 getVelocity(){
    return velocity;
}
  

Комментарии:

1. Пожалуйста, предоставьте нам код классов.

2. Можете ли вы предоставить код velocity playerRectangle классов and ?

3. Извините за это, просто обновил его.

4. Этот вопрос очень неясен. delta это просто аргумент, передаваемый методу. Что мешает вам передать то же значение другому методу в другом классе?

Ответ №1:

Это сделает

 ClassA obj= new ClassA();
obj.playerRectangle.setPosition(obj.getX()   obj.velocity.x * obj.delta, 300);
  

это будет работать только в том случае, если все функции и
объекты (например, getx(), velocity.x, delta ) являются общедоступными.

Комментарии:

1. Извините, только что обновил его. ClassA принимает спрайт, если это имеет значение

2. Я считаю, что это сработает, если переменные являются общедоступными. Но с помощью private вы не можете получить доступ к какой-либо функции внутри, поскольку ее область действия находится внутри класса. Расширение класса на самом деле ничего не блокирует. Все его объекты и переменные из JVM.

3. Дело в том, что я должен сделать поле ‘delta’ в ClassA, но я хотел бы использовать метод обновления ‘delta’.

4. вы не можете вызвать частный метод извне, вы можете создать общедоступную функцию и вызвать из нее функцию обновления. В противном случае измените общедоступную функцию обновления. И, как я вижу Gdx.graphics.getDeltaTime() , это статическое значение, поэтому вы можете получить его откуда угодно.!! Выберите любой из вариантов.

5. Правильно, я это сделал. Я сделал его общедоступным и по-прежнему получаю тот же результат, если бы я должен был сделать ‘obj.delta’ и Gdx.graphics.getDeltaTime(), похоже, не работает, но я попробую разобраться в этом.

Ответ №2:

Включите метод setPlayerRectangle в свой класс Player

 public void setPlayerRectangle(Rectangle rectangleObject){
    playerRectangle= rectangleObject;
}
  

Затем

 Player playerObj = new Player(spriteObject);
....
....
// Create a new Rectangle object with/without arguments as per your need
Rectangle yourRectangle = new Rectangle();
yourRectangle.setPosition(getX()   playerObj.getVelocity().x *deltaValue, 300);
  

Вы не упомянули, где определен метод getX(), если он находится в классе Player,
тогда напишите playerObj.getX() ..
а затем установите для него значение playerObj

 playerObj.setPlayerRectangle(yourRectangle);