查看: 3212|回复: 0
打印 上一主题 下一主题

[as3基础应用]ape物理引擎的使用(第二篇)

[复制链接]
.    

3797

主题

11

听众

5万

积分

首席设计师

Rank: 8Rank: 8

纳金币
32328
精华
41

活跃会员 优秀版主 荣誉管理 论坛元老

跳转到指定楼层
楼主
发表于 2013-3-20 09:35:21 |只看该作者 |倒序浏览
————————————————————————————————————————————————————————————————————
CircleParticle——》 AbstractParticle——》AbstractItem
子类:WheelParticle
圆形粒子
属性
radius 属性
radius:Number  [读写]
粒子的半径
构造函数
CircleParticle () 构造器
public function CircleParticle(x:Number, y:Number, radius:Number, fixed:Boolean = false, mass:Number = 1, elasticity:Number = 0.3, friction:Number = 0)
参数:
x:Number — 这个粒子的初始x位置.

y:Number — 这个例子的初始y位置.

radius:Number — 粒子的半径.

fixed:Boolean (default = false) —决定这个粒子是否固定。
mass:Number (default = 1) — 粒子的质量.

elasticity:Number (default = 0.3) — 粒子的弹力,值越大弹力越大。
friction:Number (default = 0) — 粒子表面的摩擦力。
方法
init () 方法
public override function init():void
建立圆形粒子的视觉表象,当这个圆形粒子的父组(包含该粒子的组)的实例被加到APEngine中、圆形粒子的复合体被加入到组中、圆形粒子被加入到组或复合体中的时候,这个方法会自动的被调用。
paint () 方法
public override function paint():void
这个粒子默认的渲染方法,这个方法会被APEngine.paint()方法自动的调用。
如果你想要自己定义渲染方法,你可以创建这个类的一个子类,并在子类中覆盖
————————————————————————————————————————————————————————————————————
WheelParticle ——》 CircleParticle ——》 AbstractParticle ——》 AbstractItem
用于模拟轮子行为的粒子
属性
angle 属性
angle:Number  [只读]
轮子旋转的角度
angularVelocity 属性
angularVelocity:Number  [读写]
轮子粒子的角速度。你可以通过修改这个值使轮子粒子旋转起来。
radian 属性
radian:Number  [只读]
轮子旋转的弧度
speed 属性
speed:Number  [读写]
轮子粒子的速度,你可以通过修改这个值使轮子旋转。
traction 属性  
traction:Number  [读写]
在碰撞中牵引力的大小。这个属性决定了当轮子粒子和其它的粒子接触是到底有多少牵引力作用在轮子粒子上。如果这个值设为0,将不会有牵引力,就好像与轮子接触的平面是完全光滑的那样。这个值应该在0到1之间。
注意:frection(摩擦系数)和traction(牵引力)的行为是不同的。当轮子粒子在一个摩擦系数非常打的平面运动时,轮子粒子的运动速度将非常慢,好像平面上涂满了胶水。
构造函数
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:Number —初始x位置

y:Number —初始y位置.

radius:Number — 粒子的半径.

fixed:Boolean (default = false) — 决定这个粒子是否是固定的。
mass:Number (default = 1) — 粒子的质量

elasticity:Number (default = 0.3) — 粒子的弹力。值越大塔里越大。
friction:Number (default = 0) —粒子表面的摩擦力。

