Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/194.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何处理java在其自身声明中调用对象?_Java_Android_Class_Andengine - Fatal编程技术网

如何处理java在其自身声明中调用对象?

如何处理java在其自身声明中调用对象?,java,android,class,andengine,Java,Android,Class,Andengine,我有以下问题: 我有课 public class HockeyActivity extends SimpleBaseGameActivity implements IOnSceneTouchListener, IOnAreaTouchListener { 在这个类声明中: final Player player= new Player( PhysicsFactory.createCircleBody( this.mPhysicsWorld, player.face, BodyType.Dy

我有以下问题: 我有课

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

现在是冰球活动类中玩家类的声明:

 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;
}

}
    final VertexBufferObjectManager vertexBufferObjectManager = this.getVertexBufferObjectManager();
如何处理而不改变最后的事情? 另外,我不能静态执行,因为
getVertexBufferObjectManager()
是在HockeyActivity类中声明的:

 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;
}

}
    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");

但是当重写方法时,问题在
最终精灵面
中,因为它看不到
面体
声明。如何使此重写方法看到facebody?

您的代码中有错误。
您希望实例化属性“player”,但使用/传递属性本身作为参数之一。
这是做不到的(至少在java中是这样)

如果“脸”是一个常数,你能做的是:

  • 将面声明为公共静态属性
  • 在实例化中,使用对Player.FACE的静态引用
像这样:

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

否则,不是在实例化时传递带有参数的player.face,初始化播放器对象后,尝试使用setter。它应该是player.face而不是player.face,并且face需要是静态的。face不能是静态的-当我将其更改为final static时,它会大叫:不能对非静态方法getVertexBufferObjectManager()进行静态引用从类型BaseGameActivitytry public static不带finalhey Alex!face不能是静态的-当我将其更改为final static时,它会大叫:无法从类型BaseGameActivity中对非静态方法getVertexBufferObjectManager()进行静态引用我尝试了另一种方法-我拒绝了“类想法”,并一行接一行地进行了引用。但另一个问题是:(-我在我的主要问题帖子中写的。)