- 1、本文档共14页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
边界和摩擦力
第六章 边界和摩擦力
到目前为止,我们已经学会了如何在影片中绘制图形,并且通过施加外力使影片运动起来。然而,在这些例子中也许会遇到这样的烦恼:物体移动到屏幕外后就不到了。如果在某个角度上运动得过快,那么就没有办法再让物体退回来,只能选择重新运行影片。
我们常常忽视边界的存在如:墙和屋顶,最平常的就是地面。通常在制作太空模拟时,要用环境边界作为一道屏障,保证物体能够在一个可见的范围内运动。
另一个常被忽略的问题是,所处的环境如何改变物体的运动。惯性一词是用来形容物体在空间中穿梭,并保持以同样的方向及速度运动,只有对其施加外力,才会使它的运动发生改变。改变物体速度向量的力,可能是摩擦力的一种——甚至可以是空气的阻力。目前,我们已经能够模拟真空环境下的物体运动了,但是大家一定还想模拟真实环境下的物体运动。
那么本章就要解决前面这两个问题。首先,学习边界环境下物体的运动,然后学习如何模拟阻力,Lets go。
6.1环境边界
先来学习边界的设置,就像我们的日常活动一样:开运动会,做某项工作,盖房子等,这里边界是指为这项活动保留的活动空间。意思是“我只关心发生在这个范围内的事情,如果超出了这个范围,就不再关注它了。”
当物体超出了这个范围后,我们可以对它进行一些操作。可以再把它移回来,或把它从关注的对象中移除,另一种选择是跟随它。只要物体是运动的,那么它就有机会离开这个范围。当物体离开后,我们可以选择忘记它,或将它移动回来,或跟随它。我们将介绍前两种方法,不过先要确定边界的位置,再学习如何定义边界。
6.1.1设置边界
通常,边界就是一个矩形。从最简单的例子开始——基于舞台大小的边界,在 AS 3 中,舞台由一个名为 stage 的属性表示,它是每个显示对象的一部分。所以在文档类(继承自 MovieClip 或 Sprite)中,我们可以直接使用这个属性访问舞台及舞台的相关属性。如果在播放器窗口改变大小后希望舞台的尺寸与播放器尺寸相匹配的话,就应该设置这两个属性:
stage.align = StageAlign.TOP_LEFT;
stage.scaleMode = StageScaleMode.NO_SCALE;
请注意,还需要导入 flash.display.StageAlign 和 flash.display.StageScaleMode 这两个类。这样一来,影片的左上边界将为零,而右下边界将为 stage.stageWidth 和stage.stageHeight。可将它们保存为变量,如下:
private var left:Number = 0;
private var top:Number = 0;
private var right:Number = stage.stageWidth;
private var bottom:Number = stage.stageHeight;
如果使用变量保存设置的话,那么舞台大小的改变将不会对这些变量产生影响。如果要使用一个固定的区域作为边界的话,这样做是非常合适的。
然而,如果使用整个舞台区域作边界的话,那么即使舞台大小发生了改变,只要在代码中直接调用 stage.stageWidth 和 stage.stageHeight 就可以了。
比如, 我们可以为对象创建一个居住的“房间”,在这个例子中, 边界可以是 top = 100, bottom = 300, left = 50, right = 400。
OK,边界已经有了,用它们能做什么呢?判断所有移动的对象,看它们是否仍在这个空间内,这里可以使用 if 语句,简化的样式如下:
if(ball.x stage.stageWidth) {
// do something
} else if(ball.x 0) {
// do something
}
if(ball.y stage.stageHeight) {
// do something
} else if(ball.y 0) {
// do something
}
使用 if 和 else 语句判断边界,如果小球 x 坐标大于右边界,就意味着它超出了右边界。但不可能同时超出左边界,所以不需要再用一条 if 语句进行判断。因此,只需要在第一个 if 语句失败后再判断左边边界即可,顶部和底部也是如此。然而, 物体有可能在 x,y轴上同时超出边界,所以要把这两个判断语句分开。如果物体出界后,应该对它们执行什么样的操作呢?答案有四种:
将对象移除;
重置到舞台上,像生成一个新对象一样(重置对象);
重置到舞台上,将同一个对象放置在不同位置;
将其反弹回去。
我们从最简单的移除对象开始。
6.1
文档评论(0)