Android模拟自由落体运动
最近想看看android的游戏开发,因此首先绘图方面得练练,突然就想到模拟一下自由落体运动。本例采用serfaceView实现,接下来上代码:
一、首先定义一个自定义控件
public class MySurfaceView extends SurfaceView implements SurfaceHolder.Callback,Runnable{public static float g=198f;//模拟重力加速度private SurfaceHolder sfh;private Thread thread;private Canvas canvas;private Paint paint;private Date startTime;private int ScreenW, ScreenH;private Boolean tag=false;private float y=100;private float v=50f;public MySurfaceView(Context context) {super(context);thread=new Thread(this);sfh=this.getHolder();// callback接口:只要继承SurfaceView类并实现SurfaceHolder.Callback接口就可以实现一个自定义的SurfaceView了,// SurfaceHolder.Callback在底层的Surface状态发生变化的时候通知View.sfh.addCallback(this);paint = new Paint();paint.setAntiAlias(true);paint.setColor(Color.RED);this.setKeepScreenOn(true);// 保持屏幕常亮
// if(canvas != null) {
// RectF rectF = new RectF(0, 0, this.getWidth(), this.getHeight());
// canvas.drawRect(rectF,paint);
// sfh.unlockCanvasAndPost(canvas);
// }}//重力公式y=1/2gt^2 g=9.8 t是时间private void draw() {try {canvas = sfh.lockCanvas(); // 得到一个canvas实例canvas.drawColor(Color.WHITE);// 刷屏canvas.drawCircle(100,y,100,paint);Date nowTime=new Date(System.currentTimeMillis());//可以获取当前时间if(!tag){v=v+TimeUtil.shijiancha(nowTime,startTime)*g;y=y+v*TimeUtil.shijiancha(nowTime,startTime);}else{v=v-TimeUtil.shijiancha(nowTime,startTime)*g;y=y-v*TimeUtil.shijiancha(nowTime,startTime);}startTime=new Date(System.currentTimeMillis());//可以获取当前时间} catch (Exception ex) {} finally {if (canvas != null)sfh.unlockCanvasAndPost(canvas); // 将画好的画布提交}}@Overridepublic void startAnimation(Animation animation) {super.startAnimation(animation);}@Overridepublic void surfaceCreated(SurfaceHolder holder) {ScreenW = this.getWidth();ScreenH = this.getHeight();startTime=new Date(System.currentTimeMillis());//可以获取当前时间
// this.draw();thread.start();}@Overridepublic void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {}@Overridepublic void surfaceDestroyed(SurfaceHolder holder) {}@Overridepublic void run() {while (true) {draw();if(y>=ScreenH){tag=true;v=v-50;}if(v<=0){//是否改变运行轨迹要以速度大小为标准,我之前层判断y数值大小是不对的.tag=false;}Log.e("比较-------------", ScreenH+"-------"+y+tag);
// try {Thread.sleep(1);
// } catch (InterruptedException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }}}
}
二、接下来只需要在MainActivity中将布局加载进去即可。
public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);//隐去电池等图标和一切修饰部分(状态栏部分)this.requestWindowFeature(Window.FEATURE_NO_TITLE);setContentView(new MySurfaceView(this));}@Overrideprotected void onResume() {super.onResume();
// setContentView(new MySurfaceView(this));}
}
Android模拟自由落体运动相关推荐
- 模拟自由落体运动的小球
基于VS2019 EasyX插件 C/C++ 生成一个模拟自由落体运动的小球 #include <iostream> #include <graphics.h> #in ...
- OpenGL绘制球体模拟自由落体运动(基于Qt)
自由落体的物理公式想必大家都清楚(y=vt+0.5gt^2). 但是用程序如何模拟这个过程呢? 1.其中比较关键的是设定一个计时器,在一个视觉暂留时间段(dt=0.02s)内根据小球的位置坐标绘制小球 ...
- 自由落体java编程_java模拟自由落体运动源代码
简单做了一个 import java.awt.borderlayout; import java.awt.button; import java.awt.color; import java.awt. ...
- python自由落体_VPython - example - 模拟自由落体运动
作者:liuyuan_jq 2011-04-10 from visual import * scene.width = 400 scene.height = 300 scene.autoscale = ...
- 手把手教你用Python来模拟绘制自由落体运动过程中的抛物线(附源码)
前言 前几天有个叫[-berry]的粉丝在问了一道关于自由落体运动过程中产生的抛物线作图的问题,如下图所示. 当某个物体以初速度v水平抛出,其轨迹为一条抛物线,模拟绘制这条抛物线.用高中物理知识,我们 ...
- lammps案例:分子自由落体运动模拟
大家好,我是小马老师. 本文分享一个比较有意思的lammps案例:分子的自由落体运动. lammps提供了fix gravity命令可设置分子或者原子的加速度. 语法规则为: fix ID group ...
- matlab 地形模拟程序,MATLAB模拟小球自由落体运动
大部分朋友学习MATLAB,需要一个学习示例用来参考,有一个比较经典的题目就是如何利用Matlab模拟小球自由落体运动,这可能会是你的某次课后作业,这个程序的编写过程可以分为三个步骤: 第一部分,设置 ...
- matlab小球水平抛出,如何用Matlab制作小球自由落体运动的动画
第一堂课布置了一个Mission Impossible作业,要求学生们用Matlab制作一个动画,模拟小球的自由落体运动. 以下将整个任务的问题解决的过程分享如下: 步骤一,这是一个动画的制作过程,以 ...
- canvas动画:自由落体运动
经过前面的文章,我们已经能够在canvas画布上画出各种炫酷的图形和画面,但是这些画面都是禁止的,怎么样才能让他们动起来呢? 如何绘制基本图形可以参考:canvas基本图形绘制 如何对基本图形移动旋转 ...
最新文章
- 第六回严重鄙视360安全卫士
- 利用配置编辑器改变Ubuntu10按钮位置
- ExtJS Grid Column Number
- ruby scala python_解释一个基准在C,Clojure,Python,Ruby,Scala和其他
- Maven高级之插件开发
- ssis 包配置组织程序_如何停止失控的SSIS程序包
- Windows2008R2自动更新造成的意外重启
- 诡异的dp(凸多边形分割):catalan数
- jdk在线帮助文档地址
- 某种草电商App签名算法解析(一)
- VINS-MONO边缘化策略
- 前加加与后加加(自增)
- 峰值速率、系统容量、吞吐量、带宽之间的区别
- 去除idea中xml文件的黄色背景
- 小猿圈python金角大王_小猿圈python学习-基本数据类型
- easypoi导入图片_原生POI / EasyPOI 简单上手使用
- Mysql 导入3亿数据
- Tomcat中如何配置使用APR
- 老子兵法—柔情似水篇
- 计算机考试报名不了怎么办,2017年国家公务员考试报名系统繁忙怎么办?
热门文章
- <table> | HTML表格标签的定义与用法
- 星座图matlab是什么意思,如何理解Matlab星座图16QAM
- 求给定阶数图像形状数及其相应的近似多边形
- 月薪 2 万到 3 万的测试员一天是怎样度过的?
- 区块链难理解?这里有一篇初学者指南
- linux解压gz.gz文件,linux解压tar.gz并重命名_linux解压tar.gz文件
- 图像质量评价数据库TID2013连接
- 富士康计算机类笔试题,明天去富士康面试,还要笔试英语智力题?这个英语智力题,难不难,有没有从富士康面试完毕的大虾们,都是什么类型的题?(本人英语不好),比较着急,再次给回答人50分!...
- 概念模型、逻辑模型和物理模型的区别
- 如何把excel日期格式转换成文本日期格式