AutoJs学习-Canvas实现立方体动画
2023-09-14 09:04:17 时间
👉关于作者
众所周知,人生是一个漫长的流程,不断克服困难,不断反思前进的过程。在这个过程中会产生很多对于人生的质疑和思考,于是我决定将自己的思考,经验和故事全部分享出来,以此寻找共鸣 !!!
专注于Android/Unity和各种游戏开发技巧,以及各种资源分享(网站、工具、素材、源码、游戏等)
有什么需要欢迎私我,交流群让学习不再孤单。
本文约6千字,新手阅读需要8分钟,复习需要3分钟 【收藏随时查阅不再迷路】
👉实践过程
"ui";
ui.layout(
<vertical>
<canvas id="board" layout_weight="1"/>
</vertical>
);
//尺寸
const size = 100;
//原坐标
var cube = {
p1: [-1,-1, 1],
p2: [-1,-1,-1],
p3: [ 1,-1,-1],
p4: [ 1,-1, 1],
p5: [-1, 1, 1],
p6: [-1, 1,-1],
p7: [ 1, 1,-1],
p8: [ 1, 1, 1]
}
var cube2 = cube
var degree = {
x: 0,
y: 0,
z: 0
}
var o = [0, 0, 0]
var paint = new Paint();
ui.board.on("draw", function(canvas) {
//绘制背景色
canvas.drawColor(colors.BLACK);
//绘制分数
paint.setColor(colors.BLACK);
paint.setTextSize(50);
//canvas.drawText(degree.x);
toast(JSON.stringify(degree,null,4))
paint.setStrokeWidth(5);
var offset = {
x: 540,
y: 1000
};
//偏移坐标
canvas.translate(offset.x, offset.y);
//绘制围墙
cube2.p1 = rotate(cube.p1, o, degree)
cube2.p2 = rotate(cube.p2, o, degree)
cube2.p3 = rotate(cube.p3, o, degree)
cube2.p4 = rotate(cube.p4, o, degree)
cube2.p5 = rotate(cube.p5, o, degree)
cube2.p6 = rotate(cube.p6, o, degree)
cube2.p7 = rotate(cube.p7, o, degree)
cube2.p8 = rotate(cube.p8, o, degree)
//toast(JSON.stringify(cube.p1,null,4))
paint.setColor(colors.RED);
line(canvas, paint, cube2.p1, cube2.p2)
//paint.setColor(colors.GREEN);
line(canvas, paint, cube2.p2, cube2.p3)
//paint.setColor(colors.BLUE);
line(canvas, paint, cube2.p3, cube2.p4)
line(canvas, paint, cube2.p4, cube2.p1)
line(canvas, paint, cube2.p5, cube2.p6)
line(canvas, paint, cube2.p6, cube2.p7)
line(canvas, paint, cube2.p7, cube2.p8)
line(canvas, paint, cube2.p8, cube2.p5)
line(canvas, paint, cube2.p5, cube2.p1)
line(canvas, paint, cube2.p6, cube2.p2)
line(canvas, paint, cube2.p7, cube2.p3)
line(canvas, paint, cube2.p8, cube2.p4)
/*line(canvas, paint, cube2.p4, cube2.p1)
line(canvas, paint, cube2.p4, cube2.p2)
line(canvas, paint, cube2.p4, cube2.p3)*/
});
//重力感应监听
sensors.register("gyroscope", sensors.delay.game).on("change", (event, azimuth, pitch, roll) => {
degree.x = azimuth;
degree.y = pitch;
if (pitch < -90) {
a = -roll - 180
} else if (pitch > 90) {
a = -roll + 180
} else {
a = roll
}
degree.z = a
});
//连线
function line(canvas, paint, p1, p2) {
x1 = p1[0] * size
y1 = p1[1] * size
x2 = p2[0] * size
y2 = p2[1] * size
canvas.drawLine(x1, y1, x2, y2, paint);
}
//三轴矩阵旋转
function rotate(p1, p2, d) {
x = p1[0] - p2[0]
y = p1[1] - p2[1]
z = p1[2] - p2[2]
var ix = 0,
iy = 0,
iz = 0
iy = y * Math.cos(d.x * Math.PI / 180) - z * Math.sin (d.x * Math.PI / 180)
z = y * Math.sin(d.x * Math.PI / 180) + z * Math.cos(d.x * Math.PI / 180)
y = iy
ix = x * Math.cos(d.z * Math.PI / 180) - y * Math.sin(d.z * Math.PI / 180)
y = x * Math.sin(d.z * Math.PI / 180) + y * Math.cos(d.z * Math.PI / 180)
x = ix
ix = x * Math.cos(d.y * Math.PI / 180) - z * Math.sin(d.y * Math.PI / 180)
z = x * Math.sin(d.y * Math.PI / 180) + z * Math.cos(d.y * Math.PI / 180)
x = ix
return [x + p2[0], y + p2[1], z + p2[2]]
}
👉其他
📢作者:小空和小芝中的小空
📢转载说明-务必注明来源:https://zhima.blog.csdn.net/
📢这位道友请留步☁️,我观你气度不凡,谈吐间隐隐有王者霸气💚,日后定有一番大作为📝!!!旁边有点赞👍收藏🌟今日传你,点了吧,未来你成功☀️,我分文不取,若不成功⚡️,也好回来找我。
温馨提示:点击下方卡片获取更多意想不到的资源。
相关文章
- JS框架_(Progress.js)圆形动画进度条
- 高性能Web动画和渲染原理系列(4)“Compositor-Pipeline演讲PPT”学习摘要【华为云技术分享】
- IOS学习资源收集--关于动画的代码学习资源总汇(很棒的动画效果哦)
- AngularJS学习--- 动画操作 (Applying Animations) ngAnimate step 12
- 动画 -- 点击按钮
- 【IOS-COCOS2D游戏开发之十八】解决滚屏背景/拼接地图有黑边(缝隙)/图片缩放后模糊透明/图片不清晰【2013年12月13日补充】/动画播放出现毛边以及禁止游戏中自动锁屏问题!
- 360度不停旋转动画demo效果示例(整理)
- 【Android笔记25】Android中的动画效果之逐帧动画
- 丢掉Excel,手把手教你用Python做可视化数据,还能任意调节动画丝滑度
- Android 11.0 12.0SystemUI 仿华为充电动画
- 高性能Web动画和渲染原理系列(4)“Compositor-Pipeline演讲PPT”学习摘要【华为云技术分享】
- CSS3与页面布局学习总结(六)——CSS3新特性(阴影、动画、渐变、变形、伪元素等)
- 深入浅出matplotlib(40):动画显示与MP4视频输出三
- pygame学习笔记(2)——从画点到动画
- Taro React组件使用(1) —— Overlay 遮罩层【渐入渐出动画遮罩层】