前言
上一章我们创建了玩家对象,这一章我们实现对玩家的基本控制
注意事项
之前我们都是直接通过FXGL类来操作引擎,之后会全部改为引入静态方法的方式,这也是官方推荐的方式,之前使用FXGL类的方式主要用于理解调用的方法是从哪里来的。
静态引入(推荐)
// import
import static com.almasb.fxgl.dsl.FXGL.*;
// class method
spawn("Player",FXGL.getAppWidth()/2,FXGL.getAppHeight()/2);
使用类的静态方法
// import
import com.almasb.fxgl.dsl.FXGL;
// class method
FXGL.spawn("Player",FXGL.getAppWidth()/2,FXGL.getAppHeight()/2);
编码
首先我们需要将Player实体保存,方便之后操作
/**
* 玩家实体
*/
private Entity player;
/**
* 初始化游戏内容
*/
@Override
protected void initGame() {
// 注册实体工厂
FXGL.getGameWorld().addEntityFactory(new DemoEntityFactory());
// 在界面正中间生成玩家实体
player = FXGL.spawn("Player",FXGL.getAppWidth()/2,FXGL.getAppHeight()/2);
}
接着实现对Player的控制部分
首先也是先重写 initInput 方法,控制部分的程序会在这里被加载,在这里我们实现对Player的控制,例如上下左右:
/**
* 初始化输入
*/
@Override
protected void initInput() {
onKey(KeyCode.W,"上",()->{
player.translateY(-5);
});
onKey(KeyCode.S,"下",()->{
player.translateY(+5);
});
onKey(KeyCode.A,"左",()->{
player.translateX(-5);
});
onKey(KeyCode.D,"右",()->{
player.translateX(+5);
});
}
此时运行程序即可操作Player移动。
注意,此处的上下左右为操作的名称,会显示在菜单中的按键设置部分。操作时注意输入法会影响输入。
完整代码
DemoEntityFactory没有改动就不贴了.
import com.almasb.fxgl.app.GameApplication;
import com.almasb.fxgl.app.GameSettings;
import com.almasb.fxgl.dsl.FXGL;
import com.almasb.fxgl.entity.Entity;
import javafx.scene.input.KeyCode;
import static com.almasb.fxgl.dsl.FXGL.*;
/**
* @author lhDream
*/
public class HelloWorldApp extends GameApplication {
/**
* 玩家实体
*/
private Entity player;
/**
* 初始化设置
* @param settings
*/
@Override
protected void initSettings(GameSettings settings) {
settings.setTitle("Hello world");
settings.setWidth(600);
settings.setHeight(600);
settings.setMainMenuEnabled(true);
settings.setGameMenuEnabled(true);
}
/**
* 初始化游戏内容
*/
@Override
protected void initGame() {
// 注册实体工厂
FXGL.getGameWorld().addEntityFactory(new DemoEntityFactory());
// 在界面正中间生成玩家实体
player = FXGL.spawn("Player",FXGL.getAppWidth()/2,FXGL.getAppHeight()/2);
}
/**
* 初始化输入
*/
@Override
protected void initInput() {
onKey(KeyCode.W,"上",()->{
player.translateY(-5);
});
onKey(KeyCode.S,"下",()->{
player.translateY(+5);
});
onKey(KeyCode.A,"左",()->{
player.translateX(-5);
});
onKey(KeyCode.D,"右",()->{
player.translateX(+5);
});
}
/**
* main 程序的开始
* @param args 参数
*/
public static void main(String[] args) {
launch(args);
}
}
完整项目
https://github.com/lhDream/lhDreamGameDemo/tree/master/HelloWorld