如何处理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()进行静态引用我尝试了另一种方法-我拒绝了“类想法”,并一行接一行地进行了引用。但另一个问题是:(-我在我的主要问题帖子中写的。)