一个python等轴测游戏引擎。

Isomyr的Python项目详细描述


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

A Python Isometric Game Engine

Introduction

i-so-myr:(n)在 前景和背景,具有不同的属性,可以存在于任何 在一段可测量的时间内的几个游戏世界。

isomyr是一个基于pygame的等距游戏引擎,用python编写。一个 同位素游戏引擎的叉子,它为构造 等距图形游戏与演员谁可以拿起和放下物体,跳到 在投影的三维等轴测环境中移动。

Features

  • 演员:用于玩家和怪物的游戏对象。能够面对,重力, 碰撞响应,跳跃,自动化和库存。
  • 多帧动画和图像。
  • 速度、碰撞和触摸检测的简单物理模拟。
  • 所有对象都可以使用python进行定制和扩展。

Installation

发展

如果你想为txspore开发或者使用我们正在开发的最新代码,你可以 可以从源安装。你需要安装bzr,然后 以下内容:

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

易于安装

您可以使用setuptools easy_install脚本在系统上获取txspore:

$ sudo easy_install Isomyr

手动下载

您可以通过以下方式从python包索引手动下载源tarball 访问以下网址:

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

你需要解压源代码,将cd压缩到源目录,然后 然后您可以按常规操作:

$ sudo python setup.py install

检查源

安装后,可以通过从 顶级源目录:

$ ./admin/testDocs.py
$ ./admin/testRunner.py

它将运行测试套件并报告任何单元的成功与失败 测验。

Usage

示例

在isomyr的顶级源目录中,有一个examples目录。 它包含以下内容:

  • 同位素的原始例子,移植到isomyr。这是一个 两个房间的世界,玩家可以拿起两个物体并跳到床上。
  • 一个新的开放式的例子,有14个“房间”,代表一个外部 环境。这个例子简单地展示了在许多连接到 未填写的场景。

检查示例目录中的每个python文件是最好的方法 了解如何使用isomyr创建游戏。

示例可以从顶级源目录运行,例如:

$ python examples/TwoRooms/tworooms.py

您可以使用箭头键导航播放机,<;space>;表示跳转,<;enter>; 供使用。

Known Bugs

  • 当玩家速度增加时,他们的跳跃高度也会增加。 当它足够高时,玩家可以跳出场景。这可能需要 天花板应该放在房间里…但是跳跃的物理应该是 也检查过了。

TODO

