とてもシンプルなゲームを作ろうとしています。ユーザーは、指で動かしたバスケットを使ってリンゴを捕まえようとしなければなりません。すべてうまくいっているようですが、問題があります。アプリの背景を描きたいのです。ただし、背景として画像を使用すると、アプリが非常に遅くなり、多くの遅延が発生します。白背景を使えば問題ありません。
誰かが私が間違っていることを教えてもらえますか?
アプリが更新されるたびに背景を描いているからだと思いますが、これを変更する方法がわかりません。
私のコードは少し混乱しているかもしれません。私はまだ学んでいます。
助けてくれてありがとう!
package com.cris9696.mela;
import java.util.Random;
import com.cris9696.mela.R;
import android.os.Bundle;
import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Rect;
import android.graphics.Typeface;
import android.graphics.Paint.Align;
import android.view.MotionEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.view.View.OnTouchListener;
public class Game extends Activity implements OnTouchListener {
ClasseCanvas View;
float xApple, yApple, xBasket, yBasket;
Bitmap Apple, Basket, BackG;
Random rnd = new Random();
int win = 0, score = 0, level = 1;
int record = 0;
Typeface Font;
Paint TextP = new Paint();
Rect dest;
Paint paint;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Font = Typeface.createFromAsset(getAssets(), "TF2.ttf");
View = new ClasseCanvas(this);
View.setOnTouchListener(this);
TextP.setColor(Color.RED);
TextP.setTextSize(50);
TextP.setTypeface(Font);
xApple = yApple = xBasket = yBasket = 0;
xApple = rnd.nextInt(600);
Apple = BitmapFactory.decodeResource(getResources(), R.drawable.apple);
BackG = BitmapFactory
.decodeResource(getResources(), R.drawable.bg);
Basket = BitmapFactory.decodeResource(getResources(),
R.drawable.basket);
setContentView(View);
}
// /////////////////////////////////////////////////////////////////////////////
@Override
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
xBasket = event.getX();
yBasket = event.getY();
/*
* switch (event.getAction()) { // ci dice cosa succede
*
* case MotionEvent.ACTION_DOWN:
*
* case MotionEvent.ACTION_UP:
*
* break; }
*/
return true;
}
// ///////////////////////////////////////////////////////////////////////////
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
View.pause();
}
// /////////////////////////////////////////////////////////////////////////////
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
View.resume();
}
// ///////////////////////////////////////////////////////////
public class ClasseCanvas extends SurfaceView implements Runnable {
SurfaceHolder Holder;
Thread thread = null;
boolean isRunning = true;
public ClasseCanvas(Context context) {
super(context);
Holder = getHolder();
// TODO Auto-generated constructor stub
}
@Override
public void run() {
// TODO Auto-generated method stub
while (isRunning) {
if (!Holder.getSurface().isValid())
continue;
Canvas canvas = Holder.lockCanvas();
dest = new Rect(0, 0, getWidth(), getHeight());
paint = new Paint();
paint.setFilterBitmap(true);
canvas.drawBitmap(BackG, null, dest, paint);
TextP.setColor(Color.RED);
canvas.drawText(Integer.toString(score), 56, 56, TextP);
TextP.setColor(Color.BLACK);
canvas.drawText("Level " + Integer.toString(level), 115,
56, TextP);
if (xBasket != 0 && yBasket != 0) {
canvas.drawBitmap(Basket, xBasket - Basket.getWidth() / 2,
yBasket - Basket.getHeight() / 2, null);
}
canvas.drawBitmap(Apple, xApple, yApple, null);
if (yApple < canvas.getHeight())
if (score >= 0)
yApple += 5 * level;
else
yApple += 5;
else {
yApple = 0;
score--;
xApple = rnd.nextInt(canvas.getWidth() - Apple.getWidth());
}
if (score > record)
record = score;
if (score == 10) {
level++;
score = 0;
}
if ((xApple >= xBasket - (Basket.getWidth() / 2)
&& xApple + (Apple.getWidth()) <= xBasket
+ (Basket.getWidth() / 2) && yApple >= yBasket && yApple <= yBasket
+ Basket.getHeight())
|| (xApple >= xBasket - (Basket.getWidth() / 2)
&& xApple <= xBasket + (Basket.getWidth() / 2)
&& yApple >= yBasket && yApple <= yBasket
+ Basket.getHeight())
|| (xApple + (Apple.getWidth()) >= xBasket
- (Basket.getWidth() / 2)
&& xApple + (Apple.getWidth()) <= xBasket
+ (Basket.getWidth() / 2)
&& yApple >= yBasket && yApple <= yBasket
+ Basket.getHeight())) {
win = 1;
xApple = rnd.nextInt(canvas.getWidth());
yApple = 0;
score++;
}
Holder.unlockCanvasAndPost(canvas);
}
}
public void pause() {
isRunning = false;
while (true) {
try {
thread.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
break;
}
thread = null;
// TODO Auto-generated method stub
}
public void resume() {
// TODO Auto-generated method stub
isRunning = true;
thread = new Thread(this);
thread.start();
}
}
}