D5-Android绘图之让图形动起来

mac2022-06-30  187

以前在Html利用js控制SVG或canvas进行运动模拟。浏览器自带window.requestAnimationFrame能不断执行渲染 在这使用我的LogicCanvas中的NumGo进行不断渲染工作,用法详见: 绘图部分基于我的LogicCanvas绘图库:基础使用在此, 喜欢的话可以到项目的github上看看,顺便给个star 如果此篇看起来有些困难,可以先看一下其他D系列文章,尤其是:D4-Android绘图之和我一起画箭头 本篇将介绍:反弹、自由落体、平抛、斜抛的物理场景模拟


一、反弹

效果.gif
1.构造函数初始化时:核心就是:位移=时间*速度
//创建一个水平速度向量对象,并赋值水平速度为100px/s,竖直速度50px/s mVA = v2(100, -50); //创建一个位移向量对象 mSA = v2(0, 0); mRunNum = new NumGo(false, 0, 100000).setOnUpdate(new NumGo.OnUpdate() { @Override public void onUpdate(float rate) { long frameTime = System.currentTimeMillis(); float detaT = frameTime - lastFrameTime;//时间变化量 Pos detaS = mVA.dotC(detaT / 500);//位移增量=速度*时间变化量 Pos detaSB = mVB.dotC(detaT / 500);//位移增量=速度*时间变化量 mSA = mSA.add(detaS);//位移总量 = 位移增量和 mSB = mSB.add(detaSB);//位移总量 = 位移增量和 //区域限定 if (mSA.x > 200 || mSA.x < -200) { mVA = mVA.refX();//x反弹 mAColor = ColUtils.randomRGB();//随机色 } if (mSA.y > 200 || mSA.y < -200) { mVA = mVA.refY();//Y反弹 mAColor = ColUtils.randomRGB(); } invalidate(); lastFrameTime = frameTime;//时刻更新 } });
2.成员变量:
Pos coo = v2(500, 600); private NumGo mRunNum; private long lastFrameTime; private Pos mVA; private Pos mSA; private Shape mFA; private int mBColor = Color.RED; private int mAColor = Color.BLUE;
2.抬起的事件:启动mRunNum
lastFrameTime = System.currentTimeMillis(); mRunNum.go();
3.绘制的方法:OnDraw中:
Painter painter = PainterEnum.INSTANCE.getInstance(canvas); mFA = sa.deepClone().r(20).ang(360).fs(mAColor).p(mSA).coo(coo);//绘制小球 //绘制矩形区域 Shape fr = new ShapeRect().x(440).y(440).r(1).fs(0x66B8F8F0).coo(coo).p(-220, -220); painter.draw(fr, mFA);

二、自由落体:

自由落体.gif
加入加速度向量,初速度设为0:
mG = v2(0, -10); mV = v2(0, 0);
处理位移时将加速度叠加到速度上
Pos detaV = mG.dotC(detaT);//速度变化量 mV = mV.add(detaV);//速度增量和

三、平抛运动:

平抛运动.gif
增加水平初速度
mV = v2(3000, 0);

四、斜抛运动:

斜抛运动.gif mV = v2(3000, -5000);//倾斜初速度

后记、

1.声明:

[1]本文由张风捷特烈原创,转载请注明 [2]欢迎广大编程爱好者共同交流 [3]个人能力有限,如有不正之处欢迎大家批评指证,必定虚心改正 [4]你的喜欢与支持将是我最大的动力

2.连接传送门:

更多安卓技术欢迎访问:安卓技术栈 我的github地址:欢迎star 简书首发,腾讯云+社区同步更新 张风捷特烈个人网站,编程笔记请访问:http://www.toly1994.com

3.联系我

QQ:1981462002 邮箱:1981462002@qq.com 微信:zdl1994328

4.欢迎关注我的微信公众号,最新精彩文章,及时送达:
公众号.jpg

转载于:https://www.cnblogs.com/toly-top/p/9781897.html

相关资源:JAVA上百实例源码以及开源项目
最新回复(0)