zoukankan      html  css  js  c++  java
  • APE学习整理

    1. APE调用的基本结构

    package
     {
     
    import
    flash.display.Sprite;
     
    import
    flash.events.Event;
     
    import
    org.cove.ape.APEngine;
     
    import
    org.cove.ape.CircleParticle;
     
    import
    org.cove.ape.Group;
     
    import
    org.cove.ape.RectangleParticle;
     
    import
    org.cove.ape.VectorForce;
     
    public class
     Sample0922
    extends
    Sprite
     {
      
    public function
     Sample0922()
      {
       APEngine.init();
       APEngine.addForce(
    new
    VectorForce(false,0,5));
       APEngine.container = stage;
       
       
    var
    group:Group = 
    new
    Group();
       group.collideInternal = 
    true
    ;
       
    var
    ball:CircleParticle = 
    new
    CircleParticle(60,10,10,false,1,0.3,0);
       
    var
    rect:RectangleParticle = 
    new
    RectangleParticle(110,300,250,20,0,true,1,0.3,0);
       group.addParticle(ball);
       group.addParticle(rect);
       APEngine.addGroup(group);
       
       stage.addEventListener(Event.ENTER_FRAME,onEnterFrame);
      }
      
      
    private function
     onEnterFrame(event:Event):
    void
      {
       APEngine.step();
       APEngine.paint();
      }
     }
    }

    2. CircleParticle(圆形粒子)

    构造函数是:

    public function
     CircleParticle(
        x:Number,
        y:Number,
        radius:Number,
        fixed:Boolean = false,
        mass:Number = 1, 
        elasticity:Number = 0.3, 
        friction:Number = 0
           )

    参数说明:

    x -- 坐标x

    y -- 坐标y

    radius -- 圆半径

    fixed -- 粒子是否为固定,默认为false(不固定)。如果粒子是固定的话,在受到力的作用或在碰撞过程中将保持不动;固定的粒子非常适合用来模拟表面

    mass -- 粒子的质量,默认为1,大于0的值均为有效值。默认情况下所有的例子的质量均为1,质量与粒子形状的大小没有关系

    elasticity -- 粒子的弹性,默认为0.3,标准的值在0到1之间。值越大,弹性越大。注意:在碰撞的过程中,弹性的值是累加的。如果一个粒子的弹性值为0.3,另一个粒子的弹性值为0,4,那么在碰撞的时候弹性值就是0.8了;这和一个粒子的弹性值是0,另一个弹性值是0.7产生的效果是一样的

    friction -- 粒子表面的摩擦系数,默认为0,值必须在0到1之间。0代表没有摩擦(理想光滑),1代表完全的摩擦(像胶水一样);在碰撞中,摩擦系数也是累加的,但是被限制在1到0之间。例如:如果两个粒子表面的摩擦系数都是0.7的话,这两个粒子之间最终的摩擦力将会是1(完全的粘在一起)。注意:当前的版本有一个bug,那就是当和摩擦系数大于0且不固定的粒子碰撞时会得到错误的行为。一个解决方法就是,只给固定的粒子设置摩擦参数

    3. RectangleParticle(矩形粒子)

    构造函数是:

    public function
     RectangleParticle(
        x:Number, 
        y:Number, 
        Number, 
        height:Number, 
        rotation:Number = 0, 
        fixed:Boolean = false, 
        mass:Number = 1, 
        elasticity:Number = 0.3, 
        friction:Number = 0
             )

    参数说明:

    x -- 坐标x

    y -- 坐标y

    width -- 矩形宽度

    height -- 矩形高度

    rotation -- 矩形(顺时针)旋转弧度,可以用 (角度 * Math.PI / 180) 来得到弧度

    fixed -- 粒子是否为固定,默认为false(不固定)。如果粒子是固定的话,在受到力的作用或在碰撞过程中将保持不动;固定的粒子非常适合用来模拟表面

    mass -- 粒子的质量,默认为1,大于0的值均为有效值。默认情况下所有的例子的质量均为1,质量与粒子形状的大小没有关系

    elasticity -- 粒子的弹性,默认为0.3,标准的值在0到1之间。值越大,弹性越大。注意:在碰撞的过程中,弹性的值是累加的。如果一个粒子的弹性值为0.3,另一个粒子的弹性值为0,4,那么在碰撞的时候弹性值就是0.8了;这和一个粒子的弹性值是0,另一个弹性值是0.7产生的效果是一样的

    friction -- 粒子表面的摩擦系数,默认为0,值必须在0到1之间。0代表没有摩擦(理想光滑),1代表完全的摩擦(像胶水一样);在碰撞中,摩擦系数也是累加的,但是被限制在1到0之间。例如:如果两个粒子表面的摩擦系数都是0.7的话,这两个粒子之间最终的摩擦力将会是1(完全的粘在一起)。注意:当前的版本有一个bug,那就是当和摩擦系数大于0且不固定的粒子碰撞时会得到错误的行为。一个解决方法就是,只给固定的粒子设置摩擦参数

    4. WheelParticle(轮子粒子)

    构造函数是:

    public function
     WheelParticle(
        x:Number, 
        y:Number, 
        radius:Number, 
        fixed:Boolean = false, 
        mass:Number = 1, 
        elasticity:Number = 0.3, 
        friction:Number = 0, 
        traction:Number = 1
       )

    参数说明:

    x -- 坐标x

    y -- 坐标y

    radius -- 轮子的半径

    fixed -- 粒子是否为固定,默认为false(不固定)。如果粒子是固定的话,在受到力的作用或在碰撞过程中将保持不动;固定的粒子非常适合用来模拟表面

    mass -- 粒子的质量,默认为1,大于0的值均为有效值。默认情况下所有的例子的质量均为1,质量与粒子形状的大小没有关系

    elasticity -- 粒子的弹性,默认为0.3,标准的值在0到1之间。值越大,弹性越大。注意:在碰撞的过程中,弹性的值是累加的。如果一个粒子的弹性值为0.3,另一个粒子的弹性值为0,4,那么在碰撞的时候弹性值就是0.8了;这和一个粒子的弹性值是0,另一个弹性值是0.7产生的效果是一样的

    friction -- 粒子表面的摩擦系数,默认为0,值必须在0到1之间。0代表没有摩擦(理想光滑),1代表完全的摩擦(像胶水一样);在碰撞中,摩擦系数也是累加的,但是被限制在1到0之间。例如:如果两个粒子表面的摩擦系数都是0.7的话,这两个粒子之间最终的摩擦力将会是1(完全的粘在一起)。注意:当前的版本有一个bug,那就是当和摩擦系数大于0且不固定的粒子碰撞时会得到错误的行为。一个解决方法就是,只给固定的粒子设置摩擦参数

    traction -- 粒子受到的牵引力,默认为1。值必须在0到1之间,如果设置为0,即使在一个安全光滑的表面,轮子也会像陷入泥潭一样原地打转;也可以通过设置表面的摩擦系数(friction)为1,但即使表面像胶水一样,轮子还是可以缓慢的移动的;使用时结合轮子本身的牵引力(traction)和表面的friction(摩擦系数)来模拟各种效果

    package
     {
     
    import
    flash.display.Sprite;
     
    import
    flash.events.Event;
     
    import
    flash.events.KeyboardEvent;
     
    import
    flash.ui.Keyboard;
     
     
    import
    org.cove.ape.APEngine;
     
    import
    org.cove.ape.Group;
     
    import
    org.cove.ape.RectangleParticle;
     
    import
    org.cove.ape.VectorForce;
     
    import
    org.cove.ape.WheelParticle;
     
    public class
     Sample0923
    extends
    Sprite
     {
      
    private var
    wheel:WheelParticle;
      
      
    public function
     Sample0923()
      {
       APEngine.init(0.25);
       APEngine.addForce(
    new
    VectorForce(false,0,5));
       APEngine.container = this;
       
       
    var
    group:Group = 
    new
    Group();
       group.collideInternal = 
    true
    ;
       
       
    var
    rect:RectangleParticle = 
    new
    RectangleParticle(100,80,200,5,0,true,1,0.3,0);
       
       wheel = 
    new
    WheelParticle(50,50,15,false,1,0.3,0,1);
       
       group.addParticle(rect);
       group.addParticle(wheel);
       
       APEngine.addGroup(group);
       
       stage.addEventListener(Event.ENTER_FRAME,onEnterFrame);
       stage.addEventListener(KeyboardEvent.KEY_DOWN,onKeyHandler);
       stage.addEventListener(KeyboardEvent.KEY_UP,onKeyHandler);
      }
      
      
    private function
     onEnterFrame(event:Event):
    void
      {
       APEngine.step();
       APEngine.paint();
      }
      
      
    private function
     onKeyHandler(event:KeyboardEvent):
    void
      {
       
    if
    (event.type == KeyboardEvent.KEY_DOWN)
       {
        
    if
    (event.keyCode == Keyboard.LEFT)
        {
         wheel.angularVelocity = -0.1;
        }
        else 
    if
    (event.keyCode == Keyboard.RIGHT)
        {
         wheel.angularVelocity = 0.1;
        }
       }
       else
       {
        wheel.angularVelocity = 0;
       }
      }
     }
    }

    5. CollisionEvent(碰撞事件)

    有两种碰撞事件,分别是CollisionEvent.COLLIDE和CollisionEvent.FIRST_COLLIDE,前者会在碰撞时不停触发,后者只在第一次碰撞时触发

    每个粒子都有个sprite属性,可以设置该sprite的name以供事件调用

    CollisionEvent.target -- 产生碰撞的对象(自身)

    CollisionEvent.collidingItem -- 被碰撞的对象

    package
     {
     
    import
    flash.display.Sprite;
     
    import
    flash.events.Event;
     
     
    import
    org.cove.ape.APEngine;
     
    import
    org.cove.ape.CircleParticle;
     
    import
    org.cove.ape.CollisionEvent;
     
    import
    org.cove.ape.Group;
     
    import
    org.cove.ape.RectangleParticle;
     
    import
    org.cove.ape.VectorForce;
     
    import
    org.cove.ape.WheelParticle;
     
    public class
     Sample0923
    extends
    Sprite
     {
      
    private var
    wheel:WheelParticle;
      
      
    public function
     Sample0923()
      {
       APEngine.init(0.25);
       APEngine.addForce(
    new
    VectorForce(false,0,5));
       APEngine.container = this;
       
       
    var
    group:Group = 
    new
    Group();
       group.collideInternal = 
    true
    ;
       
       
    var
    rect:RectangleParticle = 
    new
    RectangleParticle(220,280,400,5,0,true,1,0.3,0);
       rect.sprite.name = 
    "方块"
    ;
      
       
    var
    ball:CircleParticle = 
    new
    CircleParticle(95,10,10,
    false
    );
       
    //ball.addEventListener(CollisionEvent.COLLIDE,onCollide);
     
       ball.addEventListener(CollisionEvent.FIRST_COLLIDE,onCollide);
       ball.sprite.name = 
    "一个球"
    ;
       
       group.addParticle(rect);
       group.addParticle(ball);
       
       APEngine.addGroup(group);
       
       stage.addEventListener(Event.ENTER_FRAME,onEnterFrame);
      }
      
      
    private function
     onCollide(event:CollisionEvent):
    void
      {
       
    trace
    (event.collidingItem.sprite.name);
       
       
    var
    temp:CircleParticle = event.target  
    as
      CircleParticle;
       
    trace
    (temp.sprite.name);
      }
      
      
    private function
     onEnterFrame(event:Event):
    void
      {
       APEngine.step();
       APEngine.paint();
      }
     }
    }

    6. setStyle(为粒子设置基本样式)

    public function
     setStyle(
        lineThickness:Number = 0, 
        lineColor:uint = 0x000000, 
        lineAlpha:Number = 1, 
        fillColor:uint = 0xffffff, 
        fillAlpha:Number = 1
       ):
    void

    参数说明:

    lineThickness -- 边框粗细,默认为0

    lineColor -- 边框颜色,默认为0x000000(黑色)

    lineAlpha -- 边框颜色透明度,默认为1(不透明)

    fillColor -- 填充颜色,默认为0xffffff(白色)

    fillAlpha -- 填充颜色透明度,默认为1(不透明)

    7. setDisplay(为粒子设置显示对象)

    渲染粒子时,可以分配一个显示对象(DisplayObject)来呈现该粒子

    public function
     setDisplay(
        d:DisplayObject, 
        offsetX:Number = 0, 
        offsetY:Number = 0, 
        rotation:Number = 0
       ):
    void

    参数说明:

    d -- 显示对象

    offsetX -- x方向的偏移,默认为0

    offsetY -- y方向的偏移,默认为0

    rotation -- 偏移角度,默认为0

    8. APEngine.damping(全局的阻力)

    值在0到1之间,默认值为1(没有阻力),值越大阻力越小

    当值为0时,所有的粒子都不能运动了,因为阻力太大了;当值为1表示没有任何阻力

    dumping会减慢你的模拟速度使你的模拟更稳定,如果你发现你的模拟出现跑飞现象,试着更正damping的值

  • 相关阅读:
    GPIO推挽输出和开漏输出详解
    Linux驱动中completion接口浅析(wait_for_complete例子,很好)【转】
    当JAVA集合移除自身集合元素时发生的诸多问题
    Machine Learning #Lab1# Linear Regression
    Nth to Last Node in List
    Codeforces Round #272 (Div. 2)AK报告
    iOS 使用Block实现函数回调
    ios上禁止输入表情
    POJ 1287:Networking(最小生成树Kruskal)
    CSS实现强制换行-------Day 78
  • 原文地址:https://www.cnblogs.com/CoderWayne/p/1778019.html
Copyright © 2011-2022 走看看