-1

次の問題があります:クラスがあります

public class HockeyActivity extends SimpleBaseGameActivity implements IOnSceneTouchListener, IOnAreaTouchListener {

そして、このクラス宣言内:

final Player player= new Player( PhysicsFactory.createCircleBody(   this.mPhysicsWorld, player.face, BodyType.DynamicBody,CIRCLE_FIXTURE_DEF));

ここでJavaは見つからなかったと叫ぶplayer.face

そして、HockeyActivity クラス内の Player クラスの宣言:

 class Player {
    final Body facebody;

final Sprite face = new Sprite(HockeyActivity.CAMERA_WIDTH / 2 + 200f,
    240, HockeyActivity.mFaceTextureRegion,
    getVertexBufferObjectManager()) {
    @Override
    public boolean onAreaTouched(final TouchEvent pSceneTouchEvent,
        final float pTouchAreaLocalX, final float pTouchAreaLocalY) {

    switch (pSceneTouchEvent.getAction()) {
    case TouchEvent.ACTION_MOVE:
        // Here 'body' refers to the Body object associated with
        // this sprite
        facebody.setTransform(pSceneTouchEvent.getX(),
            pSceneTouchEvent.getY(), facebody.getAngle());
        break;
    default:
        break;
    }
    return true;
    }
};

Player(Body f) {
    facebody = f;
}

}

最終的なものを変更せずに対処する方法は? getVertexBufferObjectManager()また、 HockeyActivity クラスで宣言されているため、静的にすることはできません。

    final VertexBufferObjectManager vertexBufferObjectManager = this.getVertexBufferObjectManager();

問題に対処する私の別の方法:

final Sprite  face = new Sprite(CAMERA_WIDTH/2+200f, 240, this.mFaceTextureRegion, this.getVertexBufferObjectManager()) {
                        @Override
                        public boolean onAreaTouched(final TouchEvent pSceneTouchEvent, final float pTouchAreaLocalX, final float pTouchAreaLocalY) {

                                switch(pSceneTouchEvent.getAction()){
                                    case TouchEvent.ACTION_MOVE:
                                        //Here 'body' refers to the Body object associated with this sprite
                                       facebody.setTransform(pSceneTouchEvent.getX(),     pSceneTouchEvent.getY(),                facebody.getAngle());
                                        break;
                                    default:
                                        break;
                                }
                                return true;    

}       

// 数行後:

final Body facebody = PhysicsFactory.createCircleBody(  this.mPhysicsWorld, face, BodyType.KinematicBody,CIRCLE_FIXTURE_DEF);
        this.mPhysicsWorld.registerPhysicsConnector(new PhysicsConnector(face,facebody, true, true));
        facebody.setUserData("player1");

しかし、メソッドをオーバーライドすると、宣言final Sprite faceが表示されないため、問題は内部にあります。facebodyこのオーバーライド メソッドに facebody を表示させるにはどうすればよいですか?

4

1 に答える 1

0

コードに何かが正しくありません。
属性「プレーヤー」をインスタンス化する必要がありますが、属性自体をパラメーターの1つとして使用/渡します。
これはできません (少なくとも Java では)。

「顔」が定数の場合、できることは次のとおりです。

  • FACE を public static 属性として宣言する
  • インスタンス化では、Player.FACE への静的参照を使用します。

このような:

final Player player = new Player( PhysicsFactory.createCircleBody(   this.mPhysicsWorld, Player.FACE, BodyType.DynamicBody,CIRCLE_FIXTURE_DEF));

それ以外の場合は、インスタンス化時に player.face をパラメーターとともに渡す代わりに、プレーヤー オブジェクトの初期化後に setter を使用してみてください。

于 2012-07-11T17:52:27.277 に答える