-- FPS
快速开始:调用 G.open(w,h) 创建画布,G.run(fn) 启动游戏循环。fn 接收 dt(帧间隔秒)。在循环内写 JS 逻辑 + 调用绘制 API。触摸/键盘输入通过 G.touch / G.pressed(k) 读取。

JS 速查 写游戏必会

变量与常量
let score = 0 // 可重新赋值 const SPEED = 120 // 不可变,约定大写
游戏里位置、分数用 let;固定数值用 const
函数
const move = (x, speed, dt) => x + speed * dt function reset() { score = 0; x = 160 }
箭头函数 => 适合简短逻辑;function 适合多行操作。
条件判断
if (G.touched) { x = G.touch.x } if (score > best) best = score let color = alive ? '#4ade80' : '#ef4444'
if/else 控制流程;三元 ? : 适合给变量赋两种值。
循环
for (let i = 0; i < 10; i++) { ... } enemies.forEach(e => { e.y += 1 })
for 适合已知次数;forEach 适合遍历数组每个元素。
数组
let arr = [1, 2, 3] arr.push(4) // 末尾添加 arr.filter(x => x > 0) // 过滤,返回新数组 arr.length // 元素个数
push 添加,filter 过滤掉不需要的元素——游戏里管理子弹、敌人最常用这两个。
对象
let player = { x: 160, y: 200, hp: 3 } player.x += 10 // 改属性 player.hp -= 1 // 扣血
游戏实体用对象组织属性:{ x, y, w, h, speed, alive }
游戏循环模式
G.open(320, 400) let x = 160, vx = 100 G.run(dt => { // 1. 更新逻辑 x += vx * dt if (x > 300) vx = -100 // 2. 绘制画面 G.cls('#111') G.color('#4ade80') G.circ(x, 200, 10) })
每帧:先算(移动/碰撞/生成),再画(清屏+绘制)。dt 是上一帧到这帧的秒数,乘速度保证不同帧率下运动一致。

画布

G.open(w, h)初始化画布
G.cls(color)清屏并填充颜色

绘制

G.color(c)设置填充/描边颜色
G.rect(x,y,w,h)填充矩形
G.box(x,y,w,h)描边矩形
G.circ(x,y,r)填充圆
G.line(x1,y1,x2,y2)线段
G.print(s,x,y,sz)绘制文字
G.text(s,x,y,sz,c)带颜色文字,一步到位NEW
G.textAlign(a)文字对齐 left/center/right
G.font(f)设置字体
G.alpha(v)全局透明度 0~1
G.push() / G.pop()保存/恢复画布状态
G.translate(x,y)平移坐标系
G.rotate(rad)旋转坐标系
G.scale(sx,sy)缩放坐标系

特效 v1.1+

G.randColor()随机柔和颜色1.1
G.osc(x,y,r,spd)呼吸圆,半径正弦变化1.1
G.grid(c,r,fn)遍历格子,fn(gx,gy,i)1.1
G.screenShake(n)屏幕震动,n=强度1.1
G.particles(x,y,n)生成粒子,自动消散1.1
G.wave(freq,amp)正弦波 -amp~+amp,基于G.time1.2
G.wrap(v,lo,hi)循环包裹,越界从另一端出1.2

碰撞 v1.2+

G.hit(a,b)AABB碰撞 {x,y,w,h}
G.overlap(x1,y1,r1,x2,y2,r2)圆与圆碰撞1.2

UI v1.2+

G.btn(x,y,w,h,label)按钮组件,点击返回true1.2

运动 v1.2+

G.follow(obj,tx,ty,spd)obj平滑追踪目标1.2

循环

G.run(fn)启动循环,fn(dt)每帧调用
G.stop()停止循环
G.dt上一帧耗时(秒)
G.time游戏运行总时间
G.frame当前帧序号

输入

G.keysSet 当前按下的键
G.pressed(k)键k是否按下
G.key最后按下的键名
G.touch{x,y} 触摸/鼠标位置
G.touchesArray 所有触摸点
G.touched是否正在触摸
G.tap本帧是否刚点击

工具

G.rnd(a,b)随机浮点 [a,b)
G.rndi(a,b)随机整数 [a,b]
G.dist(x1,y1,x2,y2)两点距离
G.clamp(v,lo,hi)限制范围
G.lerp(a,b,t)线性插值
G.pick(x,y,rx,ry,rw,rh)点是否在矩形内

音效

G.sfx(freq,dur,type)合成音效 square/sawtooth/triangle/sine

场景

G.scene(id,{init,loop})定义场景
G.go(id)切换到指定场景

存储

G.save(k,v)存到 localStorage
G.load(k)读取数据