
难度:入门 类别:编程 基本范式 事件驱动和主循环是程序结构的两大主要范式。它们都广泛应用于各类应用程序中。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])函数用于从颜色值中解包出各个分量。
2026-03-25 04:00:05 发布在
BASIC8
说点好听的...
收藏
0
0
