zoukankan      html  css  js  c++  java
  • Flash动画教程学习(四)高级动画2

    第九章 碰撞检测

    1. 两种方法:基于对象实际像素;基于对象间的距离
    2. 基于对象实际像素:

    1>     hitTestObject方法:测试一个显示对象是否碰撞到另一个

    sprite1.hitTestObject(sprite2):如果碰撞返回true//非常不精确,基于矩形检测

    2>     hitTestPoint方法:测试一个指定的点是否碰撞到一个显示对象

    不适合检测两个精灵之间的碰撞;还是检测点和矩形;

    Sprite1.hitTestPoint(100,100);

    3>     使用shapeFlag的碰撞测试:检测点和精灵可视图像的碰撞

    If(ball1.hitTestPoint(mouseX,mousy,true)):非常准确,但是不一定应用到所有碰撞检测

    拓展:两个星星,每个星星五个测试点;对于非常小的精灵可以用上述方法检测

    1. 基于对象间的距离:不是内置方法

    Dist = Math.sqrt(x*x + y*y);

    关于碰撞的弹性:

    1. 多物体碰撞检测策略:

    1>     检查是否有重复碰撞检测、最初的结果是所需要的两倍

    物体两两相撞嵌套循环:

    for(var i:uint = 0; i < numBalls - 1; i++)

                            for(var j:uint = i + 1; j < numBalls; j++)

    2>     其他的碰撞检测方法:

    www.gskinner.com

    第十章 坐标旋转和角度回弹

    1. 简单的坐标旋转:

                        ball.x = stage.stageWidth / 2 + Math.cos(angle) * radius;

                        trace(ball.x);

                        ball.y = stage.stageHeight / 2 + Math.sin(angle) * radius;

                            angle += vr;

    1. 高级坐标旋转:高效

                        var x1:Number = ball.x - stage.stageWidth / 2;

                        var y1:Number = ball.y - stage.stageHeight / 2;

                        var x2:Number = cos * x1 - sin * y1;

                        var y2:Number = cos * y1 + sin * x1;

                        ball.x = stage.stageWidth / 2 + x2;

                            ball.y = stage.stageHeight / 2 + y2;

    1. 沿角度回弹:

    坐标旋转:

    x1 = cos * x2 - sin * y2;

    y1 = cos * y2 + sin * x2;

    反转坐标旋转:

    x1 = cos * x2 +sin * y2;

    y1 = cos * y2 - sin * x2;

    第十一章 台球物理

    1. 质量、
    2. 动量:p = m * v ;
    3. 动量守恒:m0*v0+m1*v1 = m0*v0final+m1+v1final;

    KE = 0.5*v2

    得出:m0*v02+m1*v12 = m0*v0final2+m1*v1*final2

    两个小球相撞:

                                 var vx0Final:Number = ((ball0.mass - ball1.mass) * ball0.vx + 2 * ball1.mass * ball1.vx) / (ball0.mass + ball1.mass);

                                 var vx1Final:Number = ((ball1.mass - ball0.mass) * ball1.vx + 2 * ball0.mass * ball0.vx) / (ball0.mass + ball1.mass);

                                 ball0.vx = vx0Final;

                                 ball1.vx = vx1Final;

                                  

                                 ball0.x += ball0.vx;

                                 ball1.x += ball1.vx;

  • 相关阅读:
    npm 5.4.2 更新后就不能用了
    Node.js 被分叉出一个项目 — Ayo.js,肿么了
    页面缓存之Meta http-equiv属性详解
    Javascript 浮点计算问题分析与解决
    详解 Cookie 纪要(vue.cookie,jquery.cookie简化)
    Cookie 基本操作
    HTML5上传图片预览
    location.href跳转测试
    ios中iframe的scroll滚动事件替代方法
    JS数组API
  • 原文地址:https://www.cnblogs.com/tinytiny/p/2439126.html
Copyright © 2011-2022 走看看