绘制矩阵

  • 本文关键字:绘制 lua love2d
  • 更新时间 :
  • 英文 :


我试图使用矩阵生成随机映射,但我真的不知道如何。这是矩阵的函数。wMap和hMap是宽度和高度,mapSprites是一个包含一些地面精灵的表。我怎样才能画出矩阵呢?如果这是个太麻烦的问题,我很抱歉,但我真的需要一些帮助。

function buildMap(wMap, hMap)
for i = 1, wMap do
mt[i] = {}
for j = 1, hMap do
mt[i][j] = math.random(mapSprites)
end
end
end

在任何编程语言中生成随机映射都将利用两个核心概念:和嵌套for循环, map/matrix/2d数组为2。

第一个问题是,您可能会或可能不会在函数外部初始化mt。这个函数假设变量存在于函数的之外,并且每次调用函数时,它都会用随机值覆盖mt(或在第一次调用函数时初始化它)。

第二个问题,映射的宽度wMap和高度hMap顺序错误,因为映射/矩阵/2d数组首先迭代高度(y维),然后迭代宽度(x维)。

最后一个问题,mapSpripes也必须在函数之外声明(这与您的代码片段不清楚),这将是随机函数可以生成的最高可能值。您可以在这里阅读更多关于math.random的信息:http://lua-users.org/wiki/MathLibraryTutorial

考虑我写的这个函数,它可以进行这些调整,并为最小和最大随机值提供一些额外的变量。当然,您可以删除这些以使其符合您的预期目的。

function buildMap(wMap, hMap)
local minRand = 10
local maxRand = 20
for y = 1, hMap do
matrix[y] = {}
for x = 1, wMap do
matrix[y][x] = math.random(minRand, maxRand)
end
end
end

我建议您使用这个函数作为您未来迭代的灵感。您可以将minRandmaxRand作为参数,或者将matrix作为返回值,而不是在函数外部操作已经声明的matrix值。

祝你好运!编辑:

关于你的第二个问题。回顾一下我写的关于嵌套for循环的部分。这对"绘图"至关重要。你的地图。我相信你有自己解决这个问题的基础,因为没有提供足够的背景来说明什么是"绘画"。的样子。下面是一个基本类似的函数,基于我前面的函数,用于打印映射:
function printMap(matrix)
for i = 1, #matrix do
for j = 1, #matrix[i] do
io.write(matrix[i][j] .. " ")
end
io.write("n")
end
end

对于选择随机精灵,我建议你创建一个精灵表,然后在矩阵中保存精灵索引。然后你可以在相同的循环中绘制它,但是现在,你将迭代矩阵并基于保存在矩阵中的位置的精灵索引绘制精灵,该位置由矩阵位置(循环中的x和y)乘以精灵大小给定。

local sprites, mt = {}, {}
local spriteWidth, spriteHeight = 16, 16 -- Width and height of sprites
function buildMap(wMap, hMap)
mt = {}
for i = 1, wMap do
mt[i] = {}
for j = 1, hMap do
mt[i][j] = math.random(#sprites) -- We choose random sprite index (#sprites is length of sprites table)
end
end
end

function love.load()
sprites = {
love.graphics.newImage('sprite1.png'),
love.graphics.newImage('sprite2.png'),
-- ...
}
buildMap()
end
function love.draw()
for y, row in ipairs(mt) do
for x, spriteIndex in ipairs(row) do
-- x - 1, because we want to start at 0, 0, but lua table indexing starts at 1
love.graphics.draw(sprites[spriteIndex], (x - 1) * spriteWidth, (y - 1) * spriteHeight)
end
end
end

最新更新