在不同的屏幕上处理一个玩家?
Handling a Player in Different Screens?
我正在尝试巧妙地分离播放器中的方法以处理它将在其中的多个不同屏幕。
例如,在我的 'world' 屏幕中,我想渲染玩家的自上而下纹理并使用 WASD 控制他们的 X 和 Y 移动。但是,在 'battle' 屏幕中,我想渲染玩家的侧视图并使用 WASD 控制他们的攻击。
public class Player {
public void renderInScreen1(){...topdown...}
public void controlInScreen1(){...Move X and Y...}
public void renderInScreen2(){...Sideview...}
public void controlInScreen2(){...Control attacks...}
}
有没有一种模式或其他东西可以帮助组织我的玩家在不同屏幕上的不同方法?
如果你想对你的方法进行整齐的排序,你可以将它们分成子类,这些子类将充当组件。您最终会得到更短的方法名称(如果您喜欢的话)和更简洁的代码,尽管创建组件需要一些设置,您可以在此处看到:
public class Player {
// seting up
public Topdown topdown = new Topdown(this);
public SideView sideView = new SideView(this);
public static class Topdown extends Component {
public Topdown(Player p) {
super(p);
}
// simple names
public void render() {}
public void control() {}
}
public static class SideView extends Component {
public SideView(Player p) {
super(p);
}
public void render() {}
public void control() {}
}
// this again shortens the name and documentates your code, you don't have to
// include "Component" in your component names though it still will be apparent that
// class is component
public static class Component {
Player p;
public Component(Player p) {
this.p = p;
}
}
}
你最终会遇到这种 api 电话:
player.sideView.control()
player.sideView.render()
// and so on
我正在尝试巧妙地分离播放器中的方法以处理它将在其中的多个不同屏幕。
例如,在我的 'world' 屏幕中,我想渲染玩家的自上而下纹理并使用 WASD 控制他们的 X 和 Y 移动。但是,在 'battle' 屏幕中,我想渲染玩家的侧视图并使用 WASD 控制他们的攻击。
public class Player {
public void renderInScreen1(){...topdown...}
public void controlInScreen1(){...Move X and Y...}
public void renderInScreen2(){...Sideview...}
public void controlInScreen2(){...Control attacks...}
}
有没有一种模式或其他东西可以帮助组织我的玩家在不同屏幕上的不同方法?
如果你想对你的方法进行整齐的排序,你可以将它们分成子类,这些子类将充当组件。您最终会得到更短的方法名称(如果您喜欢的话)和更简洁的代码,尽管创建组件需要一些设置,您可以在此处看到:
public class Player {
// seting up
public Topdown topdown = new Topdown(this);
public SideView sideView = new SideView(this);
public static class Topdown extends Component {
public Topdown(Player p) {
super(p);
}
// simple names
public void render() {}
public void control() {}
}
public static class SideView extends Component {
public SideView(Player p) {
super(p);
}
public void render() {}
public void control() {}
}
// this again shortens the name and documentates your code, you don't have to
// include "Component" in your component names though it still will be apparent that
// class is component
public static class Component {
Player p;
public Component(Player p) {
this.p = p;
}
}
}
你最终会遇到这种 api 电话:
player.sideView.control()
player.sideView.render()
// and so on