Ich habe zwei Klassen Player und menuState. Abhängig von einer Variablen in der Player-Klasse mit dem Namen "model" ändert sich das Modell des Players. Jetzt möchte ich das Modell über eine Schaltfläche im Menü ändern, aber ich kann nicht herausfinden, wie ich auf die Variable "model" aus dem menuState zugreifen kann, ohne ein neues Player-Objekt zu erstellen.
Meine Spielerklasse:
package entitys;
import State.State;
import data.Handler;
import grafik.Animation;
import grafik.Assets;
import java.awt.*;
public class Player extends Creature {
private Animation playerWalkLeft;
private Animation playerWalkRight;
private Animation playerIdle;
private int model = 1;
public Player(Handler handler, float x, float y) {
super(handler, x, y, Creature.DEFAULT_CREATURE_WIDTH, 112);
bounds.x = 6;
bounds.y = 52;
bounds.width = 52;
bounds.height = 64;
if (model == 1) {
playerWalkLeft = new Animation(6,Assets.fairy_run[0],Assets.fairy_run[1],Assets.fairy_run[2],Assets.fairy_run[3]);
playerWalkRight = new Animation(6,Assets.fairy_run[0],Assets.fairy_run[1],Assets.fairy_run[2],Assets.fairy_run[3]);
playerIdle = new Animation(10,Assets.fairy_idle[0],Assets.fairy_idle[1],Assets.fairy_idle[2],Assets.fairy_idle[3]);
}else if (model == 2) {
playerWalkLeft = new Animation(6, Assets.dragon_run[0], Assets.dragon_run[1], Assets.dragon_run[2], Assets.dragon_run[3]);
playerWalkRight = new Animation(6, Assets.dragon_run[0], Assets.dragon_run[1], Assets.dragon_run[2], Assets.dragon_run[3]);
playerIdle = new Animation(10, Assets.dragon_idle[0], Assets.dragon_idle[1], Assets.dragon_idle[2], Assets.dragon_idle[3]);
}else if (model == 3) {
playerWalkLeft = new Animation(6, Assets.wizzard_run[0], Assets.wizzard_run[1], Assets.wizzard_run[2], Assets.wizzard_run[3]);
playerWalkRight = new Animation(6, Assets.wizzard_run[0], Assets.wizzard_run[1], Assets.wizzard_run[2], Assets.wizzard_run[3]);
playerIdle = new Animation(10, Assets.wizzard_idle[0], Assets.wizzard_idle[1], Assets.wizzard_idle[2], Assets.wizzard_idle[3]);
} else if (model == 4){
playerWalkLeft = new Animation(6, Assets.knight_run[0], Assets.knight_run[1], Assets.knight_run[2], Assets.knight_run[3]);
playerWalkRight = new Animation(6, Assets.knight_run[0], Assets.knight_run[1], Assets.knight_run[2], Assets.knight_run[3]);
playerIdle = new Animation(10, Assets.knight_idle[0], Assets.knight_idle[1], Assets.knight_idle[2], Assets.knight_idle[3]);
}
}
@Override
public void tick() {
getInput();
move();
handler.getCamera().centerOnEntity(this);
playerWalkRight.runAnimation();
playerIdle.runAnimation();
playerWalkLeft.runAnimation();
}
private void getInput() {
xMove = 0;
yMove = 0;
if (handler.getKeyManager().up)
yMove = -speed;
if (handler.getKeyManager().down)
yMove = speed;
if (handler.getKeyManager().left)
xMove = -speed;
if (handler.getKeyManager().right)
xMove = speed;
if (handler.getKeyManager().escape)
State.setState(handler.getGame().menuState);
}
@Override
public void render(Graphics g) {
if(xMove >0) {
playerWalkRight.drawAnimation(g,(int) (x - handler.getCamera().getxOffset()), (int) (y - handler.getCamera().getyOffset()), width, 112);
}
else if(xMove<0){
playerWalkLeft.drawAnimation(g,(int) (x - handler.getCamera().getxOffset()), (int) (y - handler.getCamera().getyOffset()), width, 112);
}
else {
playerIdle.drawAnimation(g,(int) (x - handler.getCamera().getxOffset()), (int) (y - handler.getCamera().getyOffset()), width, 112);
}
if (handler.getKeyManager().debug) {
g.setColor(Color.red);
g.drawRect((int) (x + bounds.x - handler.getCamera().getxOffset()),
(int) (y + bounds.y - handler.getCamera().getyOffset()),
bounds.width, bounds.height);
}
}
public int getModel() {
return model;
}
public void setModel(int model) {
this.model = model;
}
}}
Meine menuState-Klasse:
package State;
import data.Handler;
import grafik.Assets;
import ui.ClickListener;
import ui.UIImageButton;
import ui.UIManager;
import entitys.Player;
import java.awt.*;
public class MenuState extends State {
private UIManager uiManager;
public MenuState(Handler handler) {
super(handler);
uiManager = new UIManager(handler);
handler.getMouseManager().setUiManager(uiManager);
uiManager.addObject(new UIImageButton(144, 286, 64, 128, Assets.btn_dragon, new ClickListener() {
@Override
public void onClick(){
State.setState(handler.getGame().gameState);
//p.setModel(2);
}
}));
uiManager.addObject(new UIImageButton(464, 286, 64, 128, Assets.btn_wizzard, new ClickListener() {
@Override
public void onClick(){
State.setState(handler.getGame().gameState);
//p.setModel(3);
}
}));
uiManager.addObject(new UIImageButton(784, 286, 64, 128, Assets.btn_knight, new ClickListener() {
@Override
public void onClick(){
State.setState(handler.getGame().gameState);
//p.setModel(4);
}
}));
uiManager.addObject(new UIImageButton(1104, 286, 64, 128, Assets.btn_fairy, new ClickListener() {
@Override
public void onClick(){
State.setState(handler.getGame().gameState);
//p.setModel(1);
}
}));
}
@Override
public void tick() {
uiManager.tick();
}
@Override
public void render(Graphics g) {
uiManager.render(g);
}
}}
Danke im Voraus
Sie können das Modellfeld in der MenuState-Klasse erstellen und seinen Wert beim Klicken ändern, anstatt das Modellfeld in der Player-Klasse, wenn Sie nicht möchten, dass es mit einer bestimmten Player-Instanz verknüpft ist. Dies ist die einfachste Lösung. Lassen Sie mich wissen, ob dies geholfen hat.
Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.
Bei Verstößen wenden Sie sich bitte [email protected] Löschen.
Lass mich ein paar Worte sagen