2

私は現在、J2MEを学び、コネクト4ゲームを構築しようとしています(これを「4列」として知っている人もいるかもしれません)。私を怒らせている1つのことを除いて、私は多かれ少なかれ私のゲームのすべての側面を機能させています!もちろん、これはユーザーからのテキストの取得です。

ゲームの2人用モードでは、各プレーヤーが自分の名前を入力できるようにしたいと思います。メインのMidletを使用しないテキスト入力の実用的な例を見つけるのに苦労しています。

たとえば、java2x.comの例では、単一のミッドレットを使用しています(クラスやキャンバスなどは使用していません)。

現状では、私のアプリケーションのメインのmidlet startメソッドは、メインメニュークラスを開くだけです。

    package midlet;

import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import view.*;

public class Main extends MIDlet {
    public void startApp() { 
        MainMenu mm = new MainMenu();
        showScreen(mm);
    }

    public static void showScreen(Displayable screen) {
        Display.getDisplay(instance).setCurrent(screen);
    }

    public void pauseApp() {
    }

    public static void quitApp() {
        instance.notifyDestroyed();
    }

    public void destroyApp(boolean unconditional) {
    }
}

メインメニュークラスは次のとおりです。

 package view;

    import javax.microedition.lcdui.*;
    import lang.*;
    import model.*;
    import midlet.Main;

    public class MainMenu extends List implements CommandListener {

        private Command ok = new Command(StringDefs.currDefs.getString("TEXT_OK"), Command.OK, 1);

        public MainMenu() {
            super(StringDefs.currDefs.getString("TEXT_TITLE"), List.IMPLICIT);
            // we we add in the menu items
            append(StringDefs.currDefs.getString("TEXT_PLAY1"), null);
            append(StringDefs.currDefs.getString("TEXT_PLAY2"), null);
            append(StringDefs.currDefs.getString("TEXT_HIGHSCORETABLE"), null);
            append(StringDefs.currDefs.getString("TEXT_HELP"), null);
            append(StringDefs.currDefs.getString("TEXT_QUIT"), null);
            this.addCommand(ok);
            this.setCommandListener(this);
        }

        public void commandAction(Command c, Displayable d) {
            if (c == ok) {
                int selectedItem = this.getSelectedIndex();
                if (selectedItem != -1) {
                    switch (selectedItem) {
                        case 0:
                            GameBoard gameBoard = new model.GameBoard();
                            GameCanvasOnePlayer board = new GameCanvasOnePlayer(gameBoard);
                            Main.showScreen(board);
                            break;
                        case 1:
                            GameBoard gameBoardTwo = new model.GameBoard();
                            GameCanvasTwoPlayer GameCanvasTwoPlayer = new GameCanvasTwoPlayer(gameBoardTwo);
                            Main.showScreen(GameCanvasTwoPlayer);
                            break;
                        case 2:
                            HighScores hc = new HighScores();
                            midlet.Main.showScreen(hc);
                            break;
                        case 3:
                            Help he = new Help();
                            midlet.Main.showScreen(he);
                            break;
                        case 4:
                            QuitConfirmation qc = new QuitConfirmation();
                            midlet.Main.showScreen(qc);
                            break 
                    }
                }
            }
        }
    }

このメニューから2人用ゲームを選択した場合(上記のスイッチのケース1)、両方のプレーヤー名を取得して保存できるように、2つのテキストボックスを表示したいと思います。

これを行うための最良の方法は何でしょうか?これはキャンバスでも可能ですか?そして、私が関連する例または少なくとも役立つかもしれない何かをどこで見つけることができるか知っていますか?

4

4 に答える 4

3

次のいずれかを実行できます。1。ユーザーに醜いテキストボックス(画面全体を占める)に入力を入力させます。2。ずっと前に最初から作成した、ここ で利用できる次のようなテキストボックスコントロールを使用します(3表示されているテキストフィールド):

代替テキスト

于 2009-12-29T19:42:12.810 に答える
2

私は解決策を持っています!よくある種。

メインミッドレットを使用せずにフォームを作成できます。

midlet次のメインクラスは、(私のプロジェクトのように)と呼ばれるソースパッケージの一部です。

package midlet;

import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import view.*;

public class Main extends MIDlet {
    private static UsernameForm unameForm=new UsernameForm();
    private static MIDlet instance;
    public void startApp() {
        instance=this;
        showScreen(unameForm); // show user name form

    }

    public static String getUsername1() {
        return(unameForm.getUsername1());
    }

    public static String getUsername2() {
        return(unameForm.getUsername2());
    }

    public void pauseApp() {
    }

    public static void showScreen(Displayable d) {
        Display.getDisplay(instance).setCurrent(d); // show next screen

    }

    public void destroyApp(boolean unconditional) {
    }
}

コードの次のビットは、view:と呼ばれるソースパッケージの一部であるユーザー名フォームクラスです。

package view;

import javax.microedition.lcdui.*;

public class UsernameForm extends Form implements CommandListener {
    private String username1="";
    private String username2="";
    private TextField tfUsername1=new javax.microedition.lcdui.TextField("User 1","User1",40,TextField.ANY);
    private TextField tfUsername2=new javax.microedition.lcdui.TextField("User 2","User2",40,TextField.ANY);
    private Command cmdOK=new Command("OK",Command.OK,1);
    public UsernameForm() {
        super("User details");
        append(tfUsername1);
        append(tfUsername2);
        addCommand(cmdOK);
        setCommandListener(this);
    }

public void commandAction(Command cmd,Displayable d) {
    if (cmd==cmdOK) {
        this.setUsername1(tfUsername1.getString());
        this.setUsername2(tfUsername2.getString());
        // TO DO, GO TO NEXT SCREEN
    }
}

/**
 * @return the username1
 */
public String getUsername1() {
    return username1;
}

/**
 * @param username1 the username1 to set
 */
public void setUsername1(String username1) {
    this.username1 = username1;
}

/**
 * @return the username2
 */
public String getUsername2() {
    return username2;
}

/**
 * @param username2 the username2 to set
 */
public void setUsername2(String username2) {
    this.username2 = username2;
}
}

したがって、キャンバスを使用してそれを行う簡単な方法はないようです。代わりに「醜いフォーム」を使用する方が良いと思います。どのデバイスでも機能するはずだからです。

于 2009-12-31T17:15:38.847 に答える
1

それは本当に厄介な状況です。基本的に、J2MEの入力テキストウィジェットを使用する必要があります(ちなみに、これはひどいように見えます)。そうしないと、さまざまなタイプの電話キーボードの背後にあるすべてのロジックを実装する必要があり、辞書にアクセスできなくなります...キャンバスは基本的にキーストロークのみをキャプチャし、テキスト入力はキャプチャしません。 ..

ごめん。

于 2009-12-29T15:59:46.367 に答える
1

ここでは、カスタムアイテムを実装する必要があります。必要なのは、ユーザー/プレーヤーがCustomItemsに自分の名前を入力できるようにするキャンバスの部分を拡張し、customItemsの事前定義された抽象メソッドを実装してメソッドを作成することだけです。 Key Strokesの場合、それはnokiaフォーラムで入手できます。彼らはそれをかなり良いと説明しました。Nokiaフォーラムをチェックしてください。

于 2012-02-17T05:57:43.007 に答える