什么是精灵?
精灵就是贴了图的矩形:四个数字,一张图,零灵魂。
42 秒 · 含中文字幕 · 8.4 Mo
你会学会的 7 件事
第 6 课:什么是精灵?
Regarde la leçon (42 s) : démonte ton héros — rectangle, image, données — avant même de le faire bouger.
英雄 = 四个数字
Écris `sprite` : un Hash avec `"x" => 10`, `"y" => 20`, `"l" => 32`, `"h" => 32` (des NOMBRES) et `"image" => "carre"`. Le héros complet tient là.
换一身装扮
Écris `habille(sprite, image)` qui renvoie un NOUVEAU hash : mêmes coordonnées, nouvelle image. L original ne bouge pas — tu copies, tu ne détruits.
矩形的占地
Écris `touche?(sprite, px, py)` : true si le point est DANS le rectangle — `px >= x` ET `px < x + l` (idem pour y). Le bord droit ne compte pas : le bord appartient au voisin.
谁在前面?
Écris `devant?(a, b)` : a est devant (couvre b) s'il est STRICTEMENT plus bas à l'écran — origine en haut à gauche, donc plus grand y = plus devant. Égalité → false.
一行代码造出来
Écris `nouveau_sprite(x, y)` : renvoie le hash complet avec les défauts du jeu — `l` et `h` à 32, `image` à "carre" — et les coordonnées reçues prises telles quelles.
第 6 课:OK
Sans aide : `collision(a, b)` — true si les deux rectangles se chevauchent (strictement). Toucher bord à bord ne compte PAS : le bord appartient au voisin.
📄 备忘单
打印出来贴显示器上,就当是你自己的主意📄 备忘单 — 什么是精灵?
你的英雄没有灵魂:它有一个 hash。矩形、图片、数据。就这些。
精灵,拆开看
sprite = {
"x" => 10, # 从哪开始(左上角)
"y" => 20,
"l" => 32, # 宽
"h" => 32, # 高
"image" => "carre" # 装扮,画在【上面】
}
四个数字 + 一张图。 把图拿掉 → 剩下方块。这就是你的角色。
占地:真正碰撞的东西
def touche?(sprite, px, py)
px >= sprite["x"] && px < sprite["x"] + sprite["l"] &&
py >= sprite["y"] && py < sprite["y"] + sprite["h"]
end
- 原点在左上:
x向右,y向下(屏幕就是这样)。 <而不是<=:右边那条边属于邻居。贴边 = 不算碰撞。- 你从没撞过墙——你撞的是坐标。
两个相遇的矩形
def collision(a, b)
a["x"] < b["x"] + b["l"] && b["x"] < a["x"] + a["l"] &&
a["y"] < b["y"] + b["h"] && b["y"] < a["y"] + a["h"]
end
各自都要在对方终点的左边,两个轴都要。参数顺序无所谓(测一下:
collision(a, b) == collision(b, a)——游戏里真有这个检查 😉)。
后面 / 前面
def devant?(a, b)
a["y"] > b["y"] # 屏幕上更靠下 = 盖住上面那个
end
不用 >=:平局时谁也不「赢」。(和矩形边同一口气——规则不写一半。)
换装扮(不弄坏原件)
sprite.merge("image" => "fantome") # 复制
sprite.merge!(…) # 不——这会改原件。经典坑。
一句话解锁全部
矩形、图片、数据。 现在——让它动起来。(→ 第 7 课:x、y、速度、循环。)
以后别再说
「我的角色会动」→ 它要到第 7 课才会动;在这里它勉强存在「精灵有个大小」→l和h是你给它的。它没开口要过。
SlopCourse — 从 slop 到干净的代码。