Flash基础理论课 第十一章 撞球物理Ⅱ

返回“Flash基础理论课 - 目录”

编写代码

首先要让两个小球以一定的角度运动并且最后相互碰撞。开始的设置与前面相同,两个小球实例:ball0和ball1。这次让它们变大一点,如图 11-9 所示,这样它们碰撞的机会就会大一些。


图11-9 二维动量守恒,设置舞台

package {
 import flash.display.Sprite;
 import flash.events.Event;
 public class Billiard3 extends Sprite {
  private var ball0:Ball;
  private var ball1:Ball;
  private var bounce:Number = -1.0;
  public function Billiard3() {
   init();
  }
  private function init():void {
   ball0 = new Ball(150);
   ball0.mass = 2;
   ball0.x = stage.stageWidth - 200;
   ball0.y = stage.stageHeight - 200;
   ball0.vx = Math.random() * 10 - 5;
   ball0.vy = Math.random() * 10 - 5;
   addChild(ball0);
   ball1 = new Ball(90);
   ball1.mass = 1;
   ball1.x = 100;
   ball1.y = 100;
   ball1.vx = Math.random() * 10 - 5;
   ball1.vy = Math.random() * 10 - 5;
   addChild(ball1);
   addEventListener(Event.ENTER_FRAME, onEnterFrame);
  }
  private function onEnterFrame(event:Event):void {
   ball0.x += ball0.vx;
   ball0.y += ball0.vy;
   ball1.x += ball1.vx;
   ball1.y += ball1.vy;
   checkWalls(ball0);
   checkWalls(ball1);
  }
  private function checkWalls(ball:Ball):void {
   if (ball.x + ball.radius > stage.stageWidth) {
    ball.x = stage.stageWidth - ball.radius;
    ball.vx *= bounce;
   } else if (ball.x - ball.radius < 0) {
    ball.x = ball.radius;
    ball.vx *= bounce;
   }
   if (ball.y + ball.radius > stage.stageHeight) {
    ball.y = stage.stageHeight - ball.radius;
    ball.vy *= bounce;
   } else if (ball.y - ball.radius < 0) {
    ball.y = ball.radius;
    ball.vy *= bounce;
   }
  }
 }
}

时间: 2024-10-26 05:26:30

Flash基础理论课 第十一章 撞球物理Ⅱ的相关文章

Flash基础理论课 第十一章 撞球物理Ⅰ

返回"Flash基础理论课 - 目录" 我们都希望技术性的书籍,可以潜入深,由简单到复杂.本章内容的复杂度达到了顶点.并不是说接下来的章节会越来越容易,但是希望大家在学习本章内容时不要偷工减料.我会带大家一步步地学习本章的概念,如果到现在为止大家都能很好地跟上我的步伐,那就再好不过了. 本章我们要关注动量:两个物体发生碰撞后动量会发生什么样的变化,动量的守恒,以及如何在ActionScript中应用动量. 在本章的例子中使用的对象,都本这简单直接的原则,这个学科通常是指"撞球

Flash基础理论课 第十七章 背面剔除与3D灯光Ⅰ

返回"Flash基础理论课 - 目录" 第十六章介绍了所有建立 3D 立体模型的基础包括:如何创建点,线,用多边形组成各种形状,以及如何为每个多边形设置颜色.但是,我们只能让颜色的透明度为50%,才能看到正确的效果.虽然制作出的 3D 立体模型也不差,但是这样做在真实度上还是有所欠缺. 本章,通过介绍背面剔除(不绘制背面的多边形),深度排序(第十五章作了一点介绍,但这次要从多边形的角度重新审视它),以及 3D 灯光,来修正这个问题. 我想应用了这三种技术所得到的 3D 模型一定会让大家

Flash基础理论课 第十三章 正向运动学:行走Ⅰ

返回"Flash基础理论课 - 目录" 前面章节介绍的都是ActionScript交互动画的基础,也可以说是一些高级"基础".现在开始,我们进入另一条有趣的技术之路,运动学. 到底什么是运动学呢?我所找到的一些资料看起来都有些让人望而却步,这是一项基于高级 3D 动画编程的技术.上网搜索一下,会发现其涉及到的方程中到处都是些陌生符号,这也成为了我们学习的最大障碍,似乎前面所学的内容都像是很基础的算法.首先,我要说,运动学并没有那么可怕.前面章节中只介绍了我们所需的一

