Views
Tutorial:Cameras:camera (Polski)
Kod źródłowy modułu kamery z o kamerach.
local camera = {}
camera.x = 0
camera.y = 0
camera.scaleX = 1
camera.scaleY = 1
camera.rotation = 0
camera.layers = {}
function camera:set()
love.graphics.push()
love.graphics.rotate(-self.rotation)
love.graphics.scale(1 / self.scaleX, 1 / self.scaleY)
love.graphics.translate(-self.x, -self.y)
end
function camera:unset()
love.graphics.pop()
end
function camera:move(dx, dy) -- przesuniecie kamery o deltę
self.x = self.x + (dx or 0)
self.y = self.y + (dy or 0)
end
function camera:rotate(dr) -- obrot kamery o deltę
self.rotation = self.rotation + dr
end
function camera:scale(sx, sy) -- zmiana skali (względna)
sx = sx or 1
self.scaleX = self.scaleX * sx
self.scaleY = self.scaleY * (sy or sx)
end
function camera:setPosition(x, y) -- zmiana pozycji absolutnej kamery
self.x = x or self.x
self.y = y or self.y
end
function camera:setScale(sx, sy) -- zmiana skali (bezwzględnda)
self.scaleX = sx or self.scaleX
self.scaleY = sy or self.scaleY
end
function camera:mousePosition()
-- przelicza pozycję myszy na ekranie, na współrzędne 'w świecie gry'
return love.mouse.getX() * self.scaleX + self.x, love.mouse.getY() * self.scaleY + self.y
end
function camera:newLayer(skala, funkcjaRysujaca)
table.insert(self.layers, { draw = funkcjaRysujaca, scale = skala })
table.sort(self.layers, function(a, b) return a.scale < b.scale end)
end
function camera:draw()
local bx, by = self.x, self.y
for _, v in ipairs(self.layers) do
self.x = bx * v.scale
self.y = by * v.scale
camera:set()
v.draw()
camera:unset()
end
end
function camera:reset()
camera.layers = {}
end
return camera
camera.x = 0
camera.y = 0
camera.scaleX = 1
camera.scaleY = 1
camera.rotation = 0
camera.layers = {}
function camera:set()
love.graphics.push()
love.graphics.rotate(-self.rotation)
love.graphics.scale(1 / self.scaleX, 1 / self.scaleY)
love.graphics.translate(-self.x, -self.y)
end
function camera:unset()
love.graphics.pop()
end
function camera:move(dx, dy) -- przesuniecie kamery o deltę
self.x = self.x + (dx or 0)
self.y = self.y + (dy or 0)
end
function camera:rotate(dr) -- obrot kamery o deltę
self.rotation = self.rotation + dr
end
function camera:scale(sx, sy) -- zmiana skali (względna)
sx = sx or 1
self.scaleX = self.scaleX * sx
self.scaleY = self.scaleY * (sy or sx)
end
function camera:setPosition(x, y) -- zmiana pozycji absolutnej kamery
self.x = x or self.x
self.y = y or self.y
end
function camera:setScale(sx, sy) -- zmiana skali (bezwzględnda)
self.scaleX = sx or self.scaleX
self.scaleY = sy or self.scaleY
end
function camera:mousePosition()
-- przelicza pozycję myszy na ekranie, na współrzędne 'w świecie gry'
return love.mouse.getX() * self.scaleX + self.x, love.mouse.getY() * self.scaleY + self.y
end
function camera:newLayer(skala, funkcjaRysujaca)
table.insert(self.layers, { draw = funkcjaRysujaca, scale = skala })
table.sort(self.layers, function(a, b) return a.scale < b.scale end)
end
function camera:draw()
local bx, by = self.x, self.y
for _, v in ipairs(self.layers) do
self.x = bx * v.scale
self.y = by * v.scale
camera:set()
v.draw()
camera:unset()
end
end
function camera:reset()
camera.layers = {}
end
return camera
Other Languages
Dansk –
Deutsch –
English –
Español –
Français –
Indonesia –
Italiano –
Lietuviškai –
Magyar –
Nederlands –
Polski –
Português –
Română –
Slovenský –
Suomi –
Svenska –
Türkçe –
Česky –
Ελληνικά –
Български –
Русский –
Српски –
Українська –
עברית –
ไทย –
日本語 –
正體中文 –
简体中文 –
Tiếng Việt –
한국어
More info