Matrix 将Corona SDK中的tiles合并为一个单词,用于突破游戏网格?

Matrix 将Corona SDK中的tiles合并为一个单词,用于突破游戏网格?,matrix,lua,coronasdk,breakout,Matrix,Lua,Coronasdk,Breakout,我有一个游戏项目要重新实施。我想显示两个单词,每个单词在一行上。他们用砖块连接起来。在内部,顶行是第一个名字,左对齐。底线是姓氏,右对齐。它们是从文本框输入的,呈现如下所示: 每过一秒,屏幕将向网格添加可配置数量的砖块(例如,每秒五块砖块),直到两个单词显示完整为止。我显示了从矩阵(0,1)创建的字母表中的一个字母 …但我不知道如何把它们组合成一个词我如何加入这些字母? 到目前为止,我得到的是: 卢阿 卢阿 到目前为止,我所做的工作(如上所述)作为外部下载:为了实际回答这个问题: 我不能100

我有一个游戏项目要重新实施。我想显示两个单词,每个单词在一行上。他们用砖块连接起来。在内部,顶行是第一个名字,左对齐。底线是姓氏,右对齐。它们是从文本框输入的,呈现如下所示:

每过一秒,屏幕将向网格添加可配置数量的砖块(例如,每秒五块砖块),直到两个单词显示完整为止。我显示了从矩阵(0,1)创建的字母表中的一个字母

…但我不知道如何把它们组合成一个词我如何加入这些字母?

到目前为止,我得到的是:

卢阿 卢阿
到目前为止,我所做的工作(如上所述)作为外部下载:

为了实际回答这个问题:

我不能100%确定你所说的“我如何加入这些字母”是什么意思,但通过翻阅代码,我有一个猜测,因此请澄清它是否准确,或者我是否对你想要的东西有错误

情景1 你还没有成功地获得屏幕截图中所示的图像-你已经能够绘制一个字母,但不能绘制多个字母

在这种情况下,您需要更好地理解代码正在做什么。
CreateBricksFromTable
函数接受一个Level对象,该对象是由
MakeLevel
函数从具有
bricks
属性的表创建的,该属性是一个表表的表,表示其中包含列的行,显示每个位置应该是什么类型的砖。在注释掉的级别中,您创建了一个表,其中
bricks
字段包含每个字母的字段,但是
MakeLevel
函数仍然需要一个直接包含块网格的
bricks
字段。您必须创建一个
MakeWordLevel
函数(或类似函数),该函数接受此字母列表和每行一个单词,并通过将适当的字母复制到其中来构建一个更大的网格

StackOverflow不是你的编程导师,所以问题不是让人们为你编写代码或一步一步详细介绍如何做到这一点的合适论坛,但我会给你一个基本的提纲。您的函数如下所示:

local function MakeWordLevel(data, line1, line2)
    local level = {}
    ...
    return level
end
-- The level data.
local level = {}

-- Create the level data.
for row = 1, 25, 1 do
    local rowData = {}

    for column = 1, 80, 1 do
        rowData[column] = "."
    end

    level[row] = rowData
end

-- Now let us setup the letters.
local letters = {
    A = {
        {".",".",".","#",".",".",".","."},
        {".",".","#",".","#",".",".","."},
        {".",".","#",".","#",".",".","."},
        {".","#",".",".",".","#",".","."},
        {".","#","#","#","#","#",".","."},
        {"#",".",".",".",".",".","#","."},
        {"#",".",".",".",".",".","#","."},
        {"#",".",".",".",".",".","#","."},
        {"#",".",".",".",".",".","#","."}
    },
    B = {
        {"#","#","#","#",".",".","."},
        {"#",".",".",".","#",".","."},
        {"#",".",".",".","#",".","."},
        {"#",".",".",".","#",".","."},
        {"#","#","#","#",".",".","."},
        {"#",".",".",".","#",".","."},
        {"#",".",".",".",".","#","."},
        {"#",".",".",".",".","#","."},
        {"#","#","#","#","#",".","."}
    }
}

-- The string to print.
local text = "ABBA"

-- Let us insert the data into the level data.
for index = 1, #text, 1 do
    local char = string.sub(text, index, index)
    local charData = letters[char]

    local offset = index * 7

    for row = 1, 9, 1 do
        local rowData = charData[row]

        for column = 1, 7, 1 do
            level[row][offset + column] = rowData[column]
        end
    end
end

-- Print everything
for row = 1, 25, 1 do
    local rowData = level[row]

    for column = 1, 80, 1 do
        io.write(rowData[column])
    end
    print()

