0

[これにはAS3+Javaの知識が必要な場合があることに注意してください]

背景情報:

Java + Pulpcoreを使用してゲームを作成しようとしていますが、このシーンはかなり新しいです。私が構築しているゲームは、おそらく私が思っていたよりもパフォーマンスを重視する可能性があり、Javaがこれに関する問題を解決することはわかっていますが、厳密なタイプなどを扱ういくつかの質問があります。

AS3の私のコードは次のとおりです。

Main.as3

import org.tbmb.champions.Container;
import org.tbmb.zombies.ZContainer;

public class Main extends MovieClip {

    // ******* temporary properties ******* /
    private var blunder:Container = null;
    // *******                      ******* /

    public function Main() {

        init(); // initialize objects

    }

    public function init():void {

        blunder = new Container(Blunder as Class);

    } // end of class

}

Container.as3

 package org.tbmb.champions {

     import flash.display.MovieClip;

     public class Container extends MovieClip {

          public function Container(champ:*) {

          } // end of constructor

     } // end of class

 } // end of package

Blunder.as3

package org.tbmb.champions.blunder {

    import flash.display.MovieClip;

    public class Blunder extends MovieClip {

        public function Blunder() {

        } // end of constructor

    } // end of class

} // end of constructor

1.)Javaでどのように書き直しますか?

blunder = new Container(Blunder as Class);

2.)Containerクラス内の上記の行に対してJavaのクラスを受け入れるにはどうすればよいですか?

public function Container(champ:*) {

他のすべてのクラス(ヘルスなど)を保持する包含クラスに(ユーザーが選択したものに応じて)異なるチャンピオンクラスを送信するため、これを行う必要があります。1つだけではなく、任意のクラスを受け入れるには、Containerクラスが必要です。どのタイプを使用しますか?

これが私がこれまでにJavaで持っているものです:

ZomboPulp.java(メインクラス)

import pulpcore.scene.Scene2D;

import org.tnpfk.champions.Container;
import org.tnpfk.champions.blunder.Blunder;

import pulpcore.sprite.FilledSprite;
import pulpcore.image.Colors;

public class ZomboPulp extends Scene2D {

    FilledSprite background = new FilledSprite(Colors.WHITE);

    Container container = null; // Container that contain's blunder, 
    // and all his objects (health, mana, etc)

    public void load() {

        this.initScreen(); // initialize main screen.
        this.initObjects(); // initialize our objects.

    } // end of load();

    public void initScreen() {

        add(background);

    } // end of initScreen();

    public void initObjects() {

        container = new Container(Blunder as Class); // ERROR HERE

    } // end of initObjects();

}

Container.java

package org.tnpfk.champions;

public class Container {

    public Container(Object champ) {

    } // end of constructor

} // end of class

長い投稿をお詫び申し上げます。ご協力いただきありがとうございます。ちなみに、StackOverflowをチェックしました。とグーグル、しかし私はこれについて何も見つけることができませんでした。

ありがとう、jvmpulp

4

1 に答える 1

1

よし!私は PulpCore の経験はありませんが、AS3 と Java の両方を知っているので、あなたの質問に答えることができると思います。まず、Container クラスの champ オブジェクトで何をする必要があるかを 100% 理解していないと思いますBlunder as Class。また、単に Blunder のインスタンスを渡す代わりに、なぜそれを行っていたのか本当に理解できません。いずれにせよ、これが私が今持っているものでお勧めするものです:

public void initObjects() {

    container = new Container(Blunder.class);

}

classご覧のとおり、任意のクラスのプロパティを取得するだけで Class インスタンスを取得できます。Objectこれで、任意の型の Container コンストラクターの型として使用する正しいアイデアが得られました。ただし、使用Objectは悪い習慣です (代わりにメソッドのオーバーロード/より具体的な型を使用します)。ここでは必須ではありません。プロパティの取得は、異なるクラスを表している場合でも、class常に typeになります。Classしたがって、コンストラクターを次のように書き換えます。

public Container(Class champ) {

}

次に、クラスで必要なことをすべて行います。

さて、これは基本的に直接移植ですが、あなたが行っていることのいくつかは悪い習慣のようです. オブジェクトを渡すシステム全体Classは無関係で不必要に思えます。オブジェクトのインスタンスを渡さないのはなぜですか? たとえば、次のようにします。

public class Container {

    protected Champion champ;

    public Container(Champion champ) {

        this.champ = champ;

    }

}

次に、Championすべてのチャンピオンに共通のメソッドを含む抽象クラスを作成します。

public abstract class Champion {

    protected Something something;

    abstract Something getSomething();

}

(明らかに、ここに示されている変数/メソッドは単なる例です。) 次に、個々の Champion クラスをサブクラス化しChampionます。

public class Blunder extends Champion {

    public Something getSomething() {
        return this.something;
    }

}

その後、最後に、これを行います。

public void initObjects() {

    container = new Container(new Blunder());

}

明らかに、これは基本的な例であり、私のアドバイスに従う必要はありません。しかし、おそらく AS3 で既に使用していたシステムよりも簡単に実行できます。

于 2011-08-10T07:07:44.743 に答える