package com.bg;
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.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.Paint.Style;
import android.util.Log;
import android.view.KeyEvent;
import android.view.MotionEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.SurfaceHolder.Callback;
public class MySurfaceView extends SurfaceView implements Callback, Runnable, ContactListener {
private Thread th;
private SurfaceHolder sfh;
private Canvas canvas;
private Paint paint;
private boolean flag;
// ----添加一个物理世界---->>
private final float RATE = 30;// 屏幕到现实世界的比例 30px:1m;
private World world;// 声明一个物理世界对象
private AABB aabb;// 声明一个物理世界的范围对象
private Vec2 gravity;// 声明一个重力向量对象
private float timeStep = 1f / 60f;// 物理世界模拟的的频率
private int iterations = 10;// 迭代值,迭代越大模拟越精确,但性能越低
// 声明小球的Body,便于后续对小球进行操作
private Body bodyBall;
//声明胜利与失败的body,用于判定游戏的胜负
private Body lostBody1, lostBody2, winBody;
// 声明屏幕宽高
private int screenW, screenH;
// 声明游戏状态
private final int GAMESTATE_MENU = 0;
private final int GAMESTATE_HELP = 1;
private final int GAMESTATE_GAMEING = 2;
private int gameState = GAMESTATE_MENU;
// 为了游戏暂停时,失败,胜利能继续可能到游戏中的状态,所以并没有将其写成一个状态
private boolean gameIsPause, gameIsLost, gameIsWin;
// Body图片资源
private Bitmap bmpH, bmpS, bmpSh, bmpSs, bmpBall;
// 菜单、按钮、游戏背景图片资源
private Bitmap 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;
public MySurfaceView(Context context) {
super(context);
this.setKeepScreenOn(true);
sfh = this.getHolder();
sfh.addCallback(this);
paint = new Paint();
paint.setAntiAlias(true);
paint.setStyle(Style.STROKE);
this.setFocusable(true);
this.setFocusableInTouchMode(true);
// --添加一个物理世界--->>
aabb = new AABB();
gravity = new Vec2(0, 10);
aabb.lowerBound.set(-100, -100);
aabb.upperBound.set(100, 100);
world = new World(aabb, gravity, true);
// ---实例化Body图片资源
bmpH = BitmapFactory.decodeResource(getResources(), R.drawable.h);
bmpS = BitmapFactory.decodeResource(getResources(), R.drawable.s);
bmpSh = BitmapFactory.decodeResource(getResources(), R.drawable.sh);
bmpSs = BitmapFactory.decodeResource(getResources(), R.drawable.ss);
bmpBall = BitmapFactory.decodeResource(getResources(), R.drawable.ball);
// 实例菜单、按钮、游戏背景图片资源
bmpMenu_help = BitmapFactory.decodeResource(getResources(), R.drawable.menu_help);
bmpMenu_play = BitmapFactory.decodeResource(getResources(), R.drawable.menu_play);
bmpMenu_exit = BitmapFactory.decodeResource(getResources(), R.drawable.menu_exit);
bmpMenu_resume = BitmapFactory.decodeResource(getResources(), R.drawable.menu_resume);
bmpMenu_replay = BitmapFactory.decodeResource(getResources(), R.drawable.menu_replay);
bmp_menubg = BitmapFactory.decodeResource(getResources(), R.drawable.menu_bg);
bmp_gamebg = BitmapFactory.decodeResource(getResources(), R.drawable.game_bg);
bmpMenuBack = BitmapFactory.decodeResource(getResources(), R.drawable.menu_back);
bmp_smallbg = BitmapFactory.decodeResource(getResources(), R.drawable.smallbg);
bmpMenu_menu = BitmapFactory.decodeResource(getResources(), R.drawable.menu_menu);
bmp_helpbg = BitmapFactory.decodeResource(getResources(), R.drawable.helpbg);
bmpBody_lost = BitmapFactory.decodeResource(getResources(), R.drawable.lostbody);
bmpBody_win = BitmapFactory.decodeResource(getResources(), R.drawable.winbody);
bmpWinbg = BitmapFactory.decodeResource(getResources(), R.drawable.gamewin);
bmpLostbg = BitmapFactory.decodeResource(getResources(), R.drawable.gamelost);
}
//SurfaceView创建
public void surfaceCreated(SurfaceHolder holder) {
//防止Home按键导致游戏重置
if (gameState == GAMESTATE_MENU) {
screenW = this.getWidth();
screenH = this.getHeight();
// 实例化按钮
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);
// 创建主角小球
bodyBall = createCircle(bmpBall, bmpH.getHeight(), bmpH.getHeight(), bmpBall.getWidth() / 2, 5);
//创建胜负Body
lostBody1 = createCircle(bmpBody_lost, screenW - bmpH.getHeight() - bmpBody_lost.getWidth(), bmpH.getHeight(), bmpBody_lost.getWidth() / 2, 0);
lostBody2 = createCircle(bmpBody_lost, bmpH.getHeight(), screenH - bmpH.getHeight() - bmpBody_lost.getHeight(), bmpBody_lost.getWidth() / 2, 0);
winBody = createCircle(bmpBody_win, screenW - bmpH.getHeight() - bmpBody_win.getWidth(), screenH - bmpH.getHeight() - bmpBody_win.getHeight(),
bmpBody_win.getWidth() / 2, 0);
//设置传感器,发生碰撞,但无碰撞效果
lostBody1.getShapeList().m_isSensor = true;
lostBody2.getShapeList().m_isSensor = true;
winBody.getShapeList().m_isSensor = true;
// 创建边界
createRect(bmpH, 0, 0, bmpH.getWidth(), bmpH.getHeight(), 0);// 上
createRect(bmpH, 0, getHeight() - bmpH.getHeight(), bmpH.getWidth(), bmpH.getHeight(), 0);// 下
createRect(bmpS, 0, 0, bmpS.getWidth(), bmpS.getHeight(), 0);// 左
createRect(bmpS, getWidth() - bmpS.getWidth(), 0, bmpS.getWidth(), bmpS.getHeight(), 0);// 右
// -----创建障碍物
createRect(bmpSh, 0, 90, bmpSh.getWidth(), bmpSh.getHeight(), 0);
createRect(bmpSh, 110, 170, bmpSh.getWidth(), bmpSh.getHeight(), 0);
createRect(bmpSs, 110, 170, bmpSs.getWidth(), bmpSs.getHeight(), 0);
createRect(bmpSs, getWidth() - 102, screenH - bmpSs.getHeight(), bmpSs.getWidth(), bmpSs.getHeight(), 0);
//绑定监听器
world.setContactListener(this);
}
flag = true;
th = new Thread(this);
th.start();
}
//在物理世界中添加矩形Body
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
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.setMas
没有合适的资源?快使用搜索试试~ 我知道了~
Android开发入门60个小案例+源代码
共1645个文件
class:497个
png:257个
java:205个
5星 · 超过95%的资源 需积分: 46 7.1k 下载量 176 浏览量
2013-08-24
06:41:38
上传
评论 263
收藏 18.79MB RAR 举报
温馨提示
适合初学者,大量简单小例子,完整源代码。
资源推荐
资源详情
资源评论
收起资源包目录
Android开发入门60个小案例+源代码 (1645个子文件)
resources.ap_ 1.29MB
resources.ap_ 664KB
resources.ap_ 640KB
resources.ap_ 270KB
resources.ap_ 142KB
resources.ap_ 100KB
resources.ap_ 51KB
resources.ap_ 31KB
resources.ap_ 23KB
resources.ap_ 21KB
resources.ap_ 19KB
resources.ap_ 19KB
resources.ap_ 15KB
resources.ap_ 13KB
resources.ap_ 12KB
resources.ap_ 11KB
resources.ap_ 11KB
resources.ap_ 11KB
resources.ap_ 11KB
resources.ap_ 11KB
resources.ap_ 11KB
resources.ap_ 11KB
resources.ap_ 11KB
resources.ap_ 11KB
resources.ap_ 11KB
resources.ap_ 11KB
resources.ap_ 11KB
resources.ap_ 11KB
resources.ap_ 11KB
resources.ap_ 11KB
resources.ap_ 10KB
resources.ap_ 10KB
resources.ap_ 10KB
resources.ap_ 10KB
resources.ap_ 10KB
resources.ap_ 10KB
resources.ap_ 10KB
resources.ap_ 10KB
resources.ap_ 10KB
resources.ap_ 10KB
resources.ap_ 10KB
resources.ap_ 10KB
resources.ap_ 10KB
resources.ap_ 10KB
resources.ap_ 10KB
resources.ap_ 10KB
resources.ap_ 10KB
resources.ap_ 10KB
resources.ap_ 10KB
resources.ap_ 10KB
resources.ap_ 10KB
resources.ap_ 10KB
resources.ap_ 10KB
resources.ap_ 10KB
resources.ap_ 10KB
resources.ap_ 10KB
resources.ap_ 10KB
resources.ap_ 10KB
resources.ap_ 10KB
resources.ap_ 10KB
resources.ap_ 10KB
resources.ap_ 10KB
resources.ap_ 10KB
resources.ap_ 10KB
MediaPlayerProject.apk 1.29MB
BallGame.apk 751KB
MainActivity.apk 749KB
PlaneGame.apk 652KB
TabProject.apk 274KB
MainActivity.apk 226KB
BuildHouse.apk 226KB
ClipCanvasProject.apk 104KB
TraverseMyBody.apk 100KB
CreateMouseJoint.apk 92KB
CreatePulleyJoint.apk 92KB
CreateGearJoint.apk 92KB
CreatePrismaticJoint.apk 92KB
AabbGetBodies.apk 92KB
CreateDistanceJoint.apk 92KB
CreatePrismaticJoint.apk 92KB
CreateRevoluteJoint.apk 92KB
CreateMyPolygon.apk 92KB
BodyCollision.apk 92KB
BodyForce.apk 92KB
CreateCircle.apk 92KB
TraverseBody.apk 92KB
CreatePolygon.apk 91KB
Box2dWorld.apk 91KB
FrameMovie.apk 56KB
SoundPoolProject.apk 35KB
PlayerProject.apk 28KB
ClipBitmapMovie.apk 25KB
ImageButtonProject.apk 23KB
MainActivity.apk 21KB
BitmapMovie.apk 20KB
NinePatchProject.apk 18KB
StreamProject.apk 16KB
SensorProject.apk 16KB
ListViewProject_2.apk 16KB
MoreRectCollision.apk 16KB
共 1645 条
- 1
- 2
- 3
- 4
- 5
- 6
- 17
tempthf
- 粉丝: 23
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- scr ubuntu上传
- STM32单片机FPGA毕设电路原理论文报告液晶显示模块与8031单片机的接口电路及编程
- STM32单片机FPGA毕设电路原理论文报告液晶航向指示器接口电路设计
- Pytorch深度学习入门与实战2024
- STM32单片机FPGA毕设电路原理论文报告野战救护车手术台稳定液压系统及其自动控制
- STM32单片机FPGA毕设电路原理论文报告压延机卷取调速装置改造
- STM32单片机FPGA毕设电路原理论文报告形状记忆合金驱动的微电脑密码锁的设计
- HTML小游戏27 - Chuck Chicken 魔法蛋网页游戏源码
- 不同酒度质量分数数据表
- STM32单片机FPGA毕设电路原理论文报告新一代单片机实验教学系统研究与开发
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
- 3
- 4
- 5
- 6
前往页