end
然后必须:

  • 填充所有与
    MakeLevel
    相同的属性
  • 计算标高与所有字母的宽度(
    level.columns
  • 创建一个与
    bricks
    属性格式相同的表,但其大小足以容纳所有字母
  • 检查输入字符串(
    line1
    line2
    ),从现在的
    test6
    数组中找到正确的字母数据,并将该数据复制到大表中
  • 将该表指定为
    level.bricks
这个问题已经有点离题了,因为它问的是如何实现一个特性,而不是实现一个小的、特定的编程任务,所以任何进一步的后续工作都应该在聊天室中进行——也许聊天室会有所帮助

情景2: 这是我最初的猜测,但在考虑并阅读了过去的编辑后,我怀疑这是否回答了正确的问题

你可能想要一个坚实的“背景”,比如说,红色的方块,围绕着你的字母,使字段变成一堵坚实的“墙”,名字用不同的颜色。你可能希望这些砖块一次慢慢地出现几块

在这种情况下,您需要做的主要事情是跟踪名称bricks“占用”了哪些空格。有很多方法可以做到这一点,但我会从一个矩阵开始跟踪它——就像最终的比赛场地一样大——充满了0。然后,在为名称添加砖块时,根据该块的坐标在该矩阵的x,y位置设置1

如果要填充背景,每次在坐标处添加块时,请在尝试添加块之前检查“take”矩阵-如果是take(1),则跳过它并移动到下一个坐标

如果您按顺序填充背景块(例如,从左到右、从上到下),或者希望随机添加背景块,则可以使用此方法。使用random时,您还需要不断更新“take”矩阵,这样就不会尝试两次添加块

然而,随机填充也带来了它自己的问题——随着填充的进行,它将持续花费更长的时间,因为它将发现越来越多的“被占用”的块,并且必须选择一个新的块。当然,这是有解决办法的,但如果我不知道这是否是你想要的,我就不会走得太远。

我真的不理解(或阅读)你的代码,但从我所看到的,将它们组合成完整的文字是很容易的。你有两种可能

您可以将它们直接“渲染”到标高/显示数据中,只需将它们复制到适当的位置,如下所示:

local function MakeWordLevel(data, line1, line2)
    local level = {}
    ...
    return level
end
-- The level data.
local level = {}

-- Create the level data.
for row = 1, 25, 1 do
    local rowData = {}

    for column = 1, 80, 1 do
        rowData[column] = "."
    end

    level[row] = rowData
end

-- Now let us setup the letters.
local letters = {
    A = {
        {".",".",".","#",".",".",".","."},
        {".",".","#",".","#",".",".","."},
        {".",".","#",".","#",".",".","."},
        {".","#",".",".",".","#",".","."},
        {".","#","#","#","#","#",".","."},
        {"#",".",".",".",".",".","#","."},
        {"#",".",".",".",".",".","#","."},
        {"#",".",".",".",".",".","#","."},
        {"#",".",".",".",".",".","#","."}
    },
    B = {
        {"#","#","#","#",".",".","."},
        {"#",".",".",".","#",".","."},
        {"#",".",".",".","#",".","."},
        {"#",".",".",".","#",".","."},
        {"#","#","#","#",".",".","."},
        {"#",".",".",".","#",".","."},
        {"#",".",".",".",".","#","."},
        {"#",".",".",".",".","#","."},
        {"#","#","#","#","#",".","."}
    }
}

-- The string to print.
local text = "ABBA"

-- Let us insert the data into the level data.
for index = 1, #text, 1 do
    local char = string.sub(text, index, index)
    local charData = letters[char]

    local offset = index * 7

    for row = 1, 9, 1 do
        local rowData = charData[row]

        for column = 1, 7, 1 do
            level[row][offset + column] = rowData[column]
        end
    end
end

-- Print everything
for row = 1, 25, 1 do
    local rowData = level[row]

    for column = 1, 80, 1 do
        io.write(rowData[column])
    end
    print()

end
将字母保存在查找表中,然后将它们逐段复制到标高数据中。在这里,我将数字替换为点和数字符号,以使其在命令行上更美观


或者,你也可以将单词“呈现”到一个准备好的缓冲区中,然后使用相同的逻辑将其插入到级别数据中。

FYI,…谷歌告诉我,在这个页面上找到了“播放快乐的声音,让玩家享受”,所以我来看看-20000个空格在哪里?@techolic他们被删除了:如果你是从谷歌来的,那么你可能是在追求元帖子,请告诉我你是如何在一个StackOverflow帖子中获得20000个空间的!