我使用Java制作游戏,我的游戏是基于状态的游戏,所以它扩展了StateBasedGame,我想把游戏放在一个网站上,这将要求我把它变成applet(除非有另一种方式)所以它还必须扩展JApplet,在尝试扩展多个类并在线阅读之后我没有运气并且在论坛帖子上阅读它不可能有多个扩展。现在这是否意味着我无法将我的游戏放在网站上?
这是我的主要课程,它扩展了StateBasedGame:
package javagame;
import org.newdawn.slick.*;
import org.newdawn.slick.state.*;
public class Game extends StateBasedGame{
public static final String gamename = "Croft";
public static final int menu = 0;
public static final int play = 1;
public Game(String gamename){//create window on statup
super(gamename);//adds title to screen
this.addState(new Menu(menu));//"this" means get from this class
this.addState(new Play(play));
}
public void initStatesList(GameContainer gc) throws SlickException{
//we need this because we inhereted from StateBasedGame, gc manages behind the scene stuff
this.getState(menu).init(gc, this);//telling java what states we have
this.getState(play).init(gc, this);
this.enterState(menu);//tells java that you want to show menu before play
}
public static void main(String[] args) {
AppGameContainer appgc;//the window for your game
try{
appgc = new AppGameContainer(new Game(gamename));//window holding the Game
appgc.setDisplayMode(640, 360,false);//size, sizetrue would make it full screen //640,360
appgc.start();//creates the window
}catch(SlickException e){//built into slick for error handelling
e.printStackTrace();}
}
}
EDIT1:
html代码:
<applet code="org.lwjgl.util.applet.AppletLoader"
archive="lwjgl_util_applet.jar"
codebase="."
width="640" height="480">
<param name="al_title" value="Ham Blaster">
<param name="al_main" value="org.newdawn.slick.AppletGameContainer">
<param name="game" value="org.javagame.Game">
<param name="al_jars" value="slick.jar, lwjgl.jar, slick.jar">
<param name="al_windows" value="windows_natives.jar">
<param name="al_linux" value="linux_natives.jar">
<param name="al_mac" value="macosx_natives.jar">
<param name="separate_jvm" value="true">
</applet>
我的jar文件名是racegame,我的主要类是Game,我的包名是javagame。
错误:ClassNotFoundException org.lwjgl.util.applet.AppletLoader
答案 0 :(得分:6)
Java不支持多重继承。要输入问题,请使用接口。但在这种情况下,你对行为更感兴趣,所以我会使用构图。
public class GameApplet extends JApplet {
private Game game = new Game();
public void init() {
game.foo();
...
}
...
}
答案 1 :(得分:4)
你不能从一个以上的课程扩展课程。有很多方法可以获得你想要的东西,最简单的方法就是拥有另一个扩展JApplet
的类,让这个类使用你的游戏类。这称为组合 - 当一个类使用一个或多个其他类的实例时。
通常,如果要从多个源扩展,则可以使用接口,并使用来自多个源的implement
。但是,这不一样,因为使用接口实际上并不提供功能;它只定义行为,即指定实现类必须实现的方法。
答案 2 :(得分:2)
如果我没错,那个StateBasedGame
类来自Slick 2D API。您应该查找有关使用Slick 2D制作applet的信息,例如this post。
答案 3 :(得分:0)
您需要将此类封装在可以从Applet中引导的对象中。
也就是说,Java不允许扩展多个类,所以你读的是正确的。