65.9K
CodeProject 正在变化。 阅读更多。
Home

为囊性纤维化治疗开发游戏 – Fizzyo入门

emptyStarIconemptyStarIconemptyStarIconemptyStarIconemptyStarIcon

0/5 (0投票)

2017年5月9日

CPOL

8分钟阅读

viewsIcon

10589

为囊性纤维化治疗开发游戏 – Fizzyo入门

最近的一篇文章中,我谈到了伦敦的 ICHealthHack 活动,许多医学生齐聚一堂,旨在赢得奖项,并努力让患有囊性纤维化的儿童在进行日常治疗锻炼时生活得更轻松,或者至少更有趣。

好吧,乐趣从未停止,许多学生继续推进他们的项目,以实现他们的目标并真正做出改变,现在你也可以了。


什么是囊性纤维化?

Image result for cystic fibrosis logo

囊性纤维化(CF)是一种遗传性疾病,在英国影响超过 10,800 人,其影响范围相当广泛。患有 CF 的人最突出的问题是呼吸。粘液在肺部积聚,导致慢性感染,这意味着患有囊性纤维化的人呼吸功能减退,并且每天必须花费数小时进行物理治疗和雾化治疗。病情加重(健康突然恶化,通常由于感染)可能导致频繁住院数周。

此外,他们的胰腺会被粘液堵塞,消化食物所需的酶无法到达胃部。患有囊性纤维化的人通常每天需要服用 50 多片药丸来帮助消化食物和控制呼吸道症状。

您可以在 CF 网站上阅读更多关于囊性纤维化的信息,其中包含更详细的内容。

CF 的持续治疗漫长、费力且毫无乐趣,需要数小时重复的锻炼或治疗,尤其是对儿童而言,这非常、非常、非常、非常枯燥。


治疗和设备

当前正在解决的具体治疗方法集中在气道清除,这要求患者

  • 用力吹入设备,直到完全呼气
  • 暂停呼吸
  • 重复约 6 次
  • 停止并进行类似咳嗽的锻炼
  • 再次重复所有这些,持续约 30 分钟或更长时间。大约 8 次。

患者需要专注于呼吸,不要过度劳累,并确保充分利用其肺活量(请记住,对于 CF 患者而言,这可能会大大降低)。这非常重复,需要每天完成几次,您可以想象这有多么枯燥。一些患者使用其他方法,例如通过吸管吹入一碗水,达到相同的效果。

Airway Clearance Devices

Fizzyo 设备应运而生,它连接到任何一种气道清除设备上,以收集患者的呼吸流量,并(目前)提供一个按钮用于额外的互动。

要获得此类设备批准用于医疗用途,并确保其每次使用都无细菌和感染源,允许在气道设备和 Fizzyo 控制器之间进行清洁或使用易于更换的部件,这涉及许多障碍。

Fizzyo 设备的目标是双重的

  1. 收集患者呼吸模式的数据。这可以提供更准确的治疗信息,并提供潜在感染或呼吸困难的早期预警。这有助于确保患者付出足够的努力来管理病情。
  2. 为游戏提供输入,使开发者能够构建更具趣味性和吸引力的治疗体验。

两者都同样重要,可以提高患者的生活质量,减轻治疗负担,并及早发现任何可能需要某种干预或治疗改变的问题。


我如何提供帮助?

Image result for open source contribution

IChealthHack 活动的目的不是真正制作几个游戏,而是建立一个基础,从中可以诞生许多项目。整个项目,从硬件、固件、软件甚至游戏,都是开源的。这样,每个人都可以从之前的经验中受益,我们也可以相互学习。

Fizzyo 项目及其 GitHub 存储库由此诞生,您可以在这里找到:

https://github.com/Fizzyo

在存储库中,您将找到包含以下内容的独立项目:

  • 数据架构

    概述 Fizzyo 项目的端到端计划和信息。从数据科学运动、后端服务架构、服务集成到仪表板。

  • 固件

    Fizzyo 设备固件的源代码和计划。一旦 Fizzyo 设备通过了医疗设备测试(这是一项漫长而昂贵的任务),这些将被提供。

  • 硬件

    Fizzyo 设备当前和未来硬件的所有计划和设计。一旦 Fizzyo 设备通过了医疗设备测试,这些将被提供。

  • 游戏

    目前,这是主要的存储库,分为 3 个部分。

    • Fizzyo - Fizzyo 库的当前框架库和项目。目前为 Unity 和 Monogame 开发提供了 2 个库。
    • 示例游戏 - 使用上述库的 Unity 和 MonoGame 中的一些简单项目。
    • 游戏

所有可用和可获得的东西都已上传到网站,稍后将进一步发展,并欢迎在任何阶段进行贡献,例如:

  • 构建您自己的游戏
  • 为更多游戏引擎/框架添加新的 Fizzyo 库
  • 扩展 Fizzyo 功能以添加更多功能(已有移动设备和其他传感器输入的计划)

入门

好了,所有背景信息都已交代清楚,现在进入正题,您如何参与进来,开始构建改善生活的体验。

