1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
|
local heartTypes = require "data.heartTypes"
sprite = {}
-- sprite resource management
local sprites = {}
local quads = {}
local spriteTypes = utils.copy(heartTypes)
table.insert(spriteTypes, "spiderweb")
table.insert(spriteTypes, "stunningstars")
table.insert(spriteTypes, "verticalMove")
local spriteSheets = {
{ name = "apple", w = 32, h = 32 },
{ name = "lancer", w = 32, h = 32 },
{ name = "spiger", w = 32, h = 32 },
{ name = "librarian", w = 32, h = 32 },
{ name = "citrus-litulon", w = 32, h = 32 },
{ name = "pokob", w = 32, h = 32 }
}
function sprite.get(type)
return sprites[type]
end
function sprite.getQuad(type, index)
if index then
return quads[type][index]
else return quads[type]
end
end
function sprite.load()
love.graphics.setDefaultFilter("nearest", "nearest")
-- load single-image sprite
for _, sprite in ipairs(spriteTypes) do
local filename = "resources/sprites/" .. sprite .. ".png"
sprites[sprite] = love.graphics.newImage(filename)
end
-- load sprite sheets and create quads for each sprite in the sheet
for _, sheet in ipairs(spriteSheets) do
local filename = "resources/sheets/" .. sheet.name .. ".png"
local image = love.graphics.newImage(filename)
sprites[sheet.name] = love.graphics.newImage(filename)
local sheetQuads = {}
local rows = math.floor(image:getHeight() / sheet.h)
local columns = math.floor(image:getWidth() / sheet.w)
local index = 1
for row = 0, rows - 1 do
for col = 0, columns - 1 do
sheetQuads[index] = love.graphics.newQuad(
col * sheet.w, row * sheet.h,
sheet.w, sheet.h,
image:getWidth(), image:getHeight()
)
index = index + 1
end
end
quads[sheet.name] = sheetQuads
end
end
-- sprite drawer
function sprite.draw(type, x, y, angle, width, height)
local sprite = sprites[type]
love.graphics.draw(sprite, x, y, angle,
width / sprite:getWidth(),
height / sprite:getHeight()
)
end
function sprite.drawObject(type, position, angle, width, height)
sprite.draw(type, position.x, position.y, angle, width, height)
end
function sprite.drawSquare(type, position, size)
sprite.drawObject(type, position, 0, size, size)
end
function sprite.drawSquareWithAngle(type, position, angle, size)
sprite.drawObject(type, position, angle, size, size)
end
function sprite.drawQuad(sheet, index, x, y, w, h, angle)
local quad = quads[sheet][index] -- 根据精灵表名称和索引获取 Quad
love.graphics.draw(sprites[sheet], quad, x, y, angle or 0, w, h)
end
|