完美重力场(详细教程)
作者 佚名技术
来源 服务器技术
浏览
发布时间 2012-07-10
当然先看一下效果来: 点击浏览该文件 制作过程: 1. 创建定义物体轮廓的控制点对象 在场景创建一个名为refer的影片剪辑,不对它做任何剪辑(空的)。 2.创建物体对象 (1)在场景编辑状态下创建一个名为lemonrefer的影片剪辑。不做任何编辑,退出影片剪辑lemonrefer. (2).在场景1下创建一个名为lemon的mc (3)进入lemon的编辑状态,将第一层名为lemon.选择层其第一帧,导入柠檬的矢量图文件。 (4)使图片位于舞台的中央,然后ctrl+b,打散。如图。 (5)在lemon层上新建一层,名为lemonrefer,在其第一帧中拖入一个lemonrefer的mc,中心对齐舞台中心。 (6)双击lemonrefer实例,进入它的编辑状态,选择第一帧,从库中拖曳mc实例refer,放在lemon的边缘上,直到“包围”它。如图: (7)退出mc实例lemonrefer,在属性栏中命名为perim. 退出mc实例lemon,完成编辑。 3.在场景中编写AS。 (1)在场景1中,拖入一个lemon实例,在属性栏中命名为mclemon 新建一层,名为as,添加代码: Movieclip.prototype.col = function(w, h, d){ var c=0; var xs=0; var ys=0; var diff=0; var hitFloorX=0; var hitWallY=0; //对所有在perim影片剪辑中的refer剪辑 for (i in this.perim) { //将p.x和p.y设置成refer的x,y坐标 this.perim.localToGlobal(p={x:this.perim[i]._x,y:this.perim[i]._y}) //如果不在舞台内,而在舞台的下方 if (p.y > h) { //当refer碰撞时设置其x坐标为hitFloorX hitFloorX = p.x //将影片剪辑放回舞台内。 this._y -= p.y - h; } //如果不在舞台内,而在舞台的右方 if (p.x > w) { 将refer碰撞墙壁点设为hitWallY hitWallY = p.y; //dy<0意味着剪辑正在缓慢的向上移动,剪辑向上运动一半 if (this.dy < 0) this.dy *= d; //弹回来 this._x -= (p.x - w)*3; } //对到舞台的左面进行同样的处理。 if (p.x < 0) { hitWallY = p.y; if (this.dy < 0) this.dy *= d; this._x -= p.x*3; } ys += p.y; xs += p.x; C++; //refer的数量 } //如果撞到了地面 if(hitFloorX){ //diff=碰撞的中心偏移量 diff = (xs/c) - hitFloorX this.r=(this.r + diff*(this.dy/350))/1.2 this.dy *= -1.4 * d; //如果物体在旋转,则也在其旋转的方向上移动, //相对于旋转量的移动量 this.dx *= d; this.dx += this.r*2; } //如果碰撞了墙壁 if (hitWallY) { diff = (ys/c) - hitWallY; this.dx *= -1 * d; } } ASSetPropFlags(MovieClip.prototype, "col", 1); _global.gcGravity = 15; _global.gcDamping = 0.5; _global.gcStageHeight = 300; _global.gcStageWidth = 400; aClips = ["mclemon"]; for (i in aClips) { thisClip = this[aClips[i]]; thisClip._x = random(gcStageWidth); thisClip._y = random(gcStageHeight); thisClip.onPress = function() { this.r = 0; this.startDrag(); this.oX = _root._xmouse; this.pr = true; }; thisClip.onRelease = thisClip.onReleaseOutside = function() { this.stopDrag(); this.pr = false; }; thisClip.onEnterFrame = function() { this.col(gcStageWidth, gcStageHeight, gcDamping); //ox是剪辑在前一帧中的X坐标 this.ox = this.x; this.oy = this.y; this.x = this._x; this.y = this._y; //如果单击了物体,则根据它在前一帧的位置来设置其在X轴方向的差值, if (this.pr) { this.dx = (this.x-this.ox)*7; this.dy = (this.y-this.oy)*7; } else { //如果释放鼠标,由于重力的影响要加上dy的值 this.dy += gcGravity; this.x += this.dx/10; this.y += this.dy/10; this._x = this.x; this._y = this.y; } this._rotation += this.r; //放慢 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |
你可能对下面的文章感兴趣
上一篇: 检测外部文件的存在下一篇: 最简单的调外部文本的打字效果
关于完美重力场(详细教程)的所有评论