容易混淆的问题
| 容易混淆 | 区别 |
|---|---|
keypressed / isDown | 按下一次 vs 每帧轮询,持续移动必须用后者 |
dt 乘不乘 | 不乘则帧率越高移动越快 |
| 左上角锚点 / 中心 | 放右侧要减宽度,放中间要减一半 |
push.start / 全局 | 只影响 start 与 finish 之间的绘制 |
| 滤镜设置顺序 | 必须在创建字体、图片之前 |
require 返回值 | 课程用全局写法,也可以 local X = require 'X' |
.. / + | Lua 拼接字符串用 ..,+ 只做数值 |
| 数组下标 | 从 1 开始,不是 0 |
nil / false | 只有这两个为假,0 为真 |
| 整数倍缩放 | 非整数倍会让像素粗细不均 |
| 碰撞后推出 | 只反向不挪出矩形,会重复碰撞 |
gameState 字符串 | 拼错不会报错,逻辑静默失效 |
两个补充
math.random 的范围。 math.random(2) 返回 1 或 2,math.random(-50, 50) 返回闭区间;不设 math.randomseed(os.time()) 每次启动序列相同。
and/or 三元。 cond and a or b 在 a 为 nil 或 false 时会错误地取 b,用来选数字没问题。