0

surfaceview を使用して開発しているゲームがあります。

これには、surfaceview が採用する通常の方法があります。

onDraw(){

Drawing here

 }

updateGame(){

Update logic here

}

run() {

while (isRunning){

onDraw()
updateGame()
}

}

現時点では、スプラッシュ画面、オプション画面、およびゲーム自体があります。それぞれが別個のアクティビティです (したがって、独自のクラスがあります)。

しかし、それぞれが 1 つのクラス (ゲームでさえも) に詰め込まれており、何が起こっているのかを理解するのが難しくなっています。

私のオプション画面では、ユーザーができることがいくつかあり (ヘルプ ボタンや設定ボタンをクリックするなど)、別のクラスを起動する方法がわかりませんが、同じアクティビティ内にとどまります。

つまり、現在のクラスで設定したキャンバスを使用して、別のクラスで描画したいと考えています。これは可能ですか?これを行うことに関する情報が見つかりません。

Java クラスの概念は理解していますが、それらを自分の状況に適用する方法がわかりません。

それとも、私がやっていることを実行して、「セクション」ごとに新しいアクティビティを作成する方が良いでしょうか?

4

3 に答える 3

2

フラグメントの使用: http://developer.android.com/guide/components/fragments.html

これにより、Activity をより小さく入れ子にできるピースの束に変えることができます。フラグメントは画面の一部を表し、アクティビティのように独自の動作を制御できます。それらは Honeycomm に追加されましたが、Google は以前のバージョンのサポート パッケージを提供しています。Googleは、私が知る限り、それらを標準的な慣行にしようとしています.

于 2013-02-26T14:53:26.617 に答える
0

こんにちは、ゲームエンジンが必要だと思います。または、次のようなサンプルを開発できます

class Screen {
    public void onShow();
    public void onHide();
    public void onUpdate();
    public void onDraw(Canvas canvas);
}

class Engine {
    Screen mScreen;

    public void setScreen(Screen s) {
        mScreen = s;
    }

    ...
}

ちなみにLibgdxは良い選択です http://code.google.com/p/libgdx/

于 2013-02-26T15:05:53.873 に答える
0

クラスを使わずにゲームを作るのは難しいです。

アクティビティのビューを更新するコードを保持するには、連絡する必要があります。ただし、「updateGame ()」内のコードは別のクラスで完全に抽象化する必要があります。このクラスをビジネス クラス (Controller) と呼びます。彼女はゲームの進行を管理する

次に、バックアップする情報がある場合は、別のクラスを使用してデータにアクセスする必要があります (データ アクセス層/モデル)。

これを読むことをお勧めします: http://www.leepoint.net/notes-java/GUI/structure/40mvc.html

アニメーションやビデオが多い場合は、http: //www.andengine.org/ のようなフレームワークを使用する必要があります。

新しいアクティビティを使用したメニュー設定の例とゲーム管理の例:

    public class MainActivity extends Activity {

    private static final int CODE_MENU_SETTING = 5;
    private int mTimeGame;
    private Thread mGameThread;
    private boolean isCurrentGame, isPause;
    private Button mStartGameButton;

    private ClassBusinessGame mBusiness;

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //start button if you want to start the game with a button
        mStartGameButton = (Button) findViewById(/*id button start game*/);
        isCurrentGame = false;
        isPause = false;
        //mTimeGame counts the number of seconds of game
        mTimeGame = 0;
        //the class that controls the game
        mBusiness = new ClassBusinessGame(...); 
        //example thread timer
        mGameThread = new Thread("game thread") {
            public void run() {
                while(isCurrentGame) {
                    //here, your code to update your game, view
                    mTimeGame++;
                    try {
                        Thread.sleep(1000); //pause 1 sec
                    } catch(InterruptedException e) {}
                    while(isPause) {/*load*/} //this is not a good practice to break; loop while paused
                }
            }
        };
    }

    public boolean onCreateOptionsMenu(Menu menu) {
        // here, directly call the Menu Setting Activity
        // attention: here, stop the thread which manage your game
        isPause = true;
        Intent menuIntent = new Intent(this, MenuSettingActivity.class);
        startActivityForResult(menuIntent, CODE_MENU_SETTING); //startActivityForResult to resume game
        return true;
    }

    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if(requestCode==CODE_MENU_SETTING) {
            //resume game
            isCurrentGame = false;
        }
    }
}

これは基本的な例であり、多くの改善が可能ですが、それは (フレームワークのないゲームの) アイデアです。

于 2013-02-26T14:46:23.333 に答える