package com.ipanel.view;
import com.ipanel.R;
import com.ipanel.game.LayerManager;
import com.ipanel.game.Sprite;
import com.ipanel.tank.TankSprite;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.BitmapFactory.Options;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.drawable.BitmapDrawable;
import android.view.KeyEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceHolder.Callback;
import android.view.SurfaceView;
public class GameView extends SurfaceView implements Callback {
GameThread gameThread;
TankSprite tank, enemy;
Sprite bo;
LayerManager layerManager;
public GameView(Context context) {
super(context);
// TODO Auto-generated constructor stub
SurfaceHolder holder = getHolder();
holder.addCallback(this);
layerManager = new LayerManager();
Resources resources = context.getResources();
Bitmap tankpic = BitmapFactory.decodeResource(resources,
R.drawable.tank);
// tankpic = Bitmap.createScaledBitmap(tankpic, 128, 128, true);
tank = new TankSprite(layerManager,tankpic, 16, 16, TankSprite.TANK_SILVER_SMALL);
tank.setPosition(100, 100);
enemy = new TankSprite(layerManager,tankpic, 16, 16, TankSprite.TANK_RED_SMALL);
enemy.setPosition(100, 150);
Bitmap bopic = BitmapFactory.decodeResource(resources, R.drawable.bo);
bo = new Sprite(bopic, 32, 32);
layerManager.append(tank);
layerManager.append(enemy);
gameThread = new GameThread(holder);
}
public TankSprite getEnemy(){
return enemy;
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_DPAD_LEFT) {
tank.turnLeft();
return (true);
}
if (keyCode == KeyEvent.KEYCODE_DPAD_RIGHT) {
tank.turnRight();
return (true);
}
if (keyCode == KeyEvent.KEYCODE_DPAD_UP) {
tank.turnUp();
return (true);
}
if (keyCode == KeyEvent.KEYCODE_DPAD_DOWN) {
tank.turnDown();
return (true);
}
if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER){
tank.shut();
return (true);
}
return super.onKeyDown(keyCode, event);
}
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_DPAD_LEFT) {
tank.stop();
return (true);
}
if (keyCode == KeyEvent.KEYCODE_DPAD_RIGHT) {
tank.stop();
return (true);
}
if (keyCode == KeyEvent.KEYCODE_DPAD_UP) {
tank.stop();
return (true);
}
if (keyCode == KeyEvent.KEYCODE_DPAD_DOWN) {
tank.stop();
return (true);
}
return super.onKeyUp(keyCode, event);
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
// TODO Auto-generated method stub
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
// TODO Auto-generated method stub
gameThread.start();
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
// TODO Auto-generated method stub
gameThread.stopThread();
}
class GameThread extends Thread {
SurfaceHolder holder;
boolean run = true;
GameThread(SurfaceHolder holder) {
this.holder = holder;
}
public void run() {
run = true;
int i = 0;
while (run) {
Canvas c = null;
try {
synchronized (holder) {
c = holder.lockCanvas();
c.drawARGB(255, 0, 0, 0);
Paint mPaint = new Paint();
mPaint.setColor(Color.RED);
// c.drawText("" + i++, 100, 100, mPaint);
layerManager.paint(c, 0, 0);
// tank.paint(c);
// enemy.move();
// enemy.paint(c);
// bo.setPosition(100, 100);
// bo.paint(c);
// bo.nextFrame();
sleep(200);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (c != null)
holder.unlockCanvasAndPost(c);
}
}
}
public void stopThread() {
run = false;
}
}
}
|