挑战?目前您只有这些最小的输入!

  • 单个 X 轴。提供“0.2 到 + 1”的值 - 患者的呼吸模式
  • 单个按钮

您可以尝试添加更多内容,但请记住,重点是治疗,游戏不应分散治疗的注意力。已经建成的一些示例包括:

  • 一个喷气背包游戏,玩家吹气以保持飞行员在空中飞行,躲避障碍物。

    image

  • 一个收集游戏,玩家通过呼吸为飞船充电,使其能够移动。

    image

  • 一个无尽跑酷平台游戏,玩家通过呼吸加速角色,通过按钮跳跃。对于“良好”的呼吸周期可以获得奖励分数。

    image

使用 Unity 或 MonoGame 中的 Fizzyo 库非常容易,使用该库的一个巨大好处是它还包含录制的数据,因此您甚至不需要实际的 Fizzyo 设备即可开始。或者,如果您愿意,也可以使用普通的 X 轴和按钮 1 输入并正常模拟它们。

Unity 中 Fizzyo 的入门

image

在 Unity 中,您会获得一个预构建的资源包,可以从此处的项目导入

FizzyoDevice.unitypackage

或者,您可以从 Games 存储库获取源文件。

导入后,您的项目中将有一个名为“FizzyoDevice”的新文件夹,其中包含 Fizzyo 项目的所有脚本,包括一些用于分析患者呼吸的辅助类。

要开始使用 Fizzyo 控制器,只需将其添加到场景中的一个 GameObject 并进行相应配置即可。

image

您可以在此处配置

  • 游戏是使用录制数据还是来自 FizzyoDevice 的实时数据(便于测试)
  • 录制的数据是循环播放还是只运行一次。
  • 录制的数据文件(资源包中包含 3 个文件,分别代表良好/高呼/低呼呼吸周期)。

配置好设备控制器后,您只需在代码中按如下方式访问输入:

//get the pressure value from our fizzyo device class:
//  *  Uses logged pressure data if useRecordedData in the editor instance is set to true.
//  *  Direct from sensor if useRecordedData in the editor instance is false
float pressure = Fizzyo.FizzyoDevice.Instance().Pressure();

使用压力值作为控制游戏的输入,其值会随着患者向设备吹气而波动。

您也可以按如下方式访问设备上的按钮:

Fizzyo.FizzyoDevice.Instance().ButtonDown()

 

有关更多详细信息,请参阅此处的 GitHub 页面上的自述文件。

MonoGame 中 Fizzyo 的入门

image

在 MonoGame 中,Fizzyo 设备代码被打包成一个漂亮的库,供您的项目引用,可以从这里下载:

https://github.com/Fizzyo/Games/tree/master/Fizzyo/Fizzyo-MonoGame/Fizzyo-Library

(我一直在考虑也提供该库的 NuGet 包,但还没有做到。)

目前,您只需要下载该库并在您的 MonoGame 游戏项目中引用它,如下所示:

image

项目已添加并引用后,您需要将 InputStateFizzyoDevice 服务添加到您的游戏中,如下所示:

var inputState = new InputState(this);
Services.AddService(typeof(InputState), inputState);
var fizzyoDevice = new FizzyoDevice(this);
fizzyo.useRecordedData = true; // Change this value to use actual values instead of recorded data
Services.AddService(typeof(FizzyoDevice), fizzyoDevice);

然后在游戏更新循环中确保这些控件已更新,如下所示:

inputstate.Update(gameTime);
fizzyoDevice.Update(gameTime);

最后,在代码中访问控件的方式与在 Unity 中的使用方式非常相似,如下所示:

var fizzyoDevice = (FizzyoDevice)game.Services.GetService(typeof(FizzyoDevice));
//(bool) Will return if the Fizzyo Device button is pressed or not.
bool buttonPresed = FizzyoDevice.ButtonDown();
//(float) returns breath strength from (-1 – 1) with 0 being not breathing, **> 
//0.7** blowing or breathing out hard and **< -0.5** breathing in hard
float pressure = FizzyoDevice.Pressure();

有关这些实现的更多详细信息和示例,请参阅此处的 GitHub 页面上的示例项目。

所有这些实现的完整详细信息和示例都包含在 Games GitHub 网站的示例项目中。


参与进来!

Image result for kids fun

这确实是一个非常有意义的事业,值得参与。它还带来了挑战,即您能用如此少的输入实现什么,以后会添加更多内容,因为这仅仅是旅程的开始。

尽您所能贡献力量,这不仅仅意味着构建游戏,最重要的是,该项目渴求想法。

  • 捕捉数据的新方法
  • 项目附加组件(一个团队建议 3D 打印额外的支架/设备,也许用来安装手机?)
  • 分析或捕捉数据的新方法
  • 通过为这些引擎构建 Fizzyo 库,为更多游戏引擎/框架添加内容,并将其发布到 GitHub。
  • 在其他游戏引擎/框架中重用库/代码,并发布更多示例/游戏。
  • 当然,还有游戏。您能构建什么来让治疗变得有趣?

如果您对该项目有任何疑问或问题,请加入 GitHub 网站上的讨论,或者联系我,我将把您与相关负责人联系起来!

© . All rights reserved.