BASIC8

BASIC8

BASIC8

欢迎来到BASIC8社区! 
6帖子·--新帖
游戏详情
全部
官方资讯
攻略创作
组队交友
问题反馈

难度:高级 类别:编程 另请参见:使用JSON 简介 本指南将介绍BASIC8中资源的文件结构,帮助你编写自己的扩展工具来处理资源。所有通过编辑器创建的资源均为JSON格式。本指南将通过典型示例进行说明,并使用REM...作为伪注释。 通用 所有图形资源中使用的帧通用结构: { "width" : 16, "height" : 8, REM 帧尺寸 "depth" : 4, REM 4表示值范围为0到15;8表示值范围为0到255 "data" : REM 像素数据数组 [ 0, 0, 0, ... ] } 精灵 { "frames" : REM 帧数组 [ { "interval" : 0.33, REM 帧间隔(秒) "tag" : "HP", REM 用于命名帧的标签字符串,可为空 "data" : REM "帧"数据 { "width" : 8, "height" : 8, "depth" : 4, REM 精灵图16色时始终为4 "data" : [ 0, 0, 0, ... ] } }, { "interval" : 0.15, "tag" : "HPL", "data" : { "width" : 8, "height" : 8, "depth" : 4, "data" : [ 0, 0, 0, ... ] } }, ... REM 更多帧 ] } 地图 { "layers" : REM 地图图层数组 [ { "type" : "indexed", REM 图层用途 "overlap_x" : 0, "overlap_y" : 0, REM 保留参数,目前始终为0 "data" : REM "帧"数据 { "width" : 10, "height" : 8, "depth" : 4, REM "indexed"图层中始终为4 "data" : [ 0, 0, 0, ...“type”字段对于第一层始终为“indexed”,其余层为“render”,并包含由编辑器创建的地图;否则,其余层为“render”,并动态加载空白地图。尽管“render”层的深度为8,但它只能使用0到239范围内的值。 量化 { “quantized”:REM 唯一的“frame”数据 { “width”:138,“height”:50, “depth”:4, “data”: [ 0,0,0,... ] } }

--
--

难度:入门 类别:编程 基本范式 事件驱动和主循环是程序结构的两大主要范式。它们都广泛应用于各类应用程序中。BASIC8程序的最外层结构基于主循环,其中一段代码应每秒运行多次;每个循环称为一帧。代码运行速度为30 FPS,而渲染速度为60 FPS。 程序的最小设置可简化为: def update(delta) enddef update_with(driver()) BASIC8程序自上而下执行。DRIVER()函数始终返回当前程序的唯一活动驱动程序;UPDATE_WITH(drv [, r])函数告诉驱动程序如何运行此程序,在这种情况下,它会查找名为“UPDATE”的例程。或者,如果你希望显式使用不同的例程名称,例如“BLAH”,可以使用以下代码: def blah(delta) enddef update_with(driver(), call(blah)) 或者使用字符串指定符来实现相同目的: update_with(driver(), "blah") 还可以使用LAMBDA创建匿名的更新例程: update_with ( driver(), lambda (delta) ( ) ) “delta”参数表示自上次更新以来经过的时间(以秒为单位),这对于计算与时间相关的变化非常有用。例如:通过匀速直线运动移动圆形: x = 0 def update(delta) x = x + delta * 10 circ x, 63, 5, rgba(0, 0, 255) enddef update_with(driver(), call(update)) 【delta】存在的原因是,在实际情况中,每帧的运行时间可能会比预期稍短或稍长,因此需要一种方法来表示实际的时间间隔。 也可以手动创建无限循环,而不是使用例程作为主循环: x = 0 while true delta = sync x = x + delta * 10 circ x, 63, 5, rgba(0, 0, 255) wend 你必须每帧手动调用【SYNC】函数,向驱动程序提交一个周期,该函数会返回【delta】时间。 主循环模式在包括游戏在内的多个领域中都有应用,这是更新和渲染内容的基础部分。这并不是说不能用事件驱动范式来组织程序的其他部分,不过那就是另一个话题了。 加载资源 LOAD_RESOURCE(path)函数用于从磁盘内容中加载资源,它可以加载精灵、地图或量化图像,详情请查阅手册。 与上述函数类似,LOAD_BLANK(y, w, h, n = 1)同样会返回一个已加载的资源,但它加载的是空白资源,而非从磁盘加载。 通过上述任一函数加载的资源没有区别,你都可以使用*GET、*SET函数访问像素,或者以相同方式渲染它们。这将在其他指南中进行说明。 有时我们需要从一个资源模板实例化多个实例,例如生成大量敌人。CLONE(g)用于从现有资源创建一个副本实例,可将精灵、地图(单层或多层)以及量化图像中的任意一种传递给"g"。 RGBA(r, g, b, a = 255)函数通过红、绿、蓝、透明度分量创建颜色,它是值类型而非引用类型,其用法将在其他指南中说明。 UNPACK(c, r, g, b [, a])函数用于从颜色值中解包出各个分量。

--
--