flash as3控制坐标旋转.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
flash as3控制坐标旋转 2010-06-13 14:30第十章 坐标旋转及角度反弹本章介绍了一项特殊技术,著名的坐标旋转。如同其名,它是物体指绕着某点旋转其坐标,在制作一些非常有趣的效果时,坐标旋转是必不可少的。其中就包括在 Flash 界讨论了很多年的问题:“如何在斜面上进行反弹?”,本章我会给大家一一解答。另一个用坐标旋转完成的程序是两物体之间的交互反弹效果。我们会在下一章讨论动量守衡时进行讲解。而本章的坐标旋转,我们之前也已经接触过了。如果大家想跳过这章的话,我劝您还是先坐下来,浏览一遍为好。简单的坐标旋转虽然我们在第三章讲三角学的时候介绍过计算的坐标旋转的方法,但还是先来做一下回顾。假设知道一个中心点,一个物体,一个半径和一个角度。通过不断地增加或减少角度,并运用基本的三角学知识让物体绕着中心点旋转。我们可将变量设为 vr (旋转速度)来控制角度的增加或减少。还有,不要忘记角度应用弧度制来表示。代码的结构如下所示:vr = 0.1;angle = 0;radius = 100;centerX = 250;centerY = 200;// 在 enterFrame 处理函数中:sprite.x = centerX + cos(angle) * radius;sprite.y = centerY + sin(angle) * radius;angle += vr;根据角度与半径使用简单的三角函数设置物体的 x,y 属性,并在每帧中改变角度。我们用 Flash 动画演示一下。下面是第一个例子,文档类 Rotate1.as:package {import flash.display.Sprite;import flash.events.Event;public class Rotate1 extends Sprite {private var ball:Ball;private var angle:Number = 0;private var radius:Number = 150;private var vr:Number = .05;public function Rotate1() {init();}private function init():void {ball = new Ball();addChild(ball);addEventListener(Event.ENTER_FRAME, onEnterFrame);}private function onEnterFrame(event:Event):void {ball.x = stage.stageWidth / 2 + Math.cos(angle) * radius;ball.y = stage.stageHeight / 2 + Math.sin(angle) * radius;angle += vr;}}}这段代码中没有什么新的知识点。大家可以改变一下角度与半径,试验运行结果。但是如果我们只知道物体与中心点的位置又该怎么办呢?用 x,y 坐标计算出当前的角度(angle)与半径(radius)也并非难事。代码如下:var dx:Number = ball.x - centerX;var dy:Number = ball.y - centerY;var angle:Number = Math.atan2(dy, dx);var radius:Number = Math.sqrt(dx * dx + dy * dy);这种基于坐标的旋转只对单个物体的旋转效果比较好,尤其是一次性就可确定角度和半径的情况下。但是在动态的程序中,有时需要旋转多个物体,而它们与中心点的相对位置可能会发生改变。因此,对于每个物体来说,都需要计算距离,角度和半径,还要用 vr 来增加角度,最后才能算出新的 x,y 坐标,每帧都如此。这就显得太麻烦了,并且效率也不会很高。没关系,我们还有更好的办法。高级坐标旋转如果物体要绕着某一点旋转,并且以物体本身的位置作为旋转的起点,那么下面给大家一个公式。这个公式只需要给出物体距离中心点的相对 x,y 坐标和旋转的角度。它就会返回物体相对于中心点的新的坐标位置。基本公式如下:x1 = cos(angle) * x - sin(angle) * y;y1 = cos(angle) * y + sin(angle) * x;公式看上去像是一串相互对称的数字或符号,这是我刚刚接触它时的感觉。虽然使用这个公式很多次了,但依然有这样的感觉。我曾多次用图形来解释这些正弦余弦函数是如何让 x,y 变化的,每一次都会有全新的感觉。研究 30 分钟后,我发现这是两串非常对称的符号。虽然我通常都会给大家解释某项技术完整的概念,但是如果这次我还这样做的话,那我

文档评论(0)

chqs52 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档