2

現在、Gluon プラグインを使用しており、 JavaFXPorts の使用を開始すると非常に役立ちます。アプリケーションの準備ができており、コンピューターと電話で使用できます。システムアンドロイドを搭載した電話でテストしました。アプリケーションは正常に動作していますが、私のサーバーでのみです。

さまざまな解像度に対応していますが、今のところは良いと思います。

ターンベースのマルチプレイヤー アプリケーションが必要ですが、 Google Play Serviceの使用にはまだ大きな問題があり ます。このサービスをターンベースのマルチプレイヤー アプリケーションに使用する方法を示すチュートリアルは、純粋な Android で記述され、Activity を使用します。私の質問はおそらく非常に単純ですが、「fxml」からアプリケーションビューを持っている場合、それをチュートリアルアクティビティとして使用するにはどうすればよいですか?

アプリケーションの自動マッチングを行いたいのですが、次にメソッド takeTurn() をアプリケーションに合わせてオーバーライドしたいと考えています。

たとえば、そのようなもの(以下のコード)をJavaFXのアプリケーションに変更するにはどうすればよいですか?

AndroidPlatformProvider.java に加えて、JavaFX (src/main/java フォルダー) クラスから Google サービスを使用する必要があり、すべてのメソッドはsrc/android/javaフォルダーにある必要があります。PlatformServicePlatformProviderを使用する必要があることはわかっています。例のように行いました: HelloPlatformおよびSMSTracker

インターフェイス PlatformProvider のメソッドを使用していますが、アプリケーションは依然としてクラッシュします。:(

私は JavaFX のコードからプロバイダーのみを使用しており、Android アクティビティはありません。Activity または View なしでこれらのメソッドを使用する方法がわかりません。

- public void onActivityResult(int リクエスト、int レスポンス、Intent データ)

- public void playTurn(View ビュー)

ビュー (fxml) のコントローラーから Google サービス メソッドからメソッドを呼び出すことはできますか。これらのメソッドが JavaFX でどのように機能するかわかりません。

public class TbmpGameActivity extends Activity {
...

@Override
public void onActivityResult(int request, int response, Intent data) {
    super.onActivityResult(request, response, data);
    ...

    if (request == RC_SELECT_PLAYERS) {
        if (response != Activity.RESULT_OK) {
            // user canceled
            return;
        }

        // Get the invitee list.
        final ArrayList<String> invitees =
                data.getStringArrayListExtra(Games.EXTRA_PLAYER_IDS);

        // Get auto-match criteria.
        Bundle autoMatchCriteria = null;
        int minAutoMatchPlayers = data.getIntExtra(
                Multiplayer.EXTRA_MIN_AUTOMATCH_PLAYERS, 0);
        int maxAutoMatchPlayers = data.getIntExtra(
                Multiplayer.EXTRA_MAX_AUTOMATCH_PLAYERS, 0);
        if (minAutoMatchPlayers > 0) {
            autoMatchCriteria = RoomConfig.createAutoMatchCriteria(
                    minAutoMatchPlayers, maxAutoMatchPlayers, 0);
        } else {
            autoMatchCriteria = null;
        }

        TurnBasedMatchConfig tbmc = TurnBasedMatchConfig.builder()
                .addInvitedPlayers(invitees)
                .setAutoMatchCriteria(autoMatchCriteria)
                .build();

        // Create and start the match.
        Games.TurnBasedMultiplayer
            .createMatch(mGoogleApiClient, tbmc)
            .setResultCallback(new MatchInitiatedCallback());
    }
}
}

またはそのようなもの:

// Call this method when a player has completed his turn and wants to
// go onto the next player, which may be himself.
public void playTurn(View view) {

    // Get the next participant in the game-defined way, possibly round-robin.
    String nextParticipantId = getNextParticipantId();

    // Get the updated state. In this example, we simply retrieve a
    // text string from the view. In your game, there may be more
    // complicated state.
    mTurnData = mDataView.getText().toString();

    // At this point, you might want to show a waiting dialog so that
    // the current player does not try to submit turn actions twice.
    showSpinner();

    // Invoke the next turn. We are converting our data to a byte array.
    Games.TurnBasedMultiplayer
    .takeTurn(mGoogleApiClient, mMatch.getMatchId(),
             mTurnData.getBytes(Charset.forName("UTF-16")),
             nextParticipantId)
    .setResultCallback(this);
}
4

1 に答える 1

0

jfxmobile プラグインの最新バージョン ( 1.0.3 ) には、Android への JavaFX 8 のポートを含む Dalvik SDK の最近の変更が含まれています。

クラスでは、インFXActivityテントの結果をリッスンするための非常に便利なメソッドが追加されました: setOnActivityResultHandler().

つまり、アプリに新しいアクティビティを追加するべきではなく、FXActivity. Intent を追加し、適切な結果ハンドラーを に設定する必要がありFXActivityます。

Gluon のサイトにあるこの最近の投稿をご覧ください。デバイスのカメラで写真を撮り、その結果を待ってアプリを再開する場合を例に、ネイティブ サービスにアクセスする方法を説明します。

基本的に、これはこの場合に必要なものです。

public void takePicture() {
    // create intent
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    ...

    // Add result handler 
    FXActivity.getInstance().setOnActivityResultHandler((requestCode, resultCode, data) -> {
        if (requestCode == TAKE_PICTURE && resultCode == RESULT_OK) {
            ...
        }
    });

    // launch activity
    FXActivity.getInstance().startActivityForResult(intent, TAKE_PICTURE);
}

アプリでこのアプローチを試してください。

于 2015-10-11T11:36:33.227 に答える