(转)love2d有用的辅助库--gamework
此文转自朱大仙,感谢他的劳作。
翻译来源地址:https://github.com/Kadoba/gamework
gamework是控制LOVE2D游戏进程流的一个项目.
↑
这个是按原文译的, 当初乍看完全不懂, 接下来我来用图文给大家解释gamework的功能及用法.
函数会到后面总结, 前面就看看是怎么回事吧.
(= =总感觉我每次都超快切入正题)
-- 加载gamework模块
local gamework = require "gamework" -- 构造.使得你定义的love回调函数运行时都会触发gamework.
gamework.initialize() -- 取得root.
local root = gamework.getRoot()

我们就成功的做出了如图所示的东西.
接下来给大家介绍个任务(task)的概念.是怎样的呢?
也没什么好解释的,将task放入root就可以执行…恩,真的,就是这样.
task是一个概念,实际上我们会使用子任务(subtask), 我们把使用的子任务都可以叫做任务.
subtask是作为一个数组存在的,在数组内可以放以绑定的回调函数.在先前的gamework.initialize()命令的效果下,
gamework已经绑定了love的基本回调函数(load, update, draw, ……)
现在演示将一个task加入root
-- 创建一个task.
local taskA = {} -- 定义taskA的'draw'回调函数.
function taskA:draw()
love.graphics.print("hello world", , )
end -- 将taskA加入root.
gamework.addSubtask(root, taskA)

我们就成功的做出了如图所示的东西.
结果就是运行这个文件,屏幕上就会绘制出"hello world",
就是这样, gamework会按顺序执行root里的task.
另外, 我们可以在subtask中放入subtask.
local taskB = {}
function taskB:draw()
love.graphics.print("I’m taskB!", , )
end
-- 将taskB加入taskA.
gamework.addSubtask(taskA, taskB)

我们就成功的做出了如图所示的东西.
首先gamework会执行taskA的函数,然后就会执行taskA的子任务taskB.
每一个task又可以有多个subtask.
每一个subtask只属于唯一 一个task, 我们将这个task称做subtask的Master.
它们会按顺序执行. 但我们也可以设定优先级下标(Order).
像这样:
-- 构造2个画矩形的task
local rect = {}
function rect:draw()
love.graphics.setColor(,,,)
love.graphics.rectangle("fill", , , , )
love.graphics.setColor(,,,)
end local rect2 = {}
function rect2:draw()
love.graphics.setColor(,,,)
love.graphics.rectangle("fill", , , , )
love.graphics.setColor(,,,)
end gamework.addSubtask(rect)
gamework.addSubtask(rect2) function rect2:keypressed(k)
-- 通过按键改变order的值来控制优先级
-- 每个task默认的order都是0
if k == "up" then
gamework.setOrder(self, )
elseif k == "down" then
gamework.setOrder(self, -)
end
end
然后运行程序, 我们按键'上', 结果就是后定义的rect2矩形会显示rect上

我们就成功的做出了如图所示的东西.
另外, 在gamework里面有个代表级任务(Delegate)的概念,
Delegate有什么用呢? 用法就是:
- 将一个task的设置一个Delegate.
- 然后, 这个Delegate将会代替属于同一个Master的同级的subtask执行.
比如我给root设一个Delegate.
local delegate = {}
gamework.setDelegate(root, delegate) --设置
function delegate:draw()
love.graphics.print("I hind those subtask", , )
end

