翻译来源地址: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., )
 end

 -- 将taskA加入root.
 gamework.addSubtask(root, taskA)

我们就成功的做出了如图所示的东西.

结果就是运行这个文件,屏幕上就会绘制出"hello world",

就是这样, gamework会按顺序执行root里的task.

另外, 我们可以在subtask中放入subtask.

 local taskB = {}
 function taskB:draw()
     love.graphics., )
 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(, , , )
    love.graphics.setColor(,,,)
end

local rect2 = {}
function rect2:draw()
    love.graphics.setColor(,,,)
    love.graphics.rectangle(, , , )
    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. , )
 end

我们就成功的做出了如图所示的东西.

Delegate将会代替taskA及其子任务,rect.rect2执行.红色区域的就相当于作废了.

每一个task只允许存在一个Delegate

另外:

  1. 你可以把root理解成一个task.
  2. Delegate也可以包含subtask,也可以包括Delegate.

呼~ 好累,最后的一个功能.

word1 = {draw = ,  ) end}
word2 = {draw = ,  ) 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)                                 删除一个子任务                                         

最后, 有...恩 蛮多功能没翻译给大家, 有兴趣自己去看看来源地址.

gamework的使用方法的更多相关文章

  1. javaSE27天复习总结

    JAVA学习总结    2 第一天    2 1:计算机概述(了解)    2 (1)计算机    2 (2)计算机硬件    2 (3)计算机软件    2 (4)软件开发(理解)    2 (5) ...

  2. mapreduce多文件输出的两方法

    mapreduce多文件输出的两方法   package duogemap;   import java.io.IOException;   import org.apache.hadoop.conf ...

  3. 【.net 深呼吸】细说CodeDom(6):方法参数

    本文老周就给大伙伴们介绍一下方法参数代码的生成. 在开始之前,先补充一下上一篇烂文的内容.在上一篇文章中,老周检讨了 MemberAttributes 枚举的用法,老周此前误以为该枚举不能进行按位操作 ...

  4. IE6、7下html标签间存在空白符,导致渲染后占用多余空白位置的原因及解决方法

    直接上图:原因:该div包含的内容是靠后台进行print操作,输出的.如果没有输出任何内容,浏览器会默认给该空白区域添加空白符.在IE6.7下,浏览器解析渲染时,会认为空白符也是占位置的,默认其具有字 ...

  5. 多线程爬坑之路-Thread和Runable源码解析之基本方法的运用实例

    前面的文章:多线程爬坑之路-学习多线程需要来了解哪些东西?(concurrent并发包的数据结构和线程池,Locks锁,Atomic原子类) 多线程爬坑之路-Thread和Runable源码解析 前面 ...

  6. [C#] C# 基础回顾 - 匿名方法

    C# 基础回顾 - 匿名方法 目录 简介 匿名方法的参数使用范围 委托示例 简介 在 C# 2.0 之前的版本中,我们创建委托的唯一形式 -- 命名方法. 而 C# 2.0 -- 引进了匿名方法,在 ...

  7. ArcGIS 10.0紧凑型切片读写方法

    首先介绍一下ArcGIS10.0的缓存机制: 切片方案 切片方案包括缓存的比例级别.切片尺寸和切片原点.这些属性定义缓存边界的存在位置,在某些客户端中叠加缓存时匹配这些属性十分重要.图像格式和抗锯齿等 ...

  8. [BOT] 一种android中实现“圆角矩形”的方法

    内容简介 文章介绍ImageView(方法也可以应用到其它View)圆角矩形(包括圆形)的一种实现方式,四个角可以分别指定为圆角.思路是利用"Xfermode + Path"来进行 ...

  9. JS 判断数据类型的三种方法

    说到数据类型,我们先理一下JavaScript中常见的几种数据类型: 基本类型:string,number,boolean 特殊类型:undefined,null 引用类型:Object,Functi ...

随机推荐

  1. html5_common.js

    (function(){ this.sendAjax = function(url,func,formData,type){ type = type || "POST"; //默认 ...

  2. 使用gdb调试多线程程序总结

    转:使用gdb调试多线程程序总结 一直对GDB多线程调试接触不多,最近因为工作有了一些接触,简单作点记录吧. 先介绍一下GDB多线程调试的基本命令. info threads 显示当前可调试的所有线程 ...

  3. ZOJ-3201 Tree of Tree 树形DP

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3201 题意:给一颗树,每个节点有一个权值,求节点数为n的最大权子 ...

  4. share-jquery

    html val text区别: .html()用为读取和修改元素的HTML标签 .text()用来读取或修改元素的纯文本内容 .val()用来读取或修改表单元素的value值. 这三个方法功能上的对 ...

  5. 门户级UGC系统的技术进化路线——新浪新闻评论系统的架构演进和经验总结(转)

    add by zhj:先收藏了 摘要:评论系统是所有门户网站的核心标准服务组件之一.本文作者曾负责新浪网评论系统多年,这套系统不仅服务于门户新闻业务,还包括调查.投票等产品,经历了从单机到多机再到集群 ...

  6. rdlc 分页操作

    工具箱中拖一个列表过来,设置 列表-->行组-->组属性常规-->组表达式=Int((RowNumber(Nothing)-1)/10)分页符-->勾选在组的结尾

  7. POJ 3449 Geometric Shapes(判断几个不同图形的相交,线段相交判断)

    Geometric Shapes Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 1243   Accepted: 524 D ...

  8. LC并联谐振回路

  9. 关于缺省路由传递问题的探讨(上)[ip default-network、ip default-gateway等]

    指定缺省路由(last resort gateway)的指令供有3种,可以分成两类:   1.Ip default-gateway   仅在 "no ip routing" (关闭 ...

  10. 使用MSSQL,连接oracle,对oracle数据进行操作

    EXEC sp_addlinkedserver--创建链接服务器.链接服务器让用户可以对 OLE DB 数据源进行分布式异类查询. @server = 'Mktg',--要创建的链接服务器的名称.s ...