ExcelTip.Net留存知识帖 ---【注:附件之前被网盘供应商清空后,现已修复-现已修复-现已修复为本地下载!】
现在位置:首页 > E文精选 > Excel VBA > 动画3:控制和改变运动方向

动画3:控制和改变运动方向

作者:绿色风 分类: 时间:2022-08-17 浏览:219
楼主
amulee
圆点的运动轨迹我们可以通过一些方法来控制,来改变运动轨迹或者运动方向。
本次要讲解的就是实时改变运动方向的方法。

首先我们还是要创建一个散点图。创建散点图可以参照下贴:
动画2--抛物线和圆周运动动画 http://www.exceltip.net/thread-8150-1-1.html


这里,我们双击坐标轴进行如下设置:

 
然后再通过如下方法,将坐标轴隐藏

 
然后,再插入几个箭头,和图形框

 
然后再给几个箭头命名为MUP,MRight,MLeft,MDown。选中后直接在编辑栏里面修改后确认。

 
再给图形框设定为Stop

这样,准备工作就好了。然后我们来研究一下代码吧。

这里,我们要设定几个方向的运动方法。
我们设定两个变量Vx和Vy分别代表横向和纵向的速度。

由于是牵涉到两个方向的运动,对于代码方面,我们可以参照抛物线运动的做法,同时定义两个坐标。
  1. [A2] = [A2] + Vx * 0.01
  2. [B2] = [B2] + Vy * 0.01

这样,运动循环就很容易出来了,我们通过While的条件判断来限定圆点的运动范围。X和Y的坐标都在[0,50]内
  1. Do
  2.     [A2] = [A2] + Vx * 0.01
  3.     [B2] = [B2] + Vy * 0.01
  4.     t = Timer
  5.     Do While Timer - t < 0.01
  6.     Loop
  7.     DoEvents
  8. Loop While [A2] <= 50 And [A2] >= 0 And [B2] >= 0 And [B2] <= 50


Vx为正数时,就向右方运动,为负数时就向左方运动。Vy也是同样,正数时向上运动,负数时就向下运动。我们将运动方向设为Direction变量。那么通过Select Case语句就能够通过Vx和Vy的设定来设定运动方向。当停止的时候就来个END。
END语句能够终止VBA的运行,即宣告程序结束。
  1. Select Case Direction
  2.     Case "MUP"
  3.         Vy = 5
  4.         Vx = 0
  5.     Case "MRight"
  6.         Vy = 0
  7.         Vx = 5
  8.     Case "MDown"
  9.         Vy = -5
  10.         Vx = 0
  11.     Case "MLeft"
  12.         Vy = 0
  13.         Vx = -5
  14.     Case "Stop"
  15.         End
  16. End Select


我们将Sub定义两个参数,一个是速度,一个是方向。
  1. Sub Move(ByVal V0 As Double, ByVal Direction As String)


主程序很简单就能够完成。关键是如何添加各个箭头和Stop按钮的代码。
Excel提供了我们一个很好的东西,那就是Application.Caller。
这个东西的作用就是返回是谁引起的宏的运行,并且在不同情形下返回不同的值。
Caller 属性
调用进程返回值在单个单元格中输入的自定义函数代表该单元格的 Range 对象在单元格区域中作为数组公式的一部分的自定义函数代表该单元格区域的 Range 对象Auto_Open、 Auto_Close 、 Auto_Activate 或 Auto_Deactivate 宏以文本方式返回的文档名由 OnDoubleClickOnEntry 属性所设置的宏该宏所应用的图表对象标识符或单元格引用(若适用)的名称“工具”菜单中的“宏”对话框,或上述之外的其他调用者错误值 #REF!

那些按钮啊、图形所指定的宏就符合第四种情形。Excel判定为是按钮触发了宏的运行,就返回了所点击的对象的名称。那就是说点击Mup按钮的时候就返回MUp。

现在知道为什么那个Select语句要进行那样的情形设置了吧。

我们给这些图形,都指向一个宏。
  1. Sub Move_Click()
  2.     Move 5, Application.Caller
  3. End Sub


通过这个代码来调用Move过程,那个运动方向就是点击按钮的名称,就设定了不同的方向。

最后,我调试这个程序的时候发现了一个问题。当圆点运动到边缘之后就无法再向任何方向运动了。究其原因,原来是由于循环的条件设置了[0.50],而当执行代码后远点运动到边缘的时候,坐标是超过这个范围才停止运动的,这个时候我们再让它运动,它就会立即跳出循环。所以,我们再这个循环之前再设定一些代码,让圆点的坐标落在[0,50]内。
  1. If [A2] > 50 Then [A2] = 50
  2. If [A2] < 0 Then [A2] = 0
  3. If [B2] > 50 Then [B2] = 50
  4. If [B2] < 0 Then [B2] = 0


到此为止,代码结束。

再来看看动画,是不是我们可以随心所欲的控制了呢?
学到这里,我们已经具备了创建Excel动画甚至于游戏的基本技能了。


动画04——控制运动方向.rar
2楼
海洋之星
这个跟我的是能动的花瓣代码差不多
3楼
biaotiger1
Application.Caller

免责声明

有感于原ExcelTip.Net留存知识的价值及部分知识具有的时间限定性因素, 经与ExcelTip.Net站长Apolloh商议并征得其同意, 现将原属ExcelTip.Net的知识帖采集资料于本站点进行展示, 供有需要的人士查询使用,也慰缅曾经的论坛时代。 所示各个帖子的原作者如对版权有异议, 可与本人沟通提出,或于本站点留言,我们会尽快处理。 在此,感谢ExcelTip.Net站长Apolloh的支持,感谢本站点所有人**绿色风(QQ:79664738)**的支持与奉献,特此鸣谢!
------本人网名**KevinChengCW(QQ:1210618015)**原ExcelTip.Net总版主之一

评论列表
sitemap