traction:Number (default = 1) — 粒子表面的牵引力。
注:固定的轮子粒子也可以自由度旋转
方法
init ()方法
public override function init():void
建立粒子的视觉呈现。当粒子被加入到引擎时这个方法自动被调用。
paint () 方法
public override function paint():void
这个粒子默认的渲染方法。在快速的测试中你应该仅仅用这个默认的paint()方法。如果你有自己的特殊的要求,你应该自己写一个类,要么让这个类继承APE中的粒子或约束,要么把他们组合在一起。然后在你自己的类中定义你自己的渲染方法。
update () 方法
public override function update(dt:Number):void
————————————————————————————————————————————————————————————————————
AbstractConstraint(父类是:AbstractItem)(子类有:SpringConstraint)
你不应实例化这个类,而应该使用它的子类。
属性
stiffness 属性
stiffness:Number  [read-write]
是约束变得僵硬,值越大越僵硬。这个值应该在0到1之间。根据运行的情况,这个直设的过高会导致应用不稳定。
————————————————————————————————————————————————————————————————————
SpringConstraint——》  AbstractConstraint ——》 AbstractItem
一个像弹簧的约束,用来连接两个物体。
属性
angle属性
angle:Number  [只读]
连接在这个SpringConstraint(弹簧约束)上的两个粒子的位置所构成的角度。你可以在渲染方法中应用这个属性和center属性。
center 属性
center:Vector  [只读]
连接在这个SpringConstraint(弹簧约束)上的两个粒子的位置的中心。你可以在渲染方法中应用这个属性和旋转属性。
collidable 属性
collidable:Boolean  [只读]
决定两个粒子之间的区域是否接受碰撞检测。如果这个属性打开的话(即为***e),你可以修改rectHeight属性和rectWidth属性来修改接受碰撞检测区域的尺寸大小。
currLength 属性
currLength:Number  [只读]
返回弹簧约束(SpringConstraint)的长度,即两个被链接的粒子的距离。
fixed 属性
fixed:Boolean  [只读]
如果被链接的两个粒子的fixed属性都为***e时返回***e。
fixedEndLimit 属性
fixedEndLimit:Number  [读写]
当弹簧约束(SpringConstraint)为可接受碰撞的并且两端的粒子只有一个是固定的,这个值将处理固定端粒子附近的碰撞,纠正难以解决的碰撞问题。这个值在0.0到1.0之间。
radian 属性
radian:Number  [只读]
连接在这个SpringConstraint(弹簧约束)上的两个粒子的位置所构成的旋转的值。你可以在你自定义的渲染方法中应用这个属性和center属性。
rectHeight 属性
rectHeight:Number  [读写]
如果collidable属性为***e,你可以设置这两个粒子之间能接受碰撞的矩形区域的高度。这个值是大于零的。如果你设置这个值为10,那么碰撞区域矩形的高度为10像素,这个高度与两个连接的粒子的连线垂直的。
rectScale属性
rectScale:Number  [读写]
如果collidable属性为***e,你可以设置这两个粒子之间能接受碰撞的矩形区域的缩放。有效值在0到1之间。如果你将值设为1,这个碰撞区域将扩展到来被链接的两个粒子处。设置一个较低的值,会使碰撞区域按距离的百分比缩放。这个值设的过大会使碰撞矩形扩张甚至超过两端的粒子。
restLength 属性
restLength:Number  [读写]
restLength 属性设置弹簧约束(SpringConstraint)的长度。如果两端的粒子位置没有因受到外力而改变的话,那么这个属性的值等于两端粒子的距离。弹簧约束将总是试着使两个粒子的距离等于这个属性的值。这个值必须大于0.
构造函数
SpringConstraint ()
public function SpringConstraint(p1:AbstractParticle, p2:AbstractParticle, stiffness:Number = 0.5, collidable:Boolean = false, rectHeight:Number = 1, rectScale:Number = 1, scaleToLength:Boolean = false)
参数:
p1:AbstractParticle — 约束所连接的第一个粒子。

p2:AbstractParticle — 约束所连接的第二个粒子。

stiffness:Number (default = 0.5) —弹簧的强度。有效值在0到1之间。低值的效果就像软弹簧,高值的效果如同硬弹簧。
collidable:Boolean (default = false) — 决定此约束是否接受碰撞检测。

rectHeight:Number (default = 1) —如果这个约束是可接受碰撞检测的,可碰撞的区域的高度可设置为像素值。高度和被链接的两个粒子的连线垂直。
rectScale:Number (default = 1) —如果这个约束是可接受碰撞检测的,可被碰撞的区域的缩放可被设置为一个0到1之间的值。这个缩放是两个被链接的粒子之间的距离的一个百分数。
scaleToLength:Boolean (default = false) —如果这个约束是可接受碰撞检测的并且这个值设为***e时,可接受碰撞的区域将随着两个粒子的距离而缩放。
方法
init ()方法
public override function init():void
建立弹簧约束的视觉呈现。当此弹簧约束的父组的实例被加到APEngine中、此弹簧约束的复合体被加到组中、次弹簧约束被加到复合体或组中的时候,这个方法会自动的被调用。
isConnectedTo () 方法
public function isConnectedTo(p:AbstractParticle):Boolean
如果传递给此函数的参数是被链接的两个粒子之一则返回***e。
参数  p:AbstractParticle
返回  Boolean
paint () 方法
public override function paint():void
这个约束的默认渲染方法。这个方法由APEngine.paint()自动的调用。如果你想要自定义渲染方法,你可以创建一个这个类的子类,并在子类中覆盖paint()方法。
setCollidable ()方法
public function setCollidable(b:Boolean, rectHeight:Number, rectScale:Number, scaleToLength:Boolean = false):void
参数:
b:Boolean

rectHeight:Number

rectScale:Number

scaleToLength:Boolean (default = false)
setDisplay ()方法
public function setDisplay(displayObject, offsetX:Number = 0, offsetY:Number = 0, rotation:Number = 0):void
当渲染这个约束时分配一个显示对象以备使用。
参数
displayObject

offsetX:Number (default = 0)

offsetY:Number (default = 0)

rotation:Number (default = 0)
————————————————————————————————————————————————————————————————————
Vector类
属性
x 属性
public var x:Number
y 属性
public var y:Number
构造函数
Vector () cons***ctor
public function Vector(px:Number = 0, py:Number = 0)
参数:
px:Number (default = 0)