Flash基础理论课 第七章 交互动画:移动物体Ⅰ

返回"Flash基础理论课 - 目录" 我们最初的目标就是要制作出流畅的交互动画,多数都是通过鼠标进行交互的.在第二章里面曾介绍过鼠标事件,但没有涉及到具体的应用. 本章将踏出交互动画的第一步.我们将学会如何处理拖拽,抛落及投掷.但首先要从基本的鼠标按下与释放说起. 按下及释放影片 鼠标可真是件了不起的发明,虽说只是个简单的设备.实际上鼠标只负责两件事:检测移动及点击按钮.计算机用获得的这些信息可以做很多事:通过获知鼠标指针的位置,确定当发生点击的位置,移动的速度,及确定双击事件的发生

Flash基础理论课 第六章 边界与摩擦力Ⅱ

返回"Flash基础理论课 - 目录" 反弹 本节中的弹性处理也许是最常用也是最复杂的,但也没有屏幕环绕那么复杂,所以不用担心.当检测到物体超出舞台后,开始应用弹性,不改变改变物体的位置,只改变它的速度向量.方法很简单:如果物体超出了左.右边界,只需要使它的x速度向量取反.如果超出了上.下边界,只需要让 y速度向量取反.坐标轴取反非常简单,只需要乘以 -1 .如果速度向量等于5,则变成-5.如果是-13,则变成13.代码也非常简单:vx *= -1 或 vy *= -1. 对于反弹的时

Flash基础理论课 第六章 边界与摩擦力Ⅰ

返回"Flash基础理论课 - 目录" 到目前为止,我们已经学会了如何在影片中绘制图形,并且通过施加外力使影片运动起来.然而,在这些例子中也许会遇到这样的烦恼:物体移动到屏幕外后就不到了.如果在某个角度上运动得过快,那么就没有办法再让物体退回来,只能选择重新运行影片. 我们常常忽视边界的存在如:墙和屋顶,最平常的就是地面.通常在制作太空模拟时,要用环境边界作为一道屏障,保证物体能够在一个可见的范围内运动. 另一个常被忽略的问题是,所处的环境如何改变物体的运动.惯性一词是用来形容物体在空

Flash基础理论课 第五章 速度与加速度Ⅰ

返回"Flash基础理论课 - 目录" 恭喜各位!至此已经到了真正的动作编程部分,这就意味着:(a) 您已经坚持学习了前面的所有章节:(b) 您感觉前面内容已经会过了,所以跳过前面的章节:(c) 您感觉无聊所以跳过了.但是不管怎么样,要记得如果在日后的学习中遇到了相关的问题,可以回到前面几章寻找答案. 本章以基本运动为基础:速度,向量以及加速度.今后所有的ActionScript 动画,几乎都会用到这些概念. 速度向量(Velocity) 物体运动的最基本属性就是速度.很多人把速度向量

Flash基础理论课 第四章 渲染技术Ⅰ

返回"Flash基础理论课 - 目录" 前一章面所看到的绘图示例中,只使用了一些非常简单的绘图指令,前面我们也几次提到了这个神秘的"drawing API",但没有加以详细的解释.本章我们将学习使用 ActionScript 创建视觉元素,其中包括 ActionScript的颜色,绘图 API ,ColorTransform类,滤镜(filter)和 BitmapData(位图)类.在本章的很多地方都会用到颜色,那么就先来学习第一课吧. Flash中的颜色 在Fla

Flash基础理论课 第三章 三角学应用Ⅰ

返回"Flash基础理论课 - 目录" 从这一章开始,我们将学习三角学,并在第五章开始应用到动画技术中,其实在下一章的绘图技术中就会接触到.如果你已经对三角学有所了解或渴望学习动画方面的知识,那么可以跳过开始这部分,待日后遇到不懂的问题时,再回来学习.我们用到的90%的三角学都需要 Math.sin 和 Math.cos 这两个函数.在我写本书的第一版时,曾说过,除了在中学学习过的那些代数和几何外(而且由于时间久远大多都记不清了),我没有接受过正规的数学培训,最初在本章中的内容都是来自