【发布时间】:2012-07-11 17:32:04
【问题描述】:
我有以下问题: 我有课
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?
【问题讨论】:
-
应该是 Player.face 而不是 player.face 并且 face 需要是静态的。
-
face cannot be static-当我将其更改为 final static 时,它会大喊:无法从 BaseGameActivity 类型中对非静态方法 getVertexBufferObjectManager() 进行静态引用
-
在没有final的情况下尝试public static
-
嘿亚历克斯! face 不能是静态的-当我将其更改为 final static 时,它大喊:无法从类型 BaseGameActivity 对非静态方法 getVertexBufferObjectManager() 进行静态引用
标签: java android class andengine