问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何用AS3应用让一图片沿抛物线轨迹运动,求代码及其思路

发布网友 发布时间:2022-04-20 11:16

我来回答

2个回答

懂视网 时间:2022-04-20 15:37

本文主要介绍了浅谈关于h5中图片抛物线运动的一些心得,详细的介绍了沿贝塞尔曲线运动的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能帮助到大家。

常见的, 物体/图片做抛物线或者更准确的说是沿贝塞尔曲线运动是H5开发中常见的需求, 那么如何快速的根据设计稿计算出运动路径是开发者首要解决的问题.

我这边H5开发常用的设计稿尺寸是640 * 1008, 那么根据这个尺寸解决方案思路如下:

1, 首先将PS中要位移的元素单独导出一张png, 如果设计稿中已经规划好了运动路线的话也需要将该路线导出为png;

2, 在AI中新建一个和设计稿尺寸一样的文件,再将位移元素分两次拖入该文件中, 如果有运动路线的话也拖入进去,如下所示:

这里需要注意的是位移图片的摆放位置, 路径的起点和终点应该对应着图片的移动点.对应的情况有如下几种:

  1. canvas中不做变形处理, 那么移动点就是图片的左上角

  2. canvas中, 图片做了translate移动, 因根据translate(x1, y1)中的x1, y1去加上drawImage(image, sx, sy, sWidth, sHeight, dx, dy, dWidth, dHeight)中dx和dy的最终偏移.

  3. 如果元素通过position:absolute定位, 并通过transform中translate3d(x, y, z)来控制位置的话,偏移量应该是x, y. 通常的, transform中我们有可能模仿 left, top和额外的margin来控制元素的位置, 在transform中额外的添加一个translate3D(marginLeftX, marginLeftY, 0). 也需要把这个margin的值考虑进去.

3, 在AI中通过ctrl + r键拉出参考线, 在元素图片的移动拉出其x, y的位置, 如下图所示:

然后选择钢笔工具, 先后在起点和终点处点击, 在点击终点后鼠标不要松开, 直接拖动AI会自动添加2个控制点. 通过移动鼠标可以调整两个控制点的位置, 从而达到调整钢笔工具所生成的路径的目的, 直到和设计稿上的参考线路径一致.如下所示:

拖到想要的位置后, 松开鼠标, 键盘回车确定路径, 如果所勾勒的路径不合心意还可以继续拖动控制点以作调整.

4, 在调整完毕后, 额外的拖动两条参考线到控制点1的位置, 然后通过 菜单栏 -- 窗口 -- 信息, 打开信息面板, 分别将起点, 控制点, 终点, 3个点的坐标取出来.

5, 分别计算控制点, 终点和起点的像素差, 根据H5中要位移的图片的真实x, y的坐标值和像素差做计算得出真实的控制点, 终点坐标. 再将这三个坐标点应用于公式中即可.


代码如下:


var path = getBezierPath([278 + 119, 572 - 32], [ 278 - 4, 572 - 137] , [278 + 119, 572 - 32] , [278, 572], 50);

其中, 参数分别是getBezierPath(终点, 控制点1, 控制点2, 起点, 运动次数), 如果没有控制点2, 直接讲终点的坐标填进去即可._getBezierPath最终公式如下:


