80,493
社区成员
发帖
与我相关
我的任务
分享package com.sky.game;
import android.app.Activity;
import android.content.pm.ActivityInfo;
import android.os.Bundle;
import android.view.Window;
import android.view.WindowManager;
public class MainActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 设置全屏
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
// 去除应用程序标题
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
// 设置竖屏
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
//显示自定义MySurfaceView实例
setContentView(new MySurfaceView(this));
}
//添加一个程序退出方法
public void exit() {
//退出应用程序
System.exit(0);
}
}//**
*
*/
package com.sky.game;
import org.jbox2d.collision.AABB;
import org.jbox2d.collision.CircleDef;
import org.jbox2d.collision.PolygonDef;
import org.jbox2d.common.Vec2;
import org.jbox2d.dynamics.Body;
import org.jbox2d.dynamics.BodyDef;
import org.jbox2d.dynamics.ContactListener;
import org.jbox2d.dynamics.World;
import org.jbox2d.dynamics.contacts.ContactPoint;
import org.jbox2d.dynamics.contacts.ContactResult;
import android.R.bool;
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.util.Log;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.SurfaceHolder.Callback;
/**
* @author sky
*
*/
public class MySurfaceView extends SurfaceView implements Runnable, Callback ,ContactListener{
//游戏状态
private final int GANESTATE_MENU=0;
private final int GANESTATE_HELP=1;
private final int GANESTATE_GAMEING=2;
private int gameState=GANESTATE_MENU;
private Canvas canvas;
private Paint paint;
private SurfaceHolder sfh;
private Thread th;
private boolean flag;
private int screenW,screenH;
// 菜单、按钮、游戏背景图片资源
private Bitmap bmpIcon,bmpMenu_help, bmpMenu_play, bmpMenu_exit, bmpMenu_resume,
bmpMenu_replay, bmp_menubg, bmp_gamebg, bmpMenuBack, bmp_smallbg,
bmpMenu_menu, bmp_helpbg, bmpBody_lost, bmpBody_win, bmpWinbg,
bmpLostbg;
// 创建按钮
private HButton hbHelp, hbPlay, hbExit, hbResume, hbReplay, hbBack, hbMenu;
// Body图片资源
private Bitmap bmpH, bmpS, bmpSh, bmpSs, bmpBall;
// ----添加一个物理世界---->>
private World world;
private AABB aabb;
private Vec2 gravity;
private float timeStep=1f/60f;
private int iterations=10;
private final float RATE=30;
public MySurfaceView(Context context) {
super(context);
sfh=this.getHolder();
sfh.addCallback(this);
paint=new Paint();
paint.setColor(Color.WHITE);
setFocusable(true);
setFocusableInTouchMode(true);
this.setKeepScreenOn(true);
// --添加一个物理世界--->>
aabb=new AABB();
gravity=new Vec2(0,100);
aabb.lowerBound.set(-100,100);
aabb.upperBound.set(100,100);
world=new World(aabb, gravity, true);
// ---实例化Body图片资源
bmpS=BitmapFactory.decodeResource(getResources(), R.drawable.s);
bmpH=BitmapFactory.decodeResource(getResources(), R.drawable.h);
bmpSh=BitmapFactory.decodeResource(getResources(), R.drawable.sh);
bmpSs=BitmapFactory.decodeResource(getResources(), R.drawable.ss);
bmpBall=BitmapFactory.decodeResource(getResources(), R.drawable.ball);
// 实例菜单、按钮、游戏背景图片资源
bmpIcon=BitmapFactory.decodeResource(getResources(), R.drawable.icon);
bmp_gamebg=BitmapFactory.decodeResource(getResources(), R.drawable.game_bg);
bmp_helpbg=BitmapFactory.decodeResource(getResources(), R.drawable.helpbg);
bmp_menubg=BitmapFactory.decodeResource(getResources(), R.drawable.menu_bg);
bmp_smallbg=BitmapFactory.decodeResource(getResources(), R.drawable.smallbg);
bmpBody_lost=BitmapFactory.decodeResource(getResources(), R.drawable.lostbody);
bmpBody_win=BitmapFactory.decodeResource(getResources(), R.drawable.winbody);
bmpLostbg=BitmapFactory.decodeResource(getResources(), R.drawable.gamelost);
bmpMenu_exit=BitmapFactory.decodeResource(getResources(), R.drawable.menu_exit);
bmpMenu_help=BitmapFactory.decodeResource(getResources(), R.drawable.menu_help);
bmpMenu_menu=BitmapFactory.decodeResource(getResources(), R.drawable.menu_help);
bmpMenu_play=BitmapFactory.decodeResource(getResources(), R.drawable.menu_play);
bmpMenu_replay=BitmapFactory.decodeResource(getResources(), R.drawable.menu_replay);
bmpMenu_resume=BitmapFactory.decodeResource(getResources(), R.drawable.menu_resume);
bmpMenuBack=BitmapFactory.decodeResource(getResources(), R.drawable.menu_back);
bmpWinbg=BitmapFactory.decodeResource(getResources(), R.drawable.gamewin);
// TODO Auto-generated constructor stub
}
/* (non-Javadoc)
* @see android.view.SurfaceHolder.Callback#surfaceChanged(android.view.SurfaceHolder, int, int, int)
*/
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
// TODO Auto-generated method stub
}
/* (non-Javadoc)
* @see android.view.SurfaceHolder.Callback#surfaceCreated(android.view.SurfaceHolder)
*/
@Override
//SurfaceView创建
public void surfaceCreated(SurfaceHolder holder) {
if (gameState==GANESTATE_MENU) {
screenH=this.getHeight();
screenW=this.getWidth();
hbPlay = new HButton(bmpMenu_play, screenW / 2 - bmpMenu_help.getWidth() / 2, 150);
hbHelp = new HButton(bmpMenu_help, hbPlay.getX(), hbPlay.getY() + 50);
hbExit = new HButton(bmpMenu_exit, hbPlay.getX(), hbHelp.getY() + 50);
hbBack = new HButton(bmpMenuBack, 0, screenH - bmpMenu_help.getHeight());
hbResume = new HButton(bmpMenu_resume, screenW / 2 - bmpMenu_help.getWidth() / 2, 200);
hbReplay = new HButton(bmpMenu_replay, hbResume.getX(), hbResume.getY() + 50);
hbMenu = new HButton(bmpMenu_menu, hbResume.getX(), hbReplay.getY() + 50);
world.setContactListener(this);
}
flag=true;
th=new Thread(this);
th.start();
}
/* (non-Javadoc)
* @see android.view.SurfaceHolder.Callback#surfaceDestroyed(android.view.SurfaceHolder)
*/
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
// TODO Auto-generated method stub
flag=false;
}
/* (non-Javadoc)
* @see java.lang.Runnable#run()
*/
@Override
public void run() {
while (flag) {
//long start=System.currentTimeMillis();
MyDraw();
Lgoic();
//long end=System.currentTimeMillis();
try {
Thread.sleep((long) timeStep * 1000);
} catch (Exception e) {
Log.e("Mihi", "Thread is Error!");
}
}
}
private void Lgoic() {
switch (gameState) {
case GANESTATE_MENU:
break;
case GANESTATE_HELP:
break;
case GANESTATE_GAMEING:
break;
}
}
private void MyDraw() {
canvas=sfh.lockCanvas();
canvas.drawColor(Color.BLACK);
try {
switch (gameState) {
case GANESTATE_MENU:
canvas.drawBitmap(bmp_menubg, 0,0, paint);
hbPlay.draw(canvas, paint);
hbHelp.draw(canvas, paint);
hbExit.draw(canvas, paint);
break;
case GANESTATE_HELP:
break;
case GANESTATE_GAMEING:
break;
}
} catch (Exception e) {
Log.e("Mihi", "Thread is Error!");
}finally{
if (canvas!=null) {
sfh.unlockCanvasAndPost(canvas);
}
}
}
/**
* 在物理世界中添加矩形Body
* @param bmp
* @param x
* @param y
* @param w
* @param h
* @param density
* @return
*/
public Body createRect(Bitmap bmp,float x,float y,float w,float h,float density) {
PolygonDef pd=new PolygonDef();
pd.density=density;
pd.friction=0.8f;
pd.restitution=0.3f;
pd.setAsBox(w/2/RATE, h/2/RATE);
BodyDef bd=new BodyDef();
bd.position.set((x+w/2)/RATE, (y+h/2)/RATE);
Body body = world.createBody(bd);
body.m_userData=new MyRect(bmp, x, y);
body.createShape(pd);
body.setMassFromShapes();
return body;
}
/**
* 在物理世界中添加圆形Body
* @param bmp
* @param x
* @param y
* @param r
* @param density
* @return
*/
public Body createCircle(Bitmap bmp,float x,float y,float r,float density) {
CircleDef cd=new CircleDef();
cd.density=density;
cd.friction=0.8f;
cd.restitution=0.3f;
cd.radius=r/RATE;
BodyDef bd=new BodyDef();
bd.position.set((x+r)/RATE, (y+r)/RATE);
Body body=world.createBody(bd);
body.m_userData=new MyCircle(bmp, x, y, r);
body.createShape(cd);
body.setMassFromShapes();
//放置小球进入休眠,导致改变重力方向,小球无法移动
body.allowSleeping(false);
return body;
}
@Override
public void add(ContactPoint point) {
// TODO Auto-generated method stub
}
@Override
public void persist(ContactPoint point) {
// TODO Auto-generated method stub
}
@Override
public void remove(ContactPoint point) {
// TODO Auto-generated method stub
}
@Override
public void result(ContactResult point) {
// TODO Auto-generated method stub
}
}