AS3坐旋转角度反弹.doc

  1. 1、本文档共10页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
AS3坐标旋转角度反弹 简单的坐标旋转 虽然我们在第三章讲三角学的时候介绍过计算的坐标旋转的方法,但还是先来做一下回 顾。假设知道一个中心点,一个物体,一个半径和一个角度。通过不断地增加或减少角度, 并运用基本的三角学知识让物体绕着中心点旋转。我们可将变量设为 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 坐标,每帧都如此。这就显得太麻烦了,并且效率也不会 很高。没关系,我们还有更好的办法。 图 10-1 坐标旋转 角度(angle)就是某一时刻内旋转物体位置的大小。这并非当前的角度,也不是旋转后 的角度,而是这两者之间的差值。换句话讲,如果物体在离中心点 45 度的位置,而这次的 角度是 5 度,我们就要在当前角度的基础上再旋转 5 度,到达 50 度这个位置上。这里我 们并不关心最初或最终的角度,只关心旋转了多少度。通常来讲,这个角度都是用弧度制表 示的。OK,让我们来看例子吧。 单物体旋转 本例中将一个小球放在随机的位置上,并使用前面介绍的方法对它进行旋转(文档类 Rotate2.as): package { import flash.display.Sprite; import flash.events.Event; public class Rotate2 extends Sprite { private var ball:Ball; private var vr:Number = .05; private var cos:Num

文档评论(0)

cj80011 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档