function getBezierPath(p1, p2, p3, p4, times) {
 function Point2D(x,y){ 
 this.x = x || 0.0; 
 this.y = y ||0.0; 
 } 
 
 function PointOnCubicBezier( cp, t ) { 
 var ax, bx, cx; 
 var ay, by, cy; 
 var tSquared, tCubed; 
 var result = new Point2D ; 
 cx = 3.0 * (cp[1].x - cp[0].x); 
 bx = 3.0 * (cp[2].x - cp[1].x) - cx; 
 ax = cp[3].x - cp[0].x - cx - bx; 
 cy = 3.0 * (cp[1].y - cp[0].y); 
 by = 3.0 * (cp[2].y - cp[1].y) - cy; 
 ay = cp[3].y - cp[0].y - cy - by; 
 tSquared = t * t; 
 tCubed = tSquared * t; 
 result.x = (ax * tCubed) + (bx * tSquared) + (cx * t) + cp[0].x; 
 result.y = (ay * tCubed) + (by * tSquared) + (cy * t) + cp[0].y; 
 return result; 
 } 
 function ComputeBezier( cp, numberOfPoints, curve ){ 
 var dt; 
 var i; 
 dt = 1.0 / ( numberOfPoints - 1 ); 
  for( i = 0; i < numberOfPoints; i++) 
  curve[i] = PointOnCubicBezier( cp, i*dt ); 
 } 
 
 var cp=[ 
 new Point2D(parseInt(p4[0]), parseInt(p4[1])), new Point2D(p2[0], p2[1]), new Point2D(p3[0], p3[1]), new Point2D(p1[0], p1[1]) 
 ]; 
 var numberOfPoints = times; 
 var curve=[]; 
 ComputeBezier( cp, numberOfPoints, curve ); 
 return curve;
}

热心网友 时间:2022-04-20 12:45

假设:图片的实例名为mc;
mc.addEventListener(Event.ENTER_FRAMEk,onEnter);
function onEnter(e:Event){
mc.x+=10;
mc.y+=6;
}

跟物理一样:x轴上有一个速度,y轴上也有一个速度……
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
...时间会发作,很痛的,请问是这样吗?会痛多久? ...已经坏了,如今全身浮肿,尿排不出,医生说就这 我爷爷得了肝癌晚期,腹水,不能手术.听说氩氦超冷刀技术能治.哪里有... 父亲59岁得了肝癌晚期,医生说最多半年时间了,上面还有80多岁的爷爷... 长春跑大连的列车员,怎么区分正式分和临时工呢? 员工刚怀孕就被开除,开除负责人拒不认错,你如何看待该公司的态度?_百 ... 员工在职期间怀孕,老板可以无故迟退吗? 老板开除怀孕女员工违法吗 如何选购蚊帐 什么样的蚊帐最好 Wecometoschoolbytaxi同义句 Amy goes home by taxi怎么提问 管理报表的格式是怎样的 具体些。。。 请问如何:创建报表服务 (Windows Azure SQL Reporting) 我在移动找到了一份工作 用Excel表格做宽带安装信息的统计 请问这算什么方面的工作经验呢 表格里administrator怎么弄 移动公司一般有哪些岗位? 小度小度听说晚上12点照镜子后面会有一个和鬼一样的东西这是真的吗? 入耳式蓝牙耳机第一次充电多久 画抛物线的技巧... 永辉超市的开票二维码是手机拍照的但是扫不出来,大神可以复原啥的么?_百度问一问 中石化电子发票二维码扫不出来 古代打仗是什么样的 电子发票二维码扫不出来有证号 古代打仗动不动伤亡几十万人,是真的吗? 奔跑吧兄弟20170428开场曲 voLte手机锁屏怎么解 如何解oppoVoLTE手机4个数字的锁屏密码 volte手机锁屏忘了怎么弄,这样子应该点那个? VoLte手机锁屏了这个要怎么解锁啊美女 国食健字G20150924是什么保健品 如何把照片印在墙上 怎样将相片贴在墙壁上 我想把自己收集的图片打印出来贴到墙上,用彩打可以么,能出来照片内种效果么,用什么纸,彩打用的是什么 通风管道工程怎么报价 手机里面的照片怎样才能做成真正的相片挂在墙上? 把照片贴在墙上,用什么贴不会破坏墙面? 照片可以印在什么东西上(除了变色杯) mate40pro卡托有编号吗 把相片弄在玻璃上的技术 2003版的excel怎么破解密码 2003EXCEL工作表保护密码忘了,请问有什么方法可以破解的? 怎么破解excel2003打开密码 Microsoft Excel 2003 密码忘了怎么可以破解 求大神指教 (问下流程步骤?)建设银行的信用卡搞分期通,一定要去网点吗,可以app申请吗? 正版windows7去哪买 win7正版有必要买吗? 有哪些性价比高的购买 Windows 7 正版系统的渠道 怎么清除缓存的(百度浏览器) QQ更新后无法启动怎么回事