2012-01-25 2 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

Вам не нужно передавать их обратно в OnCreate (на самом деле не возможно, во всяком случае), вы должны просто нужно установить скорость мяча снова в конце 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. Я двигал мячом мяч снаружи, теперь он отлично работает. –

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. –