前言

  上一章我们创建了玩家对象,这一章我们实现对玩家的基本控制

注意事项

之前我们都是直接通过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

淡淡的心,回味的情