此文转自朱大仙,感谢他的劳作。

翻译来源地址: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有什么用呢? 用法就是:

  1. 将一个task的设置一个Delegate.
  2. 然后, 这个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

另外:

  1. 你可以把root理解成一个task.
  2. 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的更多相关文章

  1. Web开发中20个很有用的CSS库

    来源: 微信公众号文章 在过去的几年中,CSS已经成为一大部分开发者和设计者的最爱,因为它提供了一系列功能和特性.每个月都有无数个围绕CSS的工具被开发者发布以简化WEB开发.像CSS库,框架,应用这 ...

  2. Web 开发中 20 个很有用的 CSS 库

    转自:http://www.oschina.net/translate/css-libraries-for-developers 在过去的几年中,CSS已经成为一大部分开发者和设计者的最爱,因为它提供 ...

  3. Android非常有用的开源库介绍整理

    Android开源库 自己一直很喜欢Android开发,就如博客副标题一样,我想做个好的App. 在摸索过程中,GitHub上搜集了很多很棒的Android第三方库,推荐给在苦苦寻找的开发者,而且我会 ...

  4. 19个很有用的 JavaScript库推荐

    流行的 JavaScript 库有jQuery,MooTools,Prototype,Dojo和YUI等,这些 JavaScript 库功能丰富,加上它们众多的插件,几乎能实现任何你需要的功能 然而需 ...

  5. 学习Flutter应用开发有用的代码/库/专有技术列表

    当我开始使用Flutter开发该应用程序时,我开始担心:“最好的书写方式是什么?”以及“放置它的效果如何?”在这种情况下,您将需要学习和参考GitHub发布的代码和应用程​​序. 因此,我收集了似乎对 ...

  6. 可能对Flutter应用程序开发有用的代码/库/专有技术列表

    当我开始使用Flutter实施该应用程序时,我开始担心“如何最好地编写?”以及“如何使其更好地放置?”. 在这种情况下,您将需要参考GitHub上发布的代码和应用程​​序. 因此,我收集了似乎对Flu ...

  7. oracle之三目录库和辅助库

    目录库和辅助库 10.1 创建目录库(Catalog database)的必要性 如果没有catalog,RMAN的存储库(元数据)保存在目标库的控制文件里,这样可能存在如下隐患 1)目标库上的控制文 ...

  8. 有用的.NET库

    1. Polly,重试 Polly is a .NET 3.5 / 4.0 / 4.5 / PCL library that allows developers to express transien ...

  9. iOS 中有用的开源库

    youtube下载神器:https://github.com/rg3/youtube-dl vim插件:https://github.com/Valloric/YouCompleteMe vim插件配 ...

随机推荐

  1. Webview 支持文件上传

    默认情况下情况下,在一个带有input tpye=file标签的Html页面,使用Android的WebView是不能够支持上传文件的(在iOS和微信上完全正常工作).而这个,也是在我们的前端工程师告 ...

  2. java学习笔记3--类与对象的基础

    本文地址:http://www.cnblogs.com/archimedes/p/java-study-note3.html,转载请注明源地址. 1.面向对象的程序设计方法概述 面向对象的程序设计 与 ...

  3. 关于C#程序优化的五十种方法

    关于C#程序优化的五十种方法    这篇文章主要介绍了C#程序优化的五十个需要注意的地方,使用c#开发的朋友可以看下   一.用属性代替可访问的字段 1..NET数据绑定只支持数据绑定,使用属性可以获 ...

  4. iOS 7 导航栏颜色设定与适配

    iOS7 设置navigationBar的颜色,新增了一个属性 barTintColor CGFloat osVersion = [[UIDevice currentDevice].systemVer ...

  5. RSA 在C#里简单实现

    1.选择两个大素数:p,q;2.计算所得n:n=p*q;3.计算中间结果t:t=(p-1)*(q-1);4.选择一个e:要求e和t的最大公因数是1(也就是e与t互素);5.计算所得d:d*e mod ...

  6. VMware Workstation的网络连接方式:NAT、桥接和Host Only

    安装完VMware Workstation后会自动生成两个网络连接:VMware Network Adapter VMnet8 和 VMware Network Adapter VMnet1(通常称为 ...

  7. 算法笔记_142:无向图的欧拉回路求解(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 John's trip Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 8 ...

  8. sql各种连接详解

      迁移时间:2017年6月1日16:33:58 CreateTime--2016年9月14日11:19:00Author:Marydon sql各种连接详解 参考链接: http://www.jb5 ...

  9. Android 识别身份证号码(图片识别)

    概述 Android 身份证号码识别 (本地,在线,实时),网络识别用的别人的接口,不保障什么时候就用不了了,本地识别基于tess_two,位置对的话识别准确率达到90%以上. 详细 代码下载:htt ...

  10. CentOS连接网络注意事项

    连接网络,系统中这两个服务需要启动 可以看到右上角网络连接成功了