- 浏览: 1449556 次
- 性别:
- 来自: 苏州
文章分类
- 全部博客 (564)
- 算法 (7)
- 流金岁月 (1)
- Javascript (30)
- actionscript (108)
- as3.0 game (14)
- flex (84)
- fms2 (27)
- 正则表达式 (7)
- 开源组件代码(as3.0) (1)
- Pv3d (13)
- Cairngorm (4)
- vbs (54)
- VB程序设计 (26)
- 计算机应用与维护 (4)
- 职场实用穿衣技巧 (3)
- 历史风云 (15)
- 淡泊明志,宁静致远 (12)
- 情感 (26)
- 杂谈 (41)
- 越南风 (14)
- DirectX (9)
- Dev-cpp (11)
- 回望百年 (2)
- 建站经验 (2)
- Python (24)
- 网络赚钱 (4)
- php (2)
- html (1)
- ob0短址网 (1)
- ob0.cn (1)
- wordpress (1)
- pandas logistic (1)
- haxe (1)
- opencv (1)
- 微信小程序 (3)
- vue (3)
- Flutter (1)
最新评论
-
GGGGeek:
第一个函数滚动监听不起作用,onPageScroll可以
微信小程序--搜索框滚动到顶部时悬浮 -
naomibyron:
解决办法:工具 -> 编译选项 -> 编译器 ...
dev-c++中编译含WINSOCK的代码出现错误的解决方法 -
haichuan11:
这个…… 代码不全真的是让人很憋屈的感觉啊
actionScript 3.0 图片裁剪及旋转 -
chenyw101:
老兄能留个QQ号吗?具体的我有些东西想请教下你
用VB制作网站登陆器 -
yantao1943:
貌似有点问题,只派发一次事件啊
使用ActionScript 2.0或ActionScript 3.0处理音频文件的提示点(cue
演示发现它已经沿着x,y合速度的方向移动了。是不是觉得很容易??这里我用的vx,vy都是5,也就是说合速度的方向是45度,当然你可以让vx,vy为不同的值,会有不同的速度也会沿不同的方向移动,如果反向,自然设置vx,vy为负值即可。
上面的学习如果你认为很容易,那下面这段相信对你也不会有问题,刚才我们说到当设置vx,vy都相同时,它是以45度的合速度方向运动的。虽然设置不同的值可以代表不同的方向。但这种方法很不科学。我们可以动用我们的数学知识,来让物体按我们指定的特定的角度移动。这里需要复习一下我们的数学知识。
(1) 弧度:弧度=角度*PI/180;
(2) 角度:角度=弧度*180/PI;
如果以指定的角度运动。那么这时的速度累加相当于沿着半径的方向。最终目的点是到达沿着半径方向的某一点。由于是合速度,我们需要定义一个统一个合速度以方便我们将x和y 轴上的速度分解出来为vx,vy。我们定义为speed;
那么在x轴方向上的速度应为:
vx=Math.cos(radians)*speed;
在y轴上的速度应为
vy=Math.sin(radians)*speed;
代码:
speed=10;
angle=15;
radians=angle*Math.PI/180;
onEnterFrame=function(){
vx=Math.cos(radians)*speed;
vy=Math.sin(radians)*speed;
my_mc._x+=vx;
my_mc._y+=vy;
}
通过演示你已经发现小球已经沿着15度的方向移动了。这样angle相当是一个接口参数,你可以任意的对小球的方向进行控制。
//.......2. 加速度
经过上面的学习已经对速度应用有了一些了解,下面我们看一下加速度。在物理中的加速度有一个公式如:vt=vo+at 在FLASH中应用基本上与些公式类似,只是省去了一些细节如时间。细分析时间并没有省去,而是通过时间轴来代替了。这里我们加速度为ax,那么在x轴上速度一般写成vx=vx+ax,简写成vx+=ax;我们把初速度设为0;
代码:
ax=0.2;
vx=0;
onEnterframe=function(){
vx+=ax;
my_mc._x+=vx;
}
通过演示我们发现小球已沿着合速度方向加速运行,现在问题又来了,如何使我们能按指定的角度加速运行呢。这个就当一个小作业吧。看你是否理解了它的应用。你可以结合前面的例子试一下。
//..............................................
3. 重力
重力实际上就是加速度,但它有一个特殊性是只做用在y轴上,这里我们把重力定义成grav,与上面的加速度类似。
代码:
grav=0.5
vy=0;
onEnterFrame=function(){
vy+=garv;
my_mc._y+=vy;
}
////..........................................................
4. 弹性
弹性,一般是指物体接触到到某个边界,所进行的回弹,在FLASH中,我们需要做的是设置好边界,以及物体回弹的方向。那么如何确定它回弹的方向呢,我们设定一个边界,当小球超出边界时小球回弹,也就是方向改变了。以x轴为例应为:vx*=-1; 实际上你可能发现它实际上就是 vx=-vx;
代码:
//设定边界
top=0;
left=0;
right=400;
bottom=300;
vx=10;
vy=10;
onEnterFram=function(){
my_mc._x+=vx;
my_mc._y+=vy;
//下面代码检测小球是否到达边界,如果已到边界,重设小球的正确做坐,并使其回弹,
if(my_mc._x+my_mc._width/2>right){
my_mc._x=right-my_mc._width/2;
vx*=-1;
}
if(my_mc._x-my_mc._width/2<left){
my_mc._x=left+mc_mc._width/2;
vx*=-1;
}
if(my_mc._y-my_mc._height/2<top){
my_mc._y=top+my_mc._height/2;
vy*=-1;
}
if(my_mc._y+my_mc._height/2>bottom){
my_mc._y=bottom-my_mc._height/2;
vy*=-1;
}
}
*注意:上面代码中的my_mc._x,my_mc._y的坐标都是指my_mc的中心点,也就是说my_mc的注册点在中心,如果你在制作过程中发现与本演示不同,那一定是你的my_mc注册点没有在中心上。
弹性中的能量损失
在上面的例子,小球在回弹时我们设定当碰到边界时直接回弹,也就是vx*=-1;并没有能量的损失,但在现实生活中,小球在回弹时要有一定的能量损失,其中还要有重力加速度的影响,通过上面的例子我们可以得出结论,当回弹速度设为1时无能量损失,其中的负号只是代表方向,当小于1时会产生能量损失,也就是我们通常说的摩擦,如:vx*=-0.8;同时不要忘了在现实生活小球还会受重力加速度的影响。
代码:
top=0;
left=0;
right=400;
bottom=300;
//设定重力加速度变量garv
garv=.5;
vx = 10;
vy = 10;
onEnterFrame = function () {
//y轴方向的加速度
vy+=garv;
my_mc._x += vx;
my_mc._y += vy;
if(my_mc._x+my_mc._width/2>right){
my_mc._x=right-my_mc._width/2;
vx*=-0.8;
}
if(my_mc._x-my_mc._width/2<left){
my_mc._x=left+my_mc._width/2;
vx*=-0.8;
}
if(my_mc._y-my_mc._height/2<top){
my_mc._y=top+my_mc._height/2;
vy*=-0.8;
}
if(my_mc._y+my_mc._height/2>bottom){
my_mc._y=bottom-my_mc._height/2;
vy*=-0.8;
}
};
//...............................................
5.摩擦力
摩擦力的应用相对比较简单,我们需要定义一个摩擦系数,通常它的值为小于1,然后将它与速度相乘,也就是前面在弹性时所提到的能量损失。
代码:
fraction=0.95;
vx=10;
vy=10;
onEnterFrame=function(){
vx*=fraction;
vy*=fraction;
my_mc._x+=vx;
my_mc._y+=vy;
}
///....................................................................................
拖动与抛
拖动与抛实际是与上面的例子的结合应用,这里只是说明如何与上面相结合使用。在本例中我们想要在拖动小球的小球停止运动,松开或抛出时小球继续运动,在制作之前,我们先看一下基础知识:
要点:拖动我们使用方法startDrag(),同时要禁止小球运动,当拖动时要注意小球的运动速度变化,松开时,使用方法stopDrag(),同时重置速度,然后小球继续运动。
代码:
top=0;
left=0;
right=400;
bottom=300;
garv=.5;
vx = 10;
vy = 10;
onEnterFrame = function () {
//设定如果没有拖动则小球正常进行带有能量损失的弹性运动
if(!dragging){
vy+=garv;
my_mc._x += vx;
my_mc._y += vy;
if(my_mc._x+my_mc._width/2>right){
my_mc._x=right-my_mc._width/2;
vx*=-0.8;
}
if(my_mc._x-my_mc._width/2<left){
my_mc._x=left+my_mc._width/2;
vx*=-0.8;
}
if(my_mc._y-my_mc._height/2<top){
my_mc._y=top+my_mc._height/2;
vy*=-0.8;
}
if(my_mc._y+my_mc._height/2>bottom){
my_mc._y=bottom-my_mc._height/2;
vy*=-0.8;
}
//如果有拖动,则此时速度发生了变化,需要记录下最后my_mc的位置和当前my_mc的位置,两者的差为当前的速度。
}else{
vx=my_mc._x-oldx;
vy=my_mc._y-oldy;
oldx=my_mc._x;
oldy=my_mc._y;
}
};
my_mc.onPress=function(){
this.startDrag();
dragging=true;
}
my_mc.onRelease=function(){
this.stopDrag();
dragging=false;
}
//........................................................................................
7.easing缓动
简单的easing方式,需要我们选择目的地,然后以摩擦的形式达到目的点。这就是easing.如果想要更复杂的easing方式,可以参看www.robertpenner.com,当然你也可以使用现在网站各种各样的类。或是使用mm自带的transition类或是tween类。
代码:
targetx = 200;
targety = 150;
onEnterFrame = function () {
dx=targetx-my_mc._x;
dy=targety-my_mc._y;
my_mc._x+=dx*.3;
my_mc._y+=dy*.3;
};
///...................................................................................
8.Spring弹簧
spring非常类似于easing,但它的效果比easing更cool。一般的方法为定义一个目标点,计算出到它的距离,加速度为距离与摩擦系数的积,同时还需要使用摩擦。
代码:
var targetx = 200;
var targety = 150;
fraction = .9;
vx = 0;
vy = 0;
onEnterFrame = function () {
if (!dragging) {
//起始点与目标地点的距离
dx = targetx-my_mc._x;
dy = targety-my_mc._y;
//加速度
vx += dx*.3;
vy += dy*.3;
//加入摩擦
vx *= fraction;
vy *= fraction;
my_mc._x += vx;
my_mc._y += vy;
}
};
my_mc.onPress = function() {
this.startDrag();
dragging = true;
};
my_mc.onRelease=function() {
this.stopDrag();
dragging = false;
};
//.........................................................................
spring 与鼠标相连
下面我们要对spring 进行一下简单的扩展,我们可以将目标地点设为光标的坐标值,同时可以使用drawing api用画线的方式将其相连起来。
代码:
var targetx = 200;
var targety = 150;
fraction = .9;
vx = 0;
vy = 0;
onEnterFrame = function () {
dx = _xmouse-my_mc._x;
dy = _ymouse-my_mc._y;
vx += dx*.3;
vy += dy*.3;
vx *= fraction;
vy *= fraction;
my_mc._x += vx;
my_mc._y += vy;
//画线与mouse相连
clear();
lineStyle(1,0,100);
moveTo(_xmouse,_ymouse);
lineTo(my_mc._x,my_mc._y);
};
现在我们在变通一下,小球在自然界中是有重力的。加上重力看看什么效果。一个小作业,你试一下。
//.........................................................................................
Spring 链
最后我们来一个稍微难一点的,是上面例子的一个扩展,如果你对上一个例子有了一定的理解,这个对你来说是不成问题的。上面的例子是跟随着光标,如果是链的话。那么第二个小球就应跟随第一个小球,依次类推。如果这个你难做出来。相信这种类型的菜单对你来说就不成问题了。
代码:
fraction = .7;
grav=20;
my_mc.vx = 0;
my_mc.vy = 0;
my_mc1.vx = 0;
my_mc1.vy = 0;
my_mc2.vx = 0;
my_mc2.vy = 0;
onEnterFrame = function () {
clear();
lineStyle(1, 0, 100);
moveTo(_xmouse, _ymouse);
spring(my_mc, _xmouse, _ymouse);
spring(my_mc1, my_mc._x, my_mc._y);
spring(my_mc2, my_mc1._x, my_mc1._y);
};
function spring(mc, x, y) {
dx = x-mc._x;
dy = y-mc._y;
mc.vx += dx*.3;
mc.vy += dy*.3;
mc.vy += grav;
mc.vx *= fraction;
mc.vy *= fraction;
mc._x += mc.vx;
mc._y += mc.vy;
lineTo(mc._x, mc._y);
}
////...............................................................................
距离
Distance=Math.sqrt((x2-x1)*(x2-x1) + (y2-y1)*(y2-y1));
发表评论
-
flash和flex针对不同的目的,提供了3种不同的坐标系
2009-06-24 10:05 2764全局的就是(stage级别的) ... -
网页游戏开发入门教程
2009-06-23 10:05 3710一、简单的程序 框架 ... -
Rectangle对象在游戏开发中的应用
2009-02-19 17:09 1387一直知道在flash.geos包里面有一个Rectangle对 ... -
Flash、Flex资源收集之十全大补
2008-09-12 11:55 3309断断续续收集了Flash、Flex相关的不少资源,但好多存着 ... -
简单区块寻路程序
2008-09-11 16:17 1206最近工作忙,没什么时间写新东西,翻点以前的东西出来,呵呵这是 ... -
车运动规则(基本)
2008-09-11 16:13 1099自己做的判定!大虾们就不用看了,只供新手参考!先看看效果: ... -
AS游戏设计常用数据结构
2008-06-15 19:29 1885------------------------- -
基于时间的碰撞检测,(速度再快都能检测得到)
2008-06-15 19:23 2623什么是基于时间的碰撞检测? 首先,了解一下,什么是基于 ... -
flash游戏开发中常用到的类
2008-06-15 19:21 1690flash游戏开发中常用到的类---------------- ... -
利用c++和flash联合写游戏服务器
2008-06-05 10:12 2662c++ flash都是人们耳熟能详的东西了 有没有想过自己动手 ... -
一些Flex开源项目的整理
2008-06-04 20:34 1341Adobe APIs 主要包含corelib, mappr, ... -
关于重力的一些疑问解答
2008-06-04 17:17 1099翻译文章,原文看这里该文章中的一些信息将会帮助你模拟一些跳跃和 ... -
AS3.0中的区块设计
2008-06-04 17:12 1652这篇文章主要是讲解如何基于AS3来制作一个区块游戏,但仍然保持 ...
相关推荐
"扇形面积计算公式详解与应用PPT.pptx" 扇形面积计算公式是数学和物理学中一个非常重要的概念,它广泛应用于建筑设计、工程测量、科学研究等领域。本文将详细解释扇形面积计算公式的基本概念、推导过程、应用场景、...
【大学物理公式详解】 在物理学中,理解和应用公式是至关重要的。以下是一些大学物理中的基本公式和概念的详尽解析: 1. **位置矢量**:位置矢量 描述了物体相对于参考点的位置,其在直角坐标系中表示为 。角位置...
答案将解释这些函数的性质、生成公式以及它们在特定问题中的应用。 3. **量子力学基础**:波函数的解析解,薛定谔方程的求解,如谐振子、自由粒子和无限深势阱等问题。解答会展示如何找到合适的本征态和本征值。 4...
这本“南京航空航天大学物理习题册详解”无疑是学生们复习和理解物理概念的重要参考资料。这份习题册包含了广泛的物理知识,涵盖了力学、电磁学、热学、光学等多个领域,旨在帮助学生深入理解和掌握物理学的基本原理...
根据提供的信息,我们可以了解到这份资料是关于东南大学第五版物理学教材的答案详解,主要涉及的是物理学领域的知识点。然而,由于给出的部分内容实际上并没有提供任何实质性的物理知识点或具体内容,因此我们将基于...
包括气体、热力学第一定律、热力学第二定律、多组分系统热力学及其在溶液中的应用、相平衡、化学平衡、统计热力学基础、电解质溶液、可逆电池的电动势及其应用、电解与极化作用、化学动力学基础(一)、化学动力学基础...
以下是根据该资源可能涵盖的一些主要物理概念和公式进行的详细解释: 一、力学部分 1. 直线运动:涵盖匀速直线运动、匀加速直线运动以及自由落体运动等,解析加速度、速度与位移之间的关系。 2. 牛顿三定律:阐述力...
《热力学&统计物理答案详解》是一份针对第四版教材的课后习题解答资源,以PDF格式提供,旨在帮助学习者深入理解和掌握热力学与统计物理的核心概念。热力学作为物理学的一个重要分支,主要研究物质系统在宏观尺度上的...
8. 微积分在物理中的应用:微积分是物理学的基础,积分在计算面积、体积和物理量的累积效应(如动量和能量)时不可或缺,导数则揭示了物理量的变化率和临界点。 9. 数学物理方法在量子力学中的应用:量子力学中的波...
在实际应用中,理解和解决物理光学的例题是提升专业技能的关键。以下将详细解析给定的一些例题,以便深入理解相关知识点。 1. 题目中提到的电磁波电场表达式为Ez = E0cos(kx - ωt + φ),这是一般平面电磁波的数学...
《基础物理上册答案详解》压缩包包含了多个与物理学基础理论相关的PDF文件,涵盖了从经典运动学到热力学、光学等多个重要领域。以下是这些章节的主要知识点的详细解释: 1. **第一章 矢量**:矢量是既有大小又有...
【大学物理模拟试卷详解】 大学物理是一门涵盖广泛、理论与实践并重的学科,它主要探讨自然界的基本物理规律,包括力学、热学、电磁学、光学和量子物理等核心领域。这份“大学物理模拟试卷”是教师精心设计的,旨在...
【功率详解】 功率是物理学中的一个关键概念,它表示做功的速率,即单位时间内完成的功。在八年级物理下册的学习中,功率是一个重要的知识点,它涉及到做功的基本要素、功的计算以及速度的理解。 一、做功的两个...
《应用数学基础课后详解》是一份非常宝贵的资源,它为学习应用数学基础,特别是数理方程和工程计算的学生提供了详尽的解答。这份PDF文档涵盖了课程中的关键概念、公式以及实例,帮助学生深入理解和掌握相关知识。 ...
多普勒频移是一个普遍的物理现象,它描述了波源与观察者之间相对运动时,观察者接收到的波频率...这些公式及理论不仅在物理学基础研究中有着重要地位,还在地球物理探测、遥感技术、天文观测等多个领域有着广泛的应用。
【知识点详解】 1. **速度公式**:在物理学中,速度是表示物体运动快慢的物理量,通常用v表示,单位是米每秒(m/s)或千米每小时(km/...在实际应用中,需要灵活运用这些公式进行计算,并结合实际情况做出合理的判断。
【高中物理公式详解】 在高中物理的学习中,掌握公式是至关重要的。以下是一些关键的物理学公式及其应用,包括力学、摩擦力、浮力、万有引力、电磁力以及运动学等多个方面。 1. **胡克定律**:描述弹性力与弹簧...
4-1 计算变力做功时,通常采用积分方法,此处为常力做功问题,直接应用公式即可。 4-3 漏水提水问题涉及到功的计算,考虑水桶和水的质量随高度变化,通过平衡力和功的定义来求解。 4-5 本题结合了自由落体和平面...
解析过程中,既有对物理公式的应用,也有对数学运算技巧的使用,更体现了对于物理问题综合分析和解决的能力。这样的习题能够帮助学生理解和掌握力学中的基本概念和方法,从而为解决更复杂的物理问题打下坚实的基础。