Python等距游戏引擎。
项目描述
<> <> I S O M Y R <> A Python Isometric Game Engine
简介
is-so-myr: (n) 指具有相同前景和背景尺寸的一个或多个场景,它们具有不同的属性,并且可以在几个游戏世界中存在一定的时间。
Isomyr是基于Pygame的等距游戏引擎,用Python编写。它是Isotope游戏引擎的分支,为构建具有拾取和放下对象、跳跃到平台并在投影3D等距环境中移动的角色等距图形游戏提供了框架。
功能
角色:用于玩家和怪物游戏对象。具有面向、重力、碰撞响应、跳跃、自动化和库存的功能。
多帧动画和图像。
简单的速度、碰撞和触摸检测物理模拟。
所有对象都可以使用Python进行自定义和扩展。
依赖关系
Isomyr目前有以下依赖项
pygame - http://www.pygame.org/download.shtml
NumPy - https://scipy.org.cn/Download
安装
开发
如果您想为txSpore开发或使用我们正在开发的最新代码,您可以从源代码安装。您需要安装bzr,然后只需执行以下操作
$ bzr branch lp:isomyr $ cd isomyr $ sudo python setup.py install
简单安装
您可以使用setuptools的easy_install脚本来在您的系统中安装txSpore
$ sudo easy_install Isomyr
手动下载
您可以通过访问以下URL从Python包索引手动下载源代码包
您需要解包和解压缩源代码,进入源代码目录,然后您可以执行通常的操作
$ sudo python setup.py install
检查源代码
安装后,您可以从顶级源代码目录执行以下操作来测试源代码
$ ./admin/testDocs.py $ ./admin/testRunner.py
这将运行测试套件,并报告任何单元测试的成功和失败。
使用
示例
在 Isomyr 的顶层源目录中,有一个示例目录。其中包含以下内容:
来自 Isotope 的原始示例,已移植以与 Isomyr 一起使用。这是一个两间房的世界,玩家可以拿起两个物品并跳上床。
一个全新的开放式地面示例,有14个“房间”,代表外部环境。此示例仅展示了在许多相连且无墙的景象之间移动。
检查示例目录中的每个 Python 文件是了解如何使用 Isomyr 创建游戏的最佳方式。
示例可以从顶层源目录运行,例如
$ python examples/TwoRooms/tworooms.py
您可以使用箭头键导航玩家,使用 <SPACE> 跳跃,使用 <ENTER> 使用。
已知错误
当增加玩家速度时,他们的跳跃高度也会增加。当它足够高时,玩家可以跳出场景。这可能需要房间上有天花板……但还应该检查跳跃物理。
待办事项
杂项
添加一个用于管理精灵的包装器(相关的位置向量、大小等;参见 isometric.py 中的代码)。
添加对 ConfigParser 引擎/游戏配置的支持。
添加一个仅绘制墙的沙盒示例。
添加对所有操作的记录(以便在控制台中轻松调试)。
提供一个配置机制,允许游戏开发者定义标题栏图像。
定位所有 XXX 注释,修复它们,并删除它们。
将所有 some_thing 方法名和变量名重命名为 someThing。
新示例
可检查的对象。
可爆炸的对象。
程序生成的背景图像/网格等。
一个包含多种地形类型的“房间”,在它们上面行走可以演示由地形决定的玩家速度分数。
一个时间演示,在不同房间中时间流逝不同(门将通往具有不同日历的其他世界的传送门)。
文档
更新 USAGE 以包含关于教程的信息(并将教程部分从 README 中移出)。
更新 USAGE 以包含交互式提示示例。
更新 USAGE 以包含有关单元测试的信息。
更新文档以包含关于 Isomyr 所使用的视角比的信息。
添加单元测试。
将 FAQ 从 README 中移出并放入文档中。
DirectedAnimatedSkin
将 getImage 分离成单独的方法。
为每个方向给出一个方法名。
世界构建
对于新的 Thing 对象,确保如果一个有子对象的对象被添加到世界中,所有子对象都正确地设置了其世界属性。
添加支持解析 ASCII 地图以生成房间。
玩家微调
当玩家捡起物品时,应该重新设置物品的父对象(新父对象 = 玩家)。
当玩家丢弃物品时,应该重新设置物品的父对象(新父对象 = 场景)。
对场景、玩家等的更改应导致场景刷新。引擎不需要检查单个对象的变化。
添加一个对象历史跟踪机制
玩家感觉目前在引擎中发生……这不是一个好的抽象。玩家检查应该在世界的背景下进行(或更实际的是,在给定场景的背景下),这是玩家与对象之间的交互。
引擎改进
Engine.start 指的是 pygame.time.get_ticks – 让我们在我们自己的 gametime 实例中为这个添加一个包装器。
世界相对时间属于世界,但 gametime 属于引擎 – 将它移回那里。
添加一个用于从世界获取文本数据的面板(阅读描述、与 NPC 交谈、叙述等)。
可能需要检查常规视图和信息面板,考虑到游戏 GUI 正在开发中……需要考虑如何使其可扩展和可用,因为未来的功能将影响布局。
可能需要将视图从引擎模块中提取出来并放到其他地方。
创建一个新的 gui 子包,包含 view.py、title.py、inventory.py、textarea.py 模块?
还是先做一个 gui/layout.py 模块?
为没有皮肤的对象提供默认皮肤。可能只是很多灰色,上面有网格(间距为对象的基本单位)。
定义以下数学关系
玩家角色大小和场景边界
背景大小/位置和场景边界
允许透视比可配置。(原型在沙盒中)
编写一个地板/网格生成实用函数。(原型在沙盒中)
允许在运行时控制网格元素(例如,动态更改瓷砖颜色)。
多皮肤支持
添加对对象的皮肤支持,这些皮肤将根据环境因素切换(例如,破碎的窗户、跛行的玩家、坐着的玩家)。
物理
模块组织
宇宙需要成为一个子包
universe/world.py, universe/weather.py, universe/universe.py, universe/time.py, universe/sky.py(月亮、流星、彗星、星星)
时间
在全局实例上添加本地游戏时间跟踪
创建可配置的日历对象
每个世界实例化时都应该带有日历,并可以选择传递一个实例
世界需要定义轴倾角、白天长度、年长度
场景需要指示地球上的位置,以便确定日照时间;它们还需要指示开始季节(一年中的时间)和一天的开始时间
天气
大气类型
太阳与行星的距离
世界需要定义平均全球温度
根据这个,需要根据各种纬度计算高低温度
同样对于季节,考虑轴倾角
基于纬度、季节、全球温度、轴倾角等,预先定义天气条件(以及从一种天气类型到另一种天气类型的允许转换)
行星体
太阳类型,光的颜色
可配置的月亮数量
月亮的质量/可见性
每个月亮发出的光亮水平
可见流星活动的规律性
世界表面的运动
世界需要定义质量,以便计算重力、下落速度、物体的重量等
物体也需要指示它们的质量
在视觉上,运动可以在户外和室内场景中进行,但也可以在俯视图地图级别上进行,允许以交互和视觉方式穿越大距离
添加对分数速度的支持。
这似乎不可能使用当前的等距变换,因为它使用位移位。
为下落速度添加重力乘数(这适用于世界实例)。
这会影响下落速度以及表面穿越速度
这会影响物体的重量。
添加地形穿越修正器(增强玩家速度)…例如,铺路、沙子、泥泞、水。
允许玩家拉动物体。
推动和拉动物体应该影响玩家速度(取决于物体的重量以及它们被推动或拉动的表面)。这将需要分数速度值。
复杂交互
关于天气模拟的想法激发了一个新的想法:为各种世界或场景变化注册事件。例如,一个NPC农民可以订阅天气。天气转换可以调用 notify(WeatherChange(last, current)),如果转换被定义为对作物有害(雾->雨很酷,干旱->暴雨很糟糕,任何 hail 都很糟糕等),那么NPC农民可以戏剧性地表现,匆忙离开酒馆等。
网络支持
支持多个服务器以进行负载均衡。
使用 RabbitMQ 进行消息交换。
请使用 txAMQP 作为客户端代码。
变更
从 Isotope 1.0 到 Isomyr 0.1
重构游戏对象类以提高抽象性。
添加宇宙和世界对象的抽象,并重构世界与场景之间的关系。
添加了基于 Zope 3 事件系统的事件/处理系统,用于抽象对象及其环境之间的交互。
将慢速向量数学替换为 Numpy 向量数学。
将 GUI 代码重构为独立的模块。
从 Isotope 0.9 到 1.0
根据 Twisted 编码标准(增强 PEP-8 合规性)清理代码;删除了未使用和冗余的代码。
重构蒙皮代码以提高游戏创建工作流程。
添加了世界对象的抽象,并重构了游戏组件之间的关系(例如,玩家到环境)。
改进了对象速度的实现。
开始添加单元测试。
添加了一个“开放地面”示例游戏。
Isotope 1.0 之前
未知。
项目详情
Isomyr-0.1.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 24fccc9c57470e3a49bbc6040ad1a340b8ac94fe6f983500778bada39a965542 |
|
MD5 | a495eefae0a1b8532c83c9616f506934 |
|
BLAKE2b-256 | b19258cc9a355dac976e0df9f789b802c2674fa2a98ed709ff93eb8e8ecefcba |