我做了一个简单的球和onTouchListener游戏。然而,游戏运行速度非常慢,因为它每隔50毫秒绘制一次屏幕-.-所以我试图使用AsyncTask但我不知道如何实际绘制它。 如果有人能解释写什么或写正确的代码,我将不胜感激。
这里是完整的代码:
公共类MainActivity扩展ActionBarActivity实现了View.OnTouchListener {
OurView v;
Bitmap ball;
float x,y;
Bitmap a;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
v = new OurView(this);
ball = BitmapFactory.decodeResource(getResources(),R.drawable.blueball);
v.setOnTouchListener(this);
x= getWindowManager().getDefaultDisplay().getWidth() / 2;
y = getWindowManager().getDefaultDisplay().getHeight()/2;
setContentView(v);
}
@Override
protected void onPause() {
super.onPause();
v.pause();
}
@Override
protected void onResume() {
super.onResume();
v.resume();
}
@Override
public boolean onTouch(View v, MotionEvent event) {
return false;
}
public class OurView extends SurfaceView implements Runnable {
Thread tr = null;
boolean isItOk = false;
SurfaceHolder holder;
public OurView(Context context) {
super(context);
holder = getHolder();
}
@Override
public void run() {
while(isItOk)
{
if(!holder.getSurface().isValid()){
continue;
}
Canvas c = holder.lockCanvas();
c.drawARGB(255,5,5,10);
c.drawBitmap(ball,x-(ball.getWidth()/2),y-ball.getHeight()/2,null);
holder.unlockCanvasAndPost(c);
}
}
public void pause(){
isItOk = false;
while(true){
try{
tr.join();
}catch (InterruptedException e){
e.printStackTrace();
}
break;
}
tr = null;
}
public void resume(){
isItOk = true;
tr = new Thread(this);
tr.start();
}
}
}
public class Hey extends AsyncTask <Void, Void, Void> implements View.OnTouchListener
{
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected Void doInBackground(Void... params) {
return null;
}
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
}
@Override
public boolean onTouch(View v, MotionEvent event) {
try {
Thread.sleep(50);
}
catch (InterruptedException e) {
e.printStackTrace();
}
switch(event.getAction()){
case MotionEvent.ACTION_DOWN:
ball.x= event.getX();
ball.y = event.getY();
break;
case MotionEvent.ACTION_UP:
ball.x = event.getX();
ball.y = event.getY();
break;
case MotionEvent.ACTION_MOVE:
ball.x = event.getX();
ball.y = event.getY();
break;
}
return true;
}
答案 0 :(得分:0)