跳转到主要内容

Python等距游戏引擎。

项目描述

   <>
<>     I S O M Y R
   <>

A Python Isometric Game Engine

简介

is-so-myr: (n) 指具有相同前景和背景尺寸的一个或多个场景,它们具有不同的属性,并且可以在几个游戏世界中存在一定的时间。

Isomyr是基于Pygame的等距游戏引擎,用Python编写。它是Isotope游戏引擎的分支,为构建具有拾取和放下对象、跳跃到平台并在投影3D等距环境中移动的角色等距图形游戏提供了框架。

功能

  • 角色:用于玩家和怪物游戏对象。具有面向、重力、碰撞响应、跳跃、自动化和库存的功能。

  • 多帧动画和图像。

  • 简单的速度、碰撞和触摸检测物理模拟。

  • 所有对象都可以使用Python进行自定义和扩展。

依赖关系

Isomyr目前有以下依赖项

安装

开发

如果您想为txSpore开发或使用我们正在开发的最新代码,您可以从源代码安装。您需要安装bzr,然后只需执行以下操作

$ bzr branch lp:isomyr
$ cd isomyr
$ sudo python setup.py install

简单安装

您可以使用setuptools的easy_install脚本来在您的系统中安装txSpore

$ sudo easy_install Isomyr

手动下载

您可以通过访问以下URL从Python包索引手动下载源代码包

http://pypi.python.org/pypi/Isomyr/

您需要解包和解压缩源代码,进入源代码目录,然后您可以执行通常的操作

$ 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 (3.0 MB 查看哈希值)

上传时间 源代码

由以下支持