(转)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插件配 ...
随机推荐
- HDU 5025图论之BFS
点击打开链接 题意:从K走到T,S为怪,走的时候就多花费一秒,走到T时收集m把不同的钥匙.可是规定收集n之前,必须1~n-1所有收集完成,怪最多有5个 思路:怪最多就有5个,然后钥匙是1~9把,我们每 ...
- windows live writer首行缩进问题的解决
使用live writer写博客的确方便,但有个简单的问题,我始终无法解决,就是发布的博客老是无法首行缩进,试过好多方法,都有问题: 直接加全角空格.上传时就给过滤掉了. 修改defaultcss,结 ...
- Axure与iPhone应用程序原型创建(五)
在设计iPhone应用程序原型时,常常需要通过一个滑动的动画从一个屏幕切换到另一个屏幕.使用Axure RP进行设计时,可以将屏幕设计到动态面板里面,通过设置面板状态事件来实现.在下文中作者将通过一个 ...
- [置顶] 关于Qt的学习
初学习QT,希望用此来记录学习的轨迹....... 1.Qt版本为Qt5.1.0 2.使用Qt-Creator进行变成. 3.第一个例子 打印出“Hello World” 3.1 打开Qt-Crea ...
- 深入理解Git (三) - 微命令上篇
1 git hash-object 曾经讲过Git用Hash值作为Git对象的名字,那么详细是哪个命令呢? 我们能够先改动一个文件: echo "hongchangfirst" & ...
- Spring 基于xml配置方式的事务
参考前面的声明式事务的例子:http://www.cnblogs.com/caoyc/p/5632198.html 我们做了相应的修改.在dao中和service中的各个类中,去掉所有注解标签.然后为 ...
- 使用RMAN方式清除
使用RMAN方式清除 RMAN清除方式会自动清除磁盘上的归档日志文件,同时会释放控制文件中对应的归档日志的归档信息. 可以基于不同的条件来清除归档日志,如基于SCN,基于SEQUENCE,基于TIME ...
- Hbuilder 常用快捷键
网上搜了一下,对Hbuider的快捷键 另外还有一些实用的组合键: Alt+T→V (检验语法文档) Alt+L→H (代码历史版本)
- 一对一关系数据库表 java类描述
一对一关系中 从表的主键是 主表的外键 sql语句 create table person( id int primary key, name varchar(100) ); create table ...
- JAVA变量的执行顺序
对于静态变量.静态初始化块.变量.初始化块.构造器,它们的初始化顺序以此是(静态变量.静态初始化块)>(变量.初始化块)>构造器.我们也可以通过下面的测试代码来验证这一点: package ...