0

由于我在 Lua 中有碰撞检查功能:

    function onCollision(obj1,obj2)
     obj1x = obj1.left
     obj1y = obj1.top
     obj1w = obj1.width
     obj1h = obj1.height
     obj2x = obj2.left
     obj2y = obj2.top
     obj2w = obj2.width
     obj2h = obj2.height
     if obj2x + obj2w >= obj1x and obj2y + obj2h >= obj1y and obj2y <= obj1y + obj1h and obj2x <= obj1x + obj1w then
    return true
    end
   end

而且我确实使用表格上的数组表将一些面板制作成砖块,使用此功能,我在每个表格侧面的球之间进行了碰撞检查,没有问题。

function createBricks()
 for row = 1, brickRows do
   bricks[row] = {}
    for col = 1, brickColumns do
     local x = (col - 1) * (width + gap) -- x offset
     local y = (row - 1) * (height + gap) -- y offset
     local newBrick = createPanel(gamePanel)
     newBrick.width = brickWidth
     newBrick.height = brickHeight
     newBrick.top = y + 15
     newBrick.left = x + 15
     newBrick.BorderStyle = 'bsNone'
     if level == 1 then newBrick.color = '65407' -- green
     elseif level == 2 then newBrick.color = '858083' -- red
     elseif level == 3 then newBrick.color = '9125192' -- brown
     elseif level == 4 then newBrick.color = math.random(8,65255) end
     bricks[row][col] = newBrick
    end
 end
end

接下来如何检测球是否与砖块相撞?到目前为止,我做了:

for row = 1, brickRows do
       bricks[row] = {}
        for col = 1, brickColumns do
         dBrick = bricks[row][col]
         if onCollision(gameBall,dBrick) then
          dBrick.destroy()  -- destroy the collided brick
         end
        end
      end

我想学习如何在 VB Net 脚本中实现这种碰撞逻辑,VB 脚本对我来说更容易,我使用 VB Net 完成了整个游戏项目,现在我尝试使用 CE Lua 重新编写项目。

Private brickArray(brickRows, brickColumns) As Rectangle
Private isBrickEnabled(brickRows, brickColumns) As Boolean

For rows As Integer = 0 To brickRows
 For columns As Integer = 0 To brickColumns
  If Not isBrickEnabled(rows, columns) Then Continue For
   If gameBall.IntersectsWith(brickArray(rows, columns)) Then
      isBrickEnabled(rows, columns) = False

      If gameBall.X + 10 < brickArray(rows, columns).X Or _
        gameBall.X > brickArray(rows, columns).X + brickArray(rows, columns).Width _
        Then
         xVel = -xVel
     Else
        yVel = -yVel
     End If
    End If
   Next
  Next

还有这个私有子,CE Lua怎么写?

Sub loadBricks()
        Dim xOffset As Integer = 75, yOffset As Integer = 100
        For row As Integer = 0 To brickRows
            For column As Integer = 0 To brickColumns
                brickArray(row, column) = New Rectangle(xOffset, yOffset, brickWidth, brickHeight)
                xOffset += brickWidth + 10
                isBrickEnabled(row, column) = True
            Next
            yOffset += brickHeight + 10
            xOffset = 75
        Next
    End Sub

    Function getBrickCount() As Integer
        Dim Count As Integer = 0
        For Each brick As Boolean In isBrickEnabled
            If brick = True Then Count += 1
        Next
        Return Count
    End Function
4

1 回答 1

0
function onCollision(obj1,obj2)
     obj1x = obj1.left
     obj1y = obj1.top
     obj1w = obj1.width
     obj1h = obj1.height
     obj2x = obj2.left
     obj2y = obj2.top
     obj2w = obj2.width
     obj2h = obj2.height
     if obj2x + obj2w >= obj1x and obj2y + obj2h >= obj1y and obj2y <= obj1y + obj1h and obj2x <= obj1x + obj1w then
    return true
    end
   end

然后检测碰撞碰撞并从表中删除:

-- Drawback table
local function tcount( t )
  local c = 0
  for k,v in pairs(t) do
   c = c + 1
  end
  return c
end

 local count = #brickArray
       for x = 1, count do
        if onCollision(gameBall, brickArray[x]) then
         if gameBall.Left + 10 < brickArray[x].Left or gameBall.Left > brickArray[x].Left + brickArray[x].Width then
            xVel = -xVel else yVel = -yVel
          end
           playSound(findTableFile('strikeball.wav'))
           brickArray[x] = brickArray[count]
           brickArray[x] = x
           brickArray[count] = nil
           brickArray[x].Visible = false
           tcount(brickArray)
        end
       end

上面的代码检测到碰撞并从表中删除对象,但不会从显示中删除。如何使用 Cheat Engine Lua 脚本从表中移除积木并显示?

于 2019-07-13T03:58:47.367 回答