0

Android向けの最初のゲームをやっています。

背景とその中に「スポーン」するボールを持つという非常に単純なことをしたいと思います。

だから私は私のGameViewを作った:

package com.example.newarkanoid;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.view.MotionEvent;
import android.view.View;

public class Tela extends View {
    Paint paint;
    int x,y;
    int lastx,lasty;
    Bola bola;

    public Tela(Context context, Bola BOLA) {
        super(context);
        paint = new Paint();
        x=0;lastx=0;
        y=0;lasty=0;
        bola = BOLA;
        bola.paint.setColor(Color.BLACK);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        paint.setColor(Color.WHITE);
        canvas.drawPaint(paint);
        bola.invalidate();
    }

    public boolean onTouchEvent(MotionEvent event) {
        x = (int)event.getX();
        y = (int)event.getY();
        if(lastx !=x || lasty !=y){
            lastx=x;
            lasty=y;
            bola.x = x;
            bola.y = y;
            bola.invalidate();
        }
    return false;
    }

}

さて、上記は私の MainDisplay です。今度はボールが必要です。

package com.example.newarkanoid;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.view.View;

public class Bola extends View {
    Paint paint;
    float x,y,raio;

    public Bola(Context context, float x, float y, float raio) {
        super(context);
        this.x = x;
        this.y = y;
        this.raio = raio;
        paint = new Paint();
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        paint.setStyle(Paint.Style.FILL);
        canvas.drawCircle(x, y, raio, paint);
    }

}

それで、先生が私に言ったので、私はそれが好きでした。メインディスプレイ全体に対して無効化を呼び出す必要はなく、ボールだけに対して無効化を呼び出すことができるので、ボール描画コードとそのプロパティを作成しました。

コードでわかるように、タッチスクリーンのどこかをクリックすると、ボール x と y がクリック位置に変わり、invalidate が呼び出されます。

問題は、メインディスプレイを作成してもボールが表示されないので、コンテキストの問題のようなものがあるのではないかと思っていました。なぜ私のボールが描かれていないのですか?

また、ここに私の MainActivity があります:

 @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Bola bola = new Bola(this,20,20,5);
        Tela t = new Tela(this,bola);

        setContentView(t);
    }
4

2 に答える 2

0
@Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    paint.setColor(Color.WHITE);
    canvas.drawPaint(paint);
    bola.invalidate();
}

bolaが無効になると、bolaはTelaのキャンバスとは異なるキャンバスで描画します。drawメソッドを使用して、ビューを拡張するのではなく、クラスを作成できます

public void draw(Canvas canvas) {
    paint.setStyle(Paint.Style.FILL);
    canvas.drawCircle(x, y, raio, paint);
}

テラに電話してください:

@Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    paint.setColor(Color.WHITE);
    canvas.drawPaint(paint);
    bola.draw(canvas);
}
于 2012-11-01T03:26:06.060 に答える
0

bola.draw(canvas); を使用します。あなたの onDraw() で

于 2012-11-01T03:57:34.680 に答える