我们就成功的做出了如图所示的东西.
Delegate将会代替taskA及其子任务,rect.rect2执行.红色区域的就相当于作废了.
每一个task只允许存在一个Delegate
另外:
- 你可以把root理解成一个task.
- Delegate也可以包含subtask,也可以包括Delegate.
呼~ 好累,最后的一个功能.
word1 = {draw = function(self) love.graphics.print("hello", , ) end}
word2 = {draw = function(self) love.graphics.print("world", , ) end}
gamework.addSequence(word1)
gamework.waitSequence(0.5)
gamework.addSequence(word2, false)
那个"addSequence(word2, false)”中的false参数会标记word2为停止(halt)状态,
它将subtask加入了任务队列(Sequence),任务们开始排队.
就这样,waitSequence函数会使word2在0.5s后取消halt然后就执行了.
函数列表:*这样用gamework.setOrder(taskA, 1)
|
addSequence(task, subtask, halt, ...) |
添加子任务到队列,可以设置停止(halt)状态 |
|
addSubtask(task, subtask, ...) |
添加子任务 |
|
setDelegate(task, subtask, ...) |
设置代表级任务 |
|
setOrder(task, order) |
设置优先级下标(Order) |
|
getDelegate (task) |
返回任务中的代表级任务 |
|
getHaltSubtask (task) |
返回任务中所有的halt状态的子任务 |
|
getMaster(subtask) |
返回子任务的Master |
|
getOrder(task) |
返回任务的优先级下标(Order) |
|
getRoot() |
返回root的任务 |
|
getTaskType(task) |
返回任务的类型 |
|
clearSequence (task) |
清空一个任务队列(Sequence)的所有子任务 |
|
clearSubtasks (task) |
清空一个任务的所有子任务 |
| remove(subtask) | 删除一个子任务 |
最后, 有...恩 蛮多功能没翻译给大家, 有兴趣自己去看看来源地址.
(转)love2d有用的辅助库--gamework的更多相关文章
- Web开发中20个很有用的CSS库
来源: 微信公众号文章 在过去的几年中,CSS已经成为一大部分开发者和设计者的最爱,因为它提供了一系列功能和特性.每个月都有无数个围绕CSS的工具被开发者发布以简化WEB开发.像CSS库,框架,应用这 ...
- Web 开发中 20 个很有用的 CSS 库
转自:http://www.oschina.net/translate/css-libraries-for-developers 在过去的几年中,CSS已经成为一大部分开发者和设计者的最爱,因为它提供 ...
- Android非常有用的开源库介绍整理
Android开源库 自己一直很喜欢Android开发,就如博客副标题一样,我想做个好的App. 在摸索过程中,GitHub上搜集了很多很棒的Android第三方库,推荐给在苦苦寻找的开发者,而且我会 ...
- 19个很有用的 JavaScript库推荐
流行的 JavaScript 库有jQuery,MooTools,Prototype,Dojo和YUI等,这些 JavaScript 库功能丰富,加上它们众多的插件,几乎能实现任何你需要的功能 然而需 ...
- 学习Flutter应用开发有用的代码/库/专有技术列表
当我开始使用Flutter开发该应用程序时,我开始担心:“最好的书写方式是什么?”以及“放置它的效果如何?”在这种情况下,您将需要学习和参考GitHub发布的代码和应用程序. 因此,我收集了似乎对 ...
- 可能对Flutter应用程序开发有用的代码/库/专有技术列表
当我开始使用Flutter实施该应用程序时,我开始担心“如何最好地编写?”以及“如何使其更好地放置?”. 在这种情况下,您将需要参考GitHub上发布的代码和应用程序. 因此,我收集了似乎对Flu ...
- oracle之三目录库和辅助库
目录库和辅助库 10.1 创建目录库(Catalog database)的必要性 如果没有catalog,RMAN的存储库(元数据)保存在目标库的控制文件里,这样可能存在如下隐患 1)目标库上的控制文 ...
- 有用的.NET库
1. Polly,重试 Polly is a .NET 3.5 / 4.0 / 4.5 / PCL library that allows developers to express transien ...
- iOS 中有用的开源库
youtube下载神器:https://github.com/rg3/youtube-dl vim插件:https://github.com/Valloric/YouCompleteMe vim插件配 ...
随机推荐
- qt study 元对象,属性和反射编程
所谓反射,就是指对象成员的自我检查,使用反射编程(reflective programming),就可以编写出通用的操作,可以对具有不同结构的类进行操作. QMetaObject 元对象模式,描述一个 ...
- 给 Easyui Datagrid 扩展方法
$.extend($.fn.datagrid.methods, { /** * 更新 非编辑列值 * @param rowIndex : 行索引 * @param cellName : 列索引或列名 ...
- shiro 授权介绍
授权即访问控制,它将判断用户在应用程序中对资源是否拥有相应的访问权限.如,判断一个用户有查看页面的权限,编辑数据的权限,拥有某一按钮的权限,以及是否拥有打印的权限等等. 一.授权的三要素 授权有着三个 ...
- 让Netty入门变得简单
让Netty入门变得简单 https://mp.weixin.qq.com/s/MBnbLmCmFJo0QK9WNwXrXQ 如果先启动nettyClient就不会有nettyServer输出了: p ...
- Ubuntu 中/etc/resolv.conf 文件修改丢失的解决方案
方法一 1.需要创建一个文件/etc/resolvconf/resolv.conf.d/tail sudo vi /etc/resolvconf/resolv.conf.d/tail 2.在该文件中写 ...
- Voice Commands (VCD) Cortana 微软小娜示例
Cortana 样品 您可以创建自定义功能Cortana使用Cortana技能装备或遗留的声音命令(VCD)平台. 在这里,你可以找到相关的样品: Cortana技能装备 目前Cortana技巧是建立 ...
- RSA 公钥加密——私钥解密
作者:刘巍然-学酥链接:http://www.zhihu.com/question/25912483/answer/31653639来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请 ...
- [置顶] 关于Qt的学习
初学习QT,希望用此来记录学习的轨迹....... 1.Qt版本为Qt5.1.0 2.使用Qt-Creator进行变成. 3.第一个例子 打印出“Hello World” 3.1 打开Qt-Crea ...
- Ubuntu 设置UFW防火墙
1:安装 sudo apt-get install ufw 2:启用 sudo ufw enable sudo ufw default deny 运行以上两条命令后,开启了防火墙,并在系统启动时自动开 ...
- ant design pro (十五)advanced 使用 API 文档工具
一.概述 原文地址:https://pro.ant.design/docs/api-doc-cn 在日常开发中,往往是前后端分离的,这个时候约定好一套接口标准,前后端各自独立开发,就不会被对方的技术难 ...