当前位置: 首页 > 工具软件 > Slick2D > 使用案例 >

Slick2D游戏引擎基本技术讲解

太叔富
2023-12-01

目录

前言

基本技术

切换 State


前言

本章利用 Slick2D 引擎内置的StateBasedGame类写一个简单小游戏作为示例,会涉及到逐帧重绘、数据更新等基本概念,以及一些将贯穿开发始终的技术的应用。

基本技术

StateBasedGame 的思想就是一个游戏中包含若干个 State,每个 State 就相当于之前讲的一个 BasicGame,同时可以在这些 State 之间切换。因此,一个 StateBasedGame 本身不再含有update、render等方法(这些方法随后会出现在每个 State 中),它只需要包含main和initStatesList方法。例如代码框架如下: ```

java public class SetupClass extends StateBasedGame { 

public SetupClass(String title) { 
    super(title); 
} 

public static void main(String[] args) throws SlickException { 
    // ... 
} 

public void initStatesList(GameContainer gc) throws SlickException {

}

} 每个 StateBasedGame 包含的 GameState 将在initStatesList中初始化。每个 GameState 都是一个基于BasicGameState类的子类的对象。它需要实现至少这几个方法:getID、init、update、render。代码框架: java

public class GameState extends BasicGameState { 
public void init(GameContainer gc, StateBasedGame game) throws SlickException {

}
public void update(GameContainer gc, StateBasedGame game, int delta) 
        throws SlickException {

}
public void render(GameContainer gc, StateBasedGame game, Graphics g) 
        throws SlickException {

}
public int getID() {
    return 0;
}

} ``` 其中getID方法的返回值就是这个 State 的 ID,每个 State 必须拥有不同的 ID,以便在 State 之间切换。

当我们创建好一个 State 的类(这个例子中叫做GameState),就可以在initStatesList中加入这个 State 了: java this.addState(new GameState()); 也可以加入多个 State,游戏默认会载入第一个 State。如果要在 States 之间切换,你应该在相应 State 的update函数中执行如下代码: java game.enterState(1); 上面的代码会导致游戏切换到 ID 为 1 的 state。

在游戏中,当我们切换到一个新的 State 时,旧的 State 会被暂停,它的update、render函数也不会再被调用了。这点很关键,比如我们可以很方便地创建一个「暂停」State,然后切换到这个 State 来使游戏暂停。

切换 State

当然我们也可以使用一个动画效果来在不同 State 之间切换:

game.enterState(1, new FadeOutTransition(), new FadeInTransition()); 

第一个参数是目标 State 的 ID,后两个是离开和进入的过渡效果。

到这里我们就大概知道slick2d的大体结构了,对于java程序猿来说,这个游戏引擎非常简单,很容易上手,但是slick2d已经快要10年没有更新了,对于感兴趣想要玩一玩的,可以用一下,对于想要用这个开发商业游戏的就要考虑一下其他引擎了。

我们将在下一章讲解使用slick2d开发一个小游戏demo。

 类似资料: