0

Java を使用してゲームを作成しました。私のゲームは状態ベースのゲームなので、StateBasedGame を拡張します。ゲームを Web サイトに配置したいのですが、(別の方法がない限り) アプレットにする必要があります。複数のクラスを拡張しようとしてオンラインで読んだ後、私は運が悪く、複数の拡張を持つことは不可能であるというフォーラムの投稿を読みました。これは、自分のゲームを Web サイトに掲載できないということですか?

これまでの私のメイン クラスは、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

4

4 に答える 4

6

Java は多重継承をサポートしていません。入力の問題については、インターフェースを使用してください。しかし、この場合は振る舞いに関心があるので、合成を使用します。

public class GameApplet extends JApplet {
  private Game game = new Game();

  public void init() {
    game.foo();
    ...
  }

  ...
}
于 2013-01-07T22:19:09.460 に答える
4

クラスを複数のクラスから拡張することはできません。必要なものを取得する方法はいくつかありますが、最も簡単な方法は、 を拡張する別のクラスを作成しJApplet、そのクラスにゲーム クラスを使用させることです。これは構成と呼ばれます。クラスが 1 つ以上の他のクラスのインスタンスを使用する場合です。

通常、複数のソースから拡張する場合は、インターフェイスを使用しimplement、複数のソースから拡張します。ただし、インターフェイスを使用しても実際には機能が提供されないため、これは同じではありません。動作を定義するだけです。つまり、実装クラスが実装する必要があるメソッドを指定します。

于 2013-01-07T22:19:02.287 に答える
2

私が間違っていなければ、そのStateBasedGameクラスはSlick2DAPIから来ています。この投稿など、Slick2Dを使用したアプレットの作成に関する情報を探す必要があります。

于 2013-01-07T22:22:59.567 に答える
0

アプレット内からブートストラップできるオブジェクト内にこのクラスをカプセル化する必要があります。

とはいえ、Java では複数のクラスを拡張することは許可されていないため、読んだ内容は正しいです。

于 2013-01-07T22:20:16.680 に答える