(转)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插件配 ...
随机推荐
- SQL Server 2008新特性——策略管理
策略管理是SQL Server 2008中的一个新特性,用于管理数据库实例.数据库以及数据库对象的各种属性.策略管理在SSMS的对象资源管理器数据库实例下的“管理”节点下,如图: 从图中可以看到,策略 ...
- Servlet学习笔记(三):HTTP请求与响应
一.HTTP请求常用方法: Cookie[] getCookies()返回一个数组,包含客户端发送该请求的所有的 Cookie 对象. Enumeration getAttributeNames()返 ...
- hadoop中实现定制Writable类
Hadoop中有一套Writable实现可以满足大部分需求,但是在有些情况下,我们需要根据自己的需要构造一个新的实现,有了定制的Writable,我们就可以完全控制二进制表示和排序顺序. 为了演示如何 ...
- Linux下性能监控的三把军刀
Linux主机怎么管,十八般兵器件件都可以算得上是瑞士军刀,称手的兵器一两件即可,最常用的,莫过于stat家族三兄弟吧. 计算机主要资源是什么?CPU.内存和磁盘?尽管现在云计算技术有多普及,查看一个 ...
- 【转】TCP分段与IP分片
原文: :https://www.jianshu.com/p/f9a5b07d99a2 -------------------------------------------------------- ...
- python中字符串list转化为数值型
之前在网上找相关的资料,给出的方法都不合适, 经过很长时间的试错才知道源于python2.X和python3.X的不同, 原理都是采用map函数,但是二者返回的信息不同 Python2.x,可以使用m ...
- angularjs中的$eval方法
在controller中定义了一个变量 $scope.a_1 = "abc"; 想在view里面动态输出,因为这个数字是动态的,这么输出肯定是不行的{{'a_' + '1'}},因 ...
- qs.js库 使用方法
1.qs.js库说明 qs是一个url参数转化(parse和stringify)的js库. https://www.npmjs.com/package/qs 2.使用(以vue文件做示例) (1)基本 ...
- 【Oracle】Oracle常用语句集合
表相关 1.快速统计大表记录数 select table_name, t.num_rows, t.last_analyzed from tabs t WHERE table_name='TABLE_ ...
- web普通项目映射为maven项目
localhost:8080/yourWebLocation 访问 前一个插件是映射项目路径成maven的格式 后一个插件是映射访问网址所需要的东西 <build> <!-- 发布 ...