0

次のようなクラスがあります。

public class Element extends Activity
{
public float mX;
    public float mY;
 public void animate(long elapsedTime) 
    {
        mX += mSpeedX * (elapsedTime / 20f);
        mY += mSpeedY * (elapsedTime / 20f);
        setmX(mX);
        setmY(mY);
        checkBorders();
    }
public void setmX(float mX) 
{
Log.i("this.mX","mY at setmX read is :"+this.mX );      **//Line 1**
        this.mX = mX;
    }
public float getmX() {
        Log.i("mX","mX in getmX read is :"+mX );    **//Line 2**
        return mX;
    }

    public void setmY(float mY) {

        this.mY = mY;
        Log.i("this.mY","mY at setmY read is :"+this.mY );  **//Line 3**
    }

    public float getmY() {
        Log.i("mY","mY in getY read is :"+mY );    **//Line 4**

        return mY;
    }
}

私は別のクラスを持っています

public class Panel extends SurfaceView implements SurfaceHolder.Callback
{
int x = 100;
    int y = 0;
public float xval;
    public float yval; 
@Override
    public boolean onTouchEvent(MotionEvent event) 
    {
        Element element = new Element();
        float x = event.getX();
        float y = event.getY();
        Log.i("x","x in panel is :"+x);
        //toast tos = new toast();

        xval = element.getmX();
        Log.i("xval","xval in playactivity obtained is :"+xval );   **//Line 5**
        yval = element.getmY();
        Log.i("yval","yval in playactivity obtained is :"+xval );    **//Line 6**
return super.onTouchEvent(event);
}

行 2、4、5、および 6 は、値がゼロとして表示されています。私はしたくない。以下はlogcatの画像です。 ここに画像の説明を入力

アクセス指定子を間違えていませんか?

4

2 に答える 2

1

とを知らずに何が起こっているのかを知るのは難しいmSpeedXですmSpeedYelapsedTime計算を行う前に、変数とmSpeedX/Y変数の両方をfloatにキャストしてみてください。浮動小数点演算はJavaではかなり厄介です。また、animateメソッドが実際に呼び出されていることを確認してください。

最後に、これを取り上げるべきではないかもしれませんが、それは私を殺します。あなたは本当に、本当にあなたのコードの一貫性とスタイルに取り組むべきです。命名規則、改行/同じ行中括弧の規則、およびインデントの習慣はいたるところにあります。プログラミングスタイルに一貫性がない場合、コードの可読性と保守性は劇的に低下します。

もう1つ、変数に値を割り当てた後、setterメソッドを呼び出す必要はありません。set/getメソッドがアクセスしているのとまったく同じ変数の値をすでに設定しています。幸運を!

于 2012-09-29T00:54:57.377 に答える
1
  • 別のクラスにActivityクラス(クラスElementクラス内)のオブジェクトを作成しないでください。アプリケーションの基礎を確認してください
  • Elementクラス内にクラスのオブジェクトを作成していますがPanel、値を設定するためにsetterメソッドsetmX()およびsetmY()を呼び出したことはありません。デフォルト値を返すgetterメソッドを直接呼び出しています。
于 2012-09-29T00:55:02.950 に答える