0

我正在尝试创建一个小型 BrickBreaker 游戏。

到目前为止,我有一个 MainActivity.java、BrickBreakerView.java 和一个 Paddle.java。BrickBreakerView 扩展了 ViewGroup 类,而 Paddle 扩展了 View 类。我希望能够向 BrickBreakerView 添加一个 Paddle、Bricks、Ball 和一个记分板(我将创建的自定义视图类)。本质上,BrickBreakerView 将控制这些视图的交互。

MainActivity 的 xml 布局将 BrickBreakerView 添加到布局中。BrickBreakerView 在 onCreate 方法中实例化了一个 Paddle,它还将 paddle 添加为子视图 (addView())。

我已经覆盖了 Paddle 的 onDraw 方法来绘制一个给定 X 和 Y 位置的蓝色矩形。但是,当我运行我的程序时,我在屏幕上看不到任何东西。我已经使用 Log.d 进行了测试,以检查是否调用了 BrickBreakerView 和 Paddle 的构造函数。

谢谢你的帮助!另外,我是 Android 开发的新手,如果你们能就我的游戏结构给我一些意见,我将不胜感激:D!

以下是相关的代码片段。

这在我的主要活动中被调用:

 setContentView(R.layout.main);

我的 main.xml 看起来像:.BrickBreakerView

    android:id="@+id/mainView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    />

BrickBreakerView.java 类:

 public class BrickBreakerView extends ViewGroup{

public BrickBreakerView(Context context, AttributeSet attrs) {
    super(context, attrs);
    setBackgroundColor(Color.GRAY);
    Paddle paddle = new Paddle(context, 100, 400);
    paddle.setYPosition(400);
    addView(paddle);
    Log.d("print", "Brick Breaker View constructor");
}

@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
    // TODO Auto-generated method stub
    Log.d("print", "onLayout called");
}

}

Paddle.java 类:

 public class Paddle extends View{

private int myX, myY;

public Paddle(Context context, int xPos, int yPos) {
    super(context);
    // TODO Auto-generated constructor stub
    Log.d("print", "paddle constructor");
    myX = xPos;
    myY = yPos;
    invalidate();
}
public void setXPosition(int x) {
    myX = x;
    invalidate();
}
public void setYPosition(int y) {
    myY = y;
    invalidate();
}
@Override
protected void onDraw(Canvas canvas) {
    // TODO Auto-generated method stub

    Log.d("print", "onDraw called");
    super.onDraw(canvas);
    Paint paint = new Paint();
    paint.setColor(Color.BLUE);
    canvas.drawRect(myX, myY, myX+100, myY+50, paint);
}

}

4

1 回答 1

0

使桨实例成为砖块破坏者视图的成员变量。创建并将其添加到视图组 - 您正在执行此操作。在onLayout中,放入paddle.layout(0,0,100,100)

于 2012-07-31T07:01:52.087 回答