我有以下问题:我有课
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
声明。如何让这个 Overriding 方法看到 facebody?