2012-01-25 7 views
0

私は基本的に画面上に跳ねるボールを表示するアプリを書いています。私はその値を変更したときボールの速度を増加させるSeekBarを追加したいと思います。 Ballクラスでxとyの速度を取得および設定する関数を作成しました。Android:SeekBarを使ってボールの速度を変更

package perseus.gfx.test; 
import everything; 
public class GfxActivity extends Activity implements OnSeekBarChangeListener { 

ViewGroup.LayoutParams vg = new ViewGroup.LayoutParams(-1, -1); 
double velx, vely; 
double x, y; 
double finx, finy; 
SeekBar velo; 
TextView tv; 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState);      
    Ball ball = new Ball(this); 
    setContentView(R.layout.main); 
    addContentView(ball, vg);   
    tv = (TextView)findViewById(R.id.test); 
    velo = (SeekBar)findViewById(R.id.vel); 
    velo.setOnSeekBarChangeListener(this); 


    x = ball.getSpeedX(); 
    y = ball.getSpeedY(); 
    ball.setSpeedX(finx); 
    ball.setSpeedY(finy); 
} 
@Override 
public void onProgressChanged(SeekBar arg0, int arg1, boolean arg2) {  


    finx = x + arg1; 
    finy = y +arg1; 
} 
@Override 
public void onStartTrackingTouch(SeekBar arg0) { 
    //nothing 
} 
@Override 
public void onStopTrackingTouch(SeekBar arg0) { 
    //nothing 
} 
} 

問題は、FIN1とFIN2の唯一のローカル値が影響を受けており、そのボールが全く動かない(と思う)、です。 fin1とfin2の値をonCreate()に戻すにはどうすればよいですか?

答えて

0

あなたは、あなただけのonProgresschangedの終わり()

@Override 
public void onProgressChanged(SeekBar arg0, int arg1, boolean arg2) {  

    finx = x + arg1; 
    finy = y +arg1; 

    ball.setSpeedX(finx); 
    ball.setSpeedY(finy); 
} 
+0

おかげで再びボールの速度を設定する必要がある必要があります(いずれにせよ、実際には可能ではない)のonCreateに戻ってそれらを渡す必要はありません私は間違いを認識し、私はonCreateでボールをインスタンス化しました。私はボールボールを外に動かしました、今はうまくいきます。 –

0
@Override 
public void onProgressChanged(SeekBar arg0, int arg1, boolean arg2) {  

    finx = x + arg1; 
    finy = y +arg1; 

    ball.setSpeedX(finx); 
    ball.setSpeedY(finy); 
    ball.invalidate(); 
} 
+0

ありがとう、私は私の間違いを認識した、私はonCreate内のボールをインスタンス化していた、外に移動し、今すぐ動作します。 ball.invalidate()は必要ありません私はBallクラスに入れました。 –

関連する問題