其他

  • 添加一个用于管理精灵的包装(相关的位置向量、大小等; 请参见isometric.py中的代码。
  • 添加对configparser引擎/游戏配置的支持。
  • 添加仅绘制墙的沙盒示例。
  • 为所有操作添加日志记录(以便在控制台中轻松调试)。
  • 提供一种配置机制,让游戏开发者可以定义 标题栏图像。
  • 找到所有xxx注释,修复它们,然后删除它们。
  • 将所有一些方法和变量重命名为是的。

新示例

  • 可考查的对象。
  • 可爆炸对象
  • 程序生成的背景图像/网格等。
  • 一个有多种地形类型的“房间”,从上面走过可以演示 由地形决定的部分玩家速度。
  • 一个时间演示,在不同的房间(门是 用不同的日历传送到其他世界。

文件

  • 使用into about tutorial更新用法(并将tutorial部分移出 自述文件)。
  • 使用交互式提示示例更新用法。
  • 使用有关单元测试的信息更新用法。
  • 用isomyr使用的透视比信息更新文档。
  • 添加单元测试。
  • 将常见问题从自述文件移到文档中。

直接动物皮肤

  • 将getimage分割成不同的方法。
  • 为每个方向指定一个方法名。

世界大厦

  • 对于新事物对象,确保添加了具有子对象的对象 对一个世界来说,所有的孩子都能正确地设置他们的世界属性。
  • 添加对解析ascii映射以生成文件室的支持。

玩家调整

  • 当玩家捡到一个物品时,它应该重新设置该物品的父项(新父项= 玩家)。
  • 当玩家删除一个itme时,它应该重新设置项的父级(新父级= 场景)。
  • 对场景、播放器等的更改应导致 场景引擎不必检查单个对象的更改。
    • 添加对象历史记录跟踪机制
  • 玩家感觉现在在引擎里…这不好 抽象。玩家考试应该是玩家和 对象,在世界范围内(或者更实际地说,在 给定场景的上下文)。

发动机改进

  • engine.start引用了pygame.time.get_ticks–让我们为这个设置一个包装 以我们自己的游戏时间为例。
  • 世界相对时间属于世界,但游戏时间属于引擎- 把它移回去。
  • 为来自世界的文本数据添加一个面板(阅读描述、与 核电站、核电站等)
    • 需要检查常规视图和信息面板,并牢记这个想法 一个游戏图形用户界面正在这里开发…需要考虑如何使这个 可扩展且可用的未来功能将影响布局
    • 可能需要将视图从发动机模块中拉出并放到某个位置 否则,可能:
    • 使用view.py、title.py、inventory.py创建一个新的gui子包, textarea.py模块?
    • 或者只是一个gui/layout.py模块?
  • 为没有蒙皮的对象提供默认蒙皮。也许只是很多 灰色的,上面有网格(间隔为对象的基本单位)。
  • 定义以下各项之间的数学关系:
    • 玩家角色大小和场景边界
    • 背景大小/位置和场景边界
  • 允许透视比率是可配置的。(沙箱中的原型)
  • 编写一个floor/grid生成实用程序函数。(沙箱中的原型)
    • 允许网格元素在运行时受控制(例如,更改平铺颜色 动态地)。

多重皮肤支持

  • 添加对对象的支持,使其具有基于交换的不同皮肤 根据环境因素(例如,碎玻璃、跛行的球员、坐着 玩家)。

物理

  • 模块组织:
    • 宇宙需要成为一个子包
    • universe/world.py,universe/weather.py,universe/universe.py, 宇宙/时间.py,宇宙/天空.py(月亮,流星s,彗星,恒星)
  • 时间
    • 在World Instance上添加本地游戏内时间跟踪
    • 创建可配置的日历对象
    • 每个世界都应该用一个日历来实例化,可以通过 实例
    • 世界需要定义轴向倾斜度、日长、年长度。
    • 场景需要指明地球上的位置,以便白天可以 已确定;它们还需要指明起始季节(一年中的某个时间) 以及一天的开始时间
  • 天气
  • type of atmosphere
  • distance of the sun from the planet
  • worlds need to define an average global temperature
  • based on this, highs and lows need to be calculated for various latitudes
  • similarly for the seasons, with axial tilt taken into consideration
  • weather conditions should be predefined based on latititude, season, global temperature, axial tilt, etc., (as well as allowable transitions from one type of weather to another)
  • 行星体
  • type of sun, color of light
  • configurable moon count
  • mass/visibility of moons
  • light level given off by each moon
  • regularity of visible meteor activity
  • 世界表面的运动
  • worlds need to define mass so that gravity, rate of fall, weights of objects, etc., can be calculated
  • objects also need to indicate their masses
  • visually, movement could take place in outdoor and indoor scenes, but could also take place at a top-down map-level, allowing for an interactive and visual means of traversing great distances
  • 增加对分数速度的支持。
    • 现在的等距变换似乎不可能做到这一点, 因为它使用比特移位。
  • 为下降率添加重力乘数(这适用于世界实例)。
    • 这会影响落体速度以及横穿 表面
    • 这会影响对象的权重。
  • 添加地形穿越修改器(增加玩家速度)…例如, 路面,沙子,泥浆,水。
  • 允许玩家拉动物体。
  • 推拉物体会影响玩家的速度(取决于 物体的重量和被推过的表面,或 拉)。这需要分数速度值。

复杂的相互作用

  • 天气模拟的想法引发了另一个想法:事件注册 用于各种世界或场景的变化。例如,农民人大可以 订阅天气。天气变化可能会 通知(天气变化(最近,当前),如果转换定义为 对农作物有害(雾->;雨很凉,干旱->;倾盆大雨很坏,任何东西 冰雹是坏的,等等)然后农民NPC可以戏剧性地情绪化,四处奔波, 快点离开酒馆等。

网络支持

  • 支持多个服务器以实现负载平衡。
  • 使用rabbitmq进行消息交换。
  • 对客户端代码使用txamqp。

Changes

同位素1.0至等摩尔0.1

  • 重构游戏中的对象类以改进抽象。
  • 为宇宙和世界对象添加抽象并重构关系 在世界和场景之间。
  • 为添加了一个事件/处理程序系统(基于zope 3事件系统) 抽象对象与其环境之间的交互。
  • 用numpy向量数学代替了慢向量数学。
  • 将gui代码重构为自己的模块。

同位素0.9至1.0

  • 根据扭曲编码标准(增强的PEP-8)清理代码 合规);删除了未使用和冗余的代码。
  • 重构蒙皮代码以改进游戏创建工作流。
  • 为world对象和重构的游戏组件添加了抽象 关系(例如,玩家与环境的关系)。
  • 改进了对象速度实现。
  • 开始添加单元测试。
  • 添加了一个“开放地面”的例子游戏。

1.0

之前的同位素
  • 未知。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
(数组)列出Java中的实现   java检测JDBC连接中尚未提交的开放事务   java H2语句池   java正在使用cardlayout,有一个我无法解决的问题   java Android MTP客户端打开的是整个设备,而不是单个接口   java Querydsl mongodb gradle springboot问题   java XML使用外部xsd验证anytype类型的XML的一部分   java如何使用Hibernate在实体中创建属性表?   intellij理念“BufferedReader”与“java.io.BufferedReader”之比较。这有关系吗?   java解释多线程的输出   Eclipse中的java Android应用程序:编辑未显示在图形布局上的文本   java如何在struts 1中使用显示标记?