Estou estudando com um livro da casa do codigo e precisei de uma imagem como background e uma para o player e antes de colocar as imagens png rodava muito rapido mas quando coloquei essas duas imagens o jogo ficou muito lento, se for por causa do tamanho da imagem como saber qual o melhor tamanho para economizar memoria e ser compátivel com outros dispositivos de tamanhos diferentes.
aqui o codigo
[code]package br.com.casadocodigoi.mpossible;
import android.content.Context;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Paint.Style;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
public class Impossible extends SurfaceView implements Runnable {
boolean running = false;
Paint paint;
SurfaceHolder holder;
Thread renderThread = null;
int enemyRadius, enemyX, enemyY;
int playerY = 200, playerX = 200, playerRadius = 50, score;
double distance;
boolean gameover = false;
public Impossible(Context context) {
super(context);
paint = new Paint();
holder = getHolder();
}
@Override
public void run() {
while (running) {
// verifica se a tela está pronta
if (!holder.getSurface().isValid())
continue;
// Lock the Canvas
Canvas canvas = holder.lockCanvas();
// desenha o player
// canvas.drawColor(Color.BLACK);
canvas.drawBitmap(BitmapFactory.decodeResource(getResources(),
R.drawable.sky), 0, 0, null);
drawPlayer(canvas);
drawEnemy(canvas);
// verifica colisão
checkCollision();
if (gameover) {
drawButtons(canvas);
drawScore(canvas);
stopGame(canvas);
break;
}
// Placar
drawScore(canvas);
// Desenhar botoes
drawButtons(canvas);
// Atualiza e desbloqueia o canvas
holder.unlockCanvasAndPost(canvas);
}
}
public void drawPlayer(Canvas canvas) {
paint.setColor(Color.GREEN);
//canvas.drawCircle(playerX, playerY, playerRadius, paint);
canvas.drawBitmap(BitmapFactory.decodeResource(getResources(),
R.drawable.nave), playerX-50,playerY-50, null);
}
public void drawEnemy(Canvas canvas) {
paint.setColor(Color.RED);
enemyRadius++;
canvas.drawCircle(enemyX, enemyY, enemyRadius, paint);
}
public void moveDown() {
playerY += 10;
}
public void checkCollision() {
// verifica hipotenusa
distance = Math.pow(playerY - enemyY, 2)
+ Math.pow(playerX - enemyX, 2);
distance = Math.sqrt(distance);
if (distance <= enemyRadius + playerRadius) {
gameover = true;
}
}
public void resume() {
running = true;
renderThread = new Thread(this);
renderThread.start();
}
public void stopGame(Canvas canvas) {
paint.setStyle(Style.FILL);
paint.setColor(Color.YELLOW);
paint.setTextSize(60);
canvas.drawText("Perdeu PlayBoy!", 20, getHeight() / 2, paint);
holder.unlockCanvasAndPost(canvas);
}
public void drawScore(Canvas canvas) {
// placar
paint.setColor(Color.WHITE);
paint.setStyle(Style.FILL);
paint.setTextSize(50);
canvas.drawText(String.valueOf(score), getWidth() / 2, 75, paint);
}
public void addPoints(int points) {
score += points;
}
public void drawButtons(Canvas canvas) {
// Restart
paint.setColor(Color.WHITE);
paint.setStyle(Style.FILL);
paint.setTextSize(30);
canvas.drawText("Restart", 50, 200, paint);
// Exit
paint.setColor(Color.WHITE);
paint.setStyle(Style.FILL);
paint.setTextSize(30);
canvas.drawText("Extit", 50, 350, paint);
}
public void init() {
score = 0;
playerX = 200;
playerY = 200;
playerRadius = 50;
enemyX = 0;
enemyY = 0;
enemyRadius = 0;
gameover = false;
resume();
}
}[/code]
[code]package br.com.casadocodigoi.mpossible;
import android.app.Activity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.view.Window;
import android.view.WindowManager;
public class Game extends Activity implements OnTouchListener {
Impossible view;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Deixar full screem
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
view = new Impossible(this);
setContentView(view);
view.setOnTouchListener(this);
}
@Override
protected void onResume() {
super.onResume();
view.resume();
}
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getX()<150 && event.getY() >170 && event.getY()<200){
view.init();
}
else if (event.getX()<120 && event.getY() >330 && event.getY()<360){
System.exit(0);
}else{
view.moveDown();
view.addPoints(100);
}
return true;
}
}
[/code]