前言 {#前言}
上一章我们创建了玩家对象,这一章我们实现对玩家的基本控制
注意事项 {#注意事项}
之前我们都是直接通过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实体保存,方便之后操作 {#首先我们需要将player实体保存方便之后操作}
/**
* 玩家实体
*/
private Entity player;
/**
* 初始化游戏内容
*/
@Override
protected void initGame() {
// 注册实体工厂
FXGL.getGameWorld().addEntityFactory(new DemoEntityFactory());
<span class="hljs-comment">// 在界面正中间生成玩家实体</span>
player = FXGL.spawn(<span class="hljs-string">"Player"</span>,FXGL.getAppWidth()/<span class="hljs-number">2</span>,FXGL.getAppHeight()/<span class="hljs-number">2</span>);
}
接着实现对Player的控制部分 {#接着实现对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