16.2.1 使用 switch 函数

使用switch函数创建动态动画
本文介绍了如何利用switch函数在F#中创建动态动画,通过事件触发改变动画的行为,实现动画速度随用户交互动态调整的功能。

16.2.1 使用 switch 函数

我们首先来看这个示例,然后,再描述 switch 函数的实现。这里是它的类型,对于我们理解它,这是一个良好的开端:

val switch : Behavior<'T> -> IObservable<Behavior<'T>> -> Behavior<'T>

这个函数的结果是一个行为,表示随时间而变化的 'T 值。这意味着,这个函数以某种方式构造了一个行为,使用前两个参数值。第一个参数表示一个初始行为。在事件发生之前,返回的行为与作为第一个参数提供的将是一样的。

最有趣的方面是第二个参数,它是一个事件,携带 Behavior<'T> 类型的值。这意味着,每当触发事件时,它会产生可以使用的新行为,而不是以前(或初始)的行为。每当事件发生时,switch 函数(在幕后)将替换这个行为,将返回从事件中获得的行为。你可能会想,携带行为的事件是值,听起来有点复杂。如果我们想要从零开始,建立这样的事件,的确会棘手,但是,我们总是可以通过组合一些简单的值,创建一个复杂的值。

现在,我们知道 switch 函数要做什么了,让我们尝试使用它。清单 16.7 首先创建一个简单的、旋转的圆,类似于我们在第 15 章中看到的。然后,构造一个事件,当用户在窗体上单击时,会被触发,它携带一个新的行为:相同的动画,只是运行得更快。最后,它使用 switch 函数构建一个行为,每次单击时更改。

Listing 16.7 Animation with changing speed (F#)

let af = new AnimationForm(ClientSize = Size(400, 400), Visible=true)

let greenCircle = circle (forever Brushes.OliveDrab) 100.0f.forever
let rotatingCircle = rotate 100.0f 1.0f greenCircle

let circleEvent =
af.Click
|> Observable.map (always 0.1f)
|> Observable.scan (+) 0.0f
|> Observable.map (fun x -> faster x rotatingCircle)

let init = faster 0.0f rotatingCircle
af.Animation <- switch init circleEvent

清单 16.7 首先创建一个标准的行为 rotatingCircle,表示动画,是恒速旋转的、绿色圆圈。下一步,它构造了产生新的行为事件。我们用了计数点击按钮时所做的同样技巧,创建一个将产生指定速度的事件,每次单击时,递增速度。最后,在流操作中调用 Observable.map,把携带速度的事件转换成携带行为的事件。它改变了原始旋转圆速度,通过每次调用 faster 函数,新的速度作为第一个参数值。

一旦我们有了这个事件,就可以最后使用 switch 函数。首先,创建一个初始行为,是旋转速度设置为零的圆。然后,使用这个行为和前面声明的事件,创建最终的动画。图 16.3 显示最后运动中的动画,左边是 3 次单击的结果,右边是是 13 次单击的结果。

image

图 16.3 两个窗体显示运行中动画,鼠标单击几次后,速度不同

由于一等事件和行为的组合,就可以用完全声明的方式,写出很有趣的动画。现在,是时候来看一下 switch 函数的实现了,它使一切都成为可能。

### 安装指南 VMware Workstation 16.2.1 的安装过程相对直接。首先,需要下载安装包文件,通常名为 `VMware-workstation-full-16.2.1-18811642.exe`。下载完成后,只需双击运行该安装包文件,并按照屏幕上的提示进行操作即可完成安装。安装过程中,用户可以选择安装路径、是否创建桌面快捷方式等选项[^2]。 ### 下载地址 要下载 VMware Workstation 16.2.1,可以访问 VMware 的官方网站或者查找可信的第三方网站提供的链接。由于版权问题,建议通过官方渠道获取软件,以确保安全性和合法性。在官网上,可能需要登录账户或注册后才能下载[^2]。 ### 使用教程 #### 网络配置 为了使虚拟机能够访问外部网络并拥有固定的IP地址,可以通过以下步骤进行配置: 1. 打开 VMware Workstation,选择已有的虚拟机或新建一个。 2. 进入虚拟机设置界面,找到网络适配器选项。 3. 将网络连接模式更改为“桥接模式”,这样虚拟机会像物理机一样在网络中获得一个独立的IP地址。 4. 在虚拟机操作系统内部,手动设置静态IP地址、子网掩码、默认网关和DNS服务器信息,确保这些参数与宿主机所在的网络相匹配[^1]。 #### 安装 VMware Tools VMware Tools 是一组用于增强虚拟机性能和用户体验的工具集。安装方法如下: 1. 启动虚拟机。 2. 在 VMware Workstation 的菜单栏中,点击 “虚拟机” -> “安装 VMware Tools”。 3. 虚拟机会自动挂载 VMware Tools 的安装光盘镜像。 4. 根据所使用的客户操作系统,运行相应的安装程序来完成安装过程[^1]。 #### 主机与虚拟机资源共享 实现主机与虚拟机之间的资源高效共享,可以采取以下措施: - **共享文件夹**:在虚拟机设置中启用共享文件夹功能,指定主机上的某个目录作为共享文件夹,然后在虚拟机内通过特定的路径(如 `/mnt/hgfs/`)访问这些文件。 - **拖放功能**:启用拖放功能允许用户直接从主机拖拽文件到虚拟机窗口内,反之亦然。 - **剪贴板共享**:开启剪贴板共享可以让主机和虚拟机之间复制粘贴文本内容变得简单快捷[^1]。 #### 时间同步 保持主机与虚拟机之间的时间一致对于某些应用来说非常重要。可以通过修改虚拟机的 `.vmx` 配置文件来实现这一点,添加或修改以下行: ```ini tools.syncTime = "TRUE" time.synchronize.continue = "TRUE" time.synchronize.restore = "TRUE" time.synchronize.resume.disk = "TRUE" time.synchronize.shrink = "TRUE" time.synchronize.tools.startup = "TRUE" ``` 保存更改后重启虚拟机,VMware Tools 会负责处理时间同步工作[^1]。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值