- 1、本文档共10页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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)