2.1.6 使用案例

由于脚本语言的语法简单和灵活,非常适于没有或只有少量编程背景的用户来使用。这些用户可以通过脚本语言来定制程序的业务逻辑和用户界面等。通过脚本语言,可以在程序的易用性和灵活性之间达到一个比较好的平衡。比如脚本语言Lua就被广泛应用在游戏开发中,用来对游戏的内部行为和用户界面进行定制。

下面通过一个具体的案例来说明如何使用脚本语言。这个案例也和游戏有关。一般的游戏都会自带一个控制台,允许用户输入命令来对游戏本身进行修改。这里展示的是一个通过JavaScript来进行游戏配置的案例。这个游戏控制台的实现被大大简化了。运行时在一个线程中等待用户输入命令。对输入的命令进行适当处理之后就交给JavaScript脚本引擎来执行。这里的GameConfig表示的是与游戏有关的配置信息,可以通过JavaScript语言在控制台中进行修改。代码清单2-13给出了这个简易的游戏控制台的基本实现。GameConfig的getScriptBindings方法返回的语言绑定对象中包含的是对于游戏控制台可见的配置项。比如,用户在控制台输入“config.screenWidth=300”就可以直接修改GameConfig中的screenWidth域的值。

代码清单2-13 使用脚本引擎实现的游戏控制台


public class GameConsole extends JsScriptRunner implements Runnable{

private GameConfig config;

public GameConsole(GameConfig config){

this.config=config;

}

public void executeCommand(String command)throws ScriptException{

ScriptEngine engine=getJavaScriptEngine();

if(command.indexOf("println")==-1){

command="println("+command+");";

}

engine.eval(command, config.getScriptBindings());

}

public void run(){

Scanner scanner=new Scanner(System.in);

while(true){

String line=scanner.nextLine();

if("quit".equals(line)){

break;

}

try{

executeCommand(line);

}catch(ScriptException ex){

System.err.println("错误的命令!");

}

}

}

}


通过这个简易的控制台,用户对脚本语言所做的配置修改,对于通过Java语言来实现的其他组件来说是立即生效的。