【游戏功能】
七巧板是老祖宗的极简主义:七块板拼天下万物。今天拆七巧板的表现,看"拼"这个动作怎么从散块变成一幅画。
一、散块、归位、成形三段拼合
七巧板的拼合三段。散块段:七块板散在盘外——两个大三角、一个中三角、两个小三角、一个正方、一个平行四边形,每块一种颜色。归位段:点归位,板逐块飞进剪影的空位——归位的顺序按块大小从大到小,大板定骨架、小板填细节。成形段:七块齐了整幅点亮、金屑炸开——成形的剪影(一只大雁)从灰底里浮出来,七块的轮廓线在剪影里若隐若现。三段的乐趣是"各归其位":每块板只有一个正确的家,找对这个家就是全部玩法。
完整演示在这,点归位一块:
fx-tangram
二、幂尔框架实现:板件表与剪影底图
七块板的多边形顶点存表,剪影用低透明度预绘:
local Tangram = {}
local DEFS = {
{ pts = { { 0, 0 }, { 2, 0 }, { 1, 1 } }, color = "red" },
{ pts = { { 0, 0 }, { 2, 0 }, { 1, -1 } }, color = "green" },
{ pts = { { 0, 0 }, { 1, 0 }, { 1, 1 }, { 0, 1 } }, color = "blue" },
{ pts = { { 0, 0 }, { 1, 0 }, { 2, 1 }, { 1, 1 } }, color = "gold" },
{ pts = { { 0, 0 }, { 1, 0 }, { 0, 1 } }, color = "purple" },
{ pts = { { 0, 0 }, { 1, 0 }, { 0, 1 } }, color = "orange" },
{ pts = { { 0, 0 }, { 1, 0 }, { 2, 1 }, { 1, 1 } }, color = "sky" }
}
local TARGET = {
{ x = -1.4, y = -0.4, rot = 0 }, { x = 0.6, y = -0.4, rot = 3.1416 },
{ x = -0.5, y = 0.6, rot = 0 }, { x = 0.5, y = 0.6, rot = 0 },
{ x = -1.4, y = 0.6, rot = 1.5708 }, { x = -0.5, y = 1.6, rot = 0 },
{ x = 1.4, y = 0.2, rot = -1.2 }
}
local placed = 0
function TG.PlaceNext()
if placed >= #DEFS then return end
local idx = placed + 1
local t = TARGET[idx]
SL:PlayFlyFx("piece" .. idx, 330, 160,
330 + t.x * 42, 160 + t.y * 42, 1.2,
{ rot = t.rot }, function()
placed = placed + 1
SL:PlaySfx("place", placed)
SL:SetFxAlpha("piece" .. idx, 1)
if placed >= #DEFS then
SL:PlayFxAt("tangram_done", 330, 160)
SL:ShowSystemTips("七块归位 — 大雁成形!")
else
SL:ShowSystemTips("已归位 " .. placed .. "/7")
end
end)
end
function TG.Render(dt)
-- 剪影底图: 全部板件按目标位低透明预绘
for i, t in ipairs(TARGET) do
SL:DrawPoly("piece" .. i, 330 + t.x * 42, 160 + t.y * 42,
t.rot, 0.22)
end
-- 已归位的板全彩绘制
for i = 1, placed do
local t = TARGET[i]
SL:DrawPoly("piece" .. i, 330 + t.x * 42, 160 + t.y * 42,
t.rot, 1)
end
end
return TG
剪影底图用零点二二透明度预绘——玩家看灰底拼图,每归位一块灰底就少一块。
三、归位顺序与成形的点亮
归位顺序按块面积从大到小:大三角定骨架、中三角补主体、小板和方块填缝——大板的容错高,小板的落点精准,顺序对了手感从粗到细自然过渡。成形的点亮是全场唯一的重音:金屑炸开、轮廓线亮起、剪影浮出——七块灰底瞬间变七彩,前后的对比就是"拼成了"的奖赏。重拼的重置要快:灰底重现、板件散回、计数归零,一秒内完成——七巧板的循环就是"拼成—欣赏—再拼",欣赏的时间给足,重拼的速度跟上,玩家才留在循环里。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
【游戏功能】 if _shadowT 0 then spd = noShadow and 12 or 24 end ——一行…
【游戏功能】 魂卫的全机制就一句:杀掉小怪化一盏魂火跟着你走,每盏魂火两秒自动劈最近的大怪一口八点,至多三盏——「引魂!」按…
【游戏功能】 一道咒飞过来,硬吃是四秒里一秒十的钝疼——有没有第三条路?纸人替灾给的就是第三条路:贴一个纸人在身后,八秒里头…
【游戏功能】 挨打还能赚钱?水镜式的答案是:挨的刀七成存进镜里不扣血、三成照常疼,六秒后点「还镜」,存量乘一点五放成水炮——…
【游戏功能】 if _mirrorT 0 then SL:TipAboveMe("免疫") return end ——一道写…
【游戏功能】 远近战的矛盾怎么解?远战的答案是把怪挡在射程外,近战的答案是把人拖进射程内——缩地阵给的第三个答案最蛮横:圈只…