#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);