py:Number (default = 0)
方法
copy () 方法
public function copy(v:Vector):void
参数:
v:Vector
cross () 方法
public function cross(v:Vector):Number
参数
v:Vector
返回:
Number
distance () 方法
public function distance(v:Vector):Number
参数:
v:Vector
返回
Number
divEquals ()方法
public function divEquals(s:Number):Vector
参数
s:Number
返回
Vector
dot () 方法
public function dot(v:Vector):Number
参数:
v:Vector
返回:Number
magnitude ()方法  
public function magnitude():Number
返回 :Number
minus () 方法
public function minus(v:Vector):Vector
参数:
v:Vector
返回
Vector
minusEquals ()方法  
public function minusEquals(v:Vector):Vector
参数:
v:Vector
参数
Vector
mult ()方法
public function mult(s:Number):Vector
参数:
s:Number
返回
Vector
multEquals () 方法
public function multEquals(s:Number):Vector
参数
s:Number
返回
Vector
normalize ()方法
public function normalize():Vector
返回
Vector
plus () 方法
public function plus(v:Vector):Vector
参数
v:Vector
返回
Vector
plusEquals () 方法  
public function plusEquals(v:Vector):Vector
参数
v:Vector
返回
Vector
setTo () 方法
public function setTo(px:Number, py:Number):void
参数
px:Number
py:Number
times () 方法
public function times(v:Vector):Vector
参数:
v:Vector
返回
Vector
toString () 方法
public function toString():String
放回
String
————————————————————————————————————————————————————————————————————
APEngine这是一个静态的类,所以里面的所用的属性和方法都是静态的。
属性:
constraintCollisionCycles属性
constraintCollisionCycles:int (读写)
决定在一个APEngine.step()中约束条件和位置更正的次数,这个参数能很好的增加系统的稳定性和阻止穿透现象,尤其是在约束和粒子比较复杂的情况中。这个数字越大,系统越稳定,当然消耗的资源也比较多。
此属性和constraintCycles属性的不同之处在于它在一个APEngine.step()中同时解决了Constraints和collisions。此属性的默认值是1.
constraintCycles属性
constraintCycles:int(读写)
此属性的默认值是0,和constraintCollisionCycles属性类似,不同之处在于它只解决约束问题。
container属性
container:DisplayObjectContainer(读写)
粒子和约束的painting方法默认的容器。如果你要用到内建的painting方法,你必须首先设置它。
damping属性
damping:Number(读写)
全局的阻力,值在0到1之间。值越大阻力越小,当值为一时,没有阻力。当值为0时,所有的粒子都不能运动了(因为阻力太大了)。默认值为1.
damping会减慢你的模拟速度使你的模拟更稳定。如果你发现你的模拟出现跑飞现象,试着更正damping的值。
方法:
addForce()方法
addForce(v:Vector):void
给系统中的所有粒子增加一个力。当用这个方法的时候,粒子的质量也会考虑在内,它在模拟系统中类似风的力是非常有效的。质量大的物理受这个力的影响将小于质量小的物体。注意:物体的尺寸不影响物体的物理行为。
参数:v:Vector——一个矢量,用来代表加入到系统中的力。
addGroup()方法
addGroup(g:Group):void
参数g:Group
addMalllessForce()方法
addMalllessForce(v:Vector):void
为系统中的所有粒子增加一个无质量的力,在用这个方法的时候,粒子的质量不考虑在内。用它来模拟类似于重力的力是非常有效的。
参数:v:Vector——一个矢量,用来代表加入到系统中的力
init()方法
init(dt:Number=0.25):void
初始化引擎,在你增加任何粒子和约束之前必须调用这个方法。
参数:默认值为1/4,经典的取值为1/3或1/4。这是引擎的时间间隔值。这个值和step()方法共同决定了模拟的速度。这个值越低,模拟的速度越低,但是更精确,这个值越高,模拟的速度也越快,但是不精确。注意:这个值只影响粒子所受的力,如果你没有加入力的话,这个值是无关紧要的。
paint()方法
paint():void
调用这个方法将会依次的调用粒子和约束的paint()方法。通常你要在主程序的循环中调用这个方法。
step()方法
step():void
引擎的主要函数,持续不断的调用这个函数才能使模拟不断的进行下去。这个方法被调用的频率越快,模拟的速度也越快。 【来源:互联网】
更多精彩教程,尽在web3D纳金网http://www.narkii.com/college/
分享到: QQ好友和群QQ好友和群 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
转播转播0 分享淘帖0 收藏收藏0 支持支持0 反对反对0
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

手机版|纳金网 ( 闽ICP备2021016425号-2/3

GMT+8, 2024-9-20 23:28 , Processed in 0.144906 second(s), 32 queries .

Powered by Discuz!-创意设计 X2.5

© 2008-2019 Narkii Inc.

回顶部