love2d如何实现背包系统

2025-09-26 10:45:29

1、我们创建一个类 Bag ,用来实现背包系统的功能。首先,我们需要一个背包的图标,用于点击打开和关闭背包。这里不用图片做为图标。

    self.x = 30

 

    self.y = 30

 

    self.width = 100

 

    self.height = 50

用这个矩形来代表背包。然后设置背包的点击属性。self.click = false

再然后,我们创建一个三维数组,二维也可以,用来存储道具。

--背包格子

 

    self.BAG = {}

 

    self.BAG.page = 3

 

    self.curPage = 1

 

    self.BAG.width = 4

 

    self.BAG.height = 3

 

    self.BAG.Size = 120

 

    self.bag = {}

 

    for pg=1,self.BAG.page do

 

        self.bag[pg] = {}

 

        for i=1,self.BAG.height do

 

            self.bag[pg][i] = {}

 

            for j=1,self.BAG.width do

 

                self.bag[pg][i][j] = {}

 

                self.bag[pg][i][j].value = 0  --表示未占用

 

            end

 

        end

 

    end

最后,如果是二维数组可以跳过这一步。创建一个下一页的按钮,用来控制页数

self.nextPage = {

 

        x = self.BAG.width*self.BAG.Size - 150,

 

        y = (self.BAG.height+1)*self.BAG.Size+10,

 

        width = 60,

 

        height = 40,

 

        Click = false

 

    }

love2d如何实现背包系统

2、控制背包的打开和关闭最好在love.pressed(x,y,key) 回调函数中进行。这样不用多余的逻辑就可以实现。

我们创建Bag:m_pressed(x,y,key)函数,并在love.pressed(x,y,key) 回调函数中调用它。

function Bag:m_pressed(x,y,key)

 

    if x > self.x and x < self.x+self.width and y > self.y and y < self.y + self.height then

 

        self.click = not self.click

 

    end

 

    if self.click == true and x > self.nextPage.x and x < self.nextPage.x+self.nextPage.width and y > self.nextPage.y and y < self.nextPage.y + self.nextPage.height then

 

        self.nextPage.click = not self.nextPage.click

 

        self.curPage =self.curPage +1

 

        if self.curPage >=4 then

 

            self.curPage = 1

 

        end

 

    end

 

end

 

love2d如何实现背包系统

3、设置好基本的属性之后,我们创建一个Bag:draw()函数用来绘制背包。

然后在love.draw() 回调函数里面调用Bag:draw()函数。

新建一个函数bbl()用来绘制背包。

1、首先,在Bag:draw()函数里面,我们绘制背包图标,然后判断背包的状态是打开还是关闭,如果是打开再在bbl()函数中绘制背包栏。

function Bag:draw(...)

 

    -- body

 

    local font = love.graphics.getFont()

 

    love.graphics.setFont(zh_font)

 

    if self.bagImage == nil then

 

        lg.setColor(self.backgroundcolor)

 

        lg.rectangle("fill",self.x,self.y,self.width,self.height)

 

        lg.setColor(self.fontcolor)

 

        lg.print("BAG",self.x+40,self.y+20)

 

    else

 

        lg.draw(self.bagImage,self.x,self.y)

 

    end

 

    if self.click == true then

 

        bbl(self)

 

    end

end

2、然后我们在bbl函数中绘制背包栏边框,下一页按钮,已经存入的道具。

function bbl(bag)--背包栏

 

    -- body

 

    --画外框

 

    --bblisExit = true

 

    love.graphics.setColor(80, 20, 30, 200)

 

    love.graphics.rectangle("fill", 100, 100, 520, 450)

 

    love.graphics.setColor(200, 20, 30, 200)

 

    love.graphics.rectangle("line", 100, 100, 520, 450)

 

    love.graphics.setColor(10, 150, 100, 255)

 

    --for pg=1,bag.BAG.page do

 

        local pg = bag.curPage

 

        for i=1,bag.BAG.height do

 

            for j=1,bag.BAG.width do

 

                local bx = j*121

 

                local by = i*121

 

                love.graphics.rectangle("line", bx, by, bag.BAG.Size, bag.BAG.Size)

 

                if bag.bag[pg][i][j].value ~= 0  then

 

                    love.graphics.draw(bag.bag[pg][i][j].img, bx, by)

 

                end

 

            end

 

        end

 

    --end

 

    love.graphics.rectangle("line", bag.nextPage.x, bag.nextPage.y, bag.nextPage.width, bag.nextPage.height)

 

    love.graphics.setColor(100, 100, 255, 200)

 

    love.graphics.print("next", bag.nextPage.x+15,bag.nextPage.y+10)

 

    

 

    love.graphics.print(tostring(pg).."/"..tostring(bag.BAG.page),105,105)

 

end

love2d如何实现背包系统

4、以上,我们实现了一个背包的UI,但是一个背包系统不仅仅只有UI,我们至少还需要获取到鼠标点击到的格子的状态和获取其在背包数组中的位置,这样才能便于我们施行对应的操作。

所以我们创建一个函数 getij()用来获取鼠标所在项在背包数组中的位置。

function Bag:getij(bag,x,y)

 

    -- body

 

    for i=1,bag.BAG.height do

 

        for j=1,bag.BAG.width do

 

            if x > j*121 and x < j*121+121 and y > i*121 and y < i*121 +121 then

 

                return i,j

 

            end

 

        end

 

    end

 

end

获取到鼠标所在项在背包数组中的位置后,我们就可以在Bag:draw()函数中实现道具说明

if self.click ==true then

 

        local pg = self.curPage

 

        local mx,my = love.mouse.getPosition()

 

        local i,j = Bag:getij(self,mx,my)

 

        if i ~= nil and self.bag[pg][i][j].value ~= 0 then

 

            love.graphics.setColor(25, 100, 255, 100)

 

            --print(getalldata(self.bag[pg][i][j].shuxing))

 

            love.graphics.rectangle("fill", j*121+121, i*121-25, 150, 250)

 

            love.graphics.setColor(100, 100, 200, 100)

 

            love.graphics.rectangle("line", j*121+121, i*121-25, 150, 250)

 

        end

 

    end

我们可以在这个方框内显示装备的属性。

love2d如何实现背包系统

5、一个背包要能够放进去和取出来道具,我们创建Bag:add()和Bag:del()两个函数用来实现放进去和取出来的操作。

放进去:

function Bag:add(image,shuxing)

 

    -- body

 

    for pg=1,self.BAG.page do

 

        for i=1,self.BAG.height do

 

            for j=1,self.BAG.width do

 

                if self.bag[pg][i][j].value == 0 then

 

                    self.bag[pg][i][j].value = 1

 

                    self.bag[pg][i][j].img = image

 

                    self.bag[pg][i][j].shuxing=shuxing

 

                    --self.bag[pg][i][j].shuxing.gjl = shuxing.gjl

 

                    return

 

                end

 

            end

 

        end

 

    end

 

end

取出来:

function Bag:del(bag)

 

    local i,j = Bag:getij(bag,love.mouse.getPosition())

 

    if i == nil then return end

 

    local pg = bag.curPage

 

    bag.bag[pg][i][j].value = 0

 

    bag.bag[pg][i][j].img = nil

 

    bag.bag[pg][i][j].shuxing=nil

 

end

 

love2d如何实现背包系统

6、最后,在main.lua中调用Bag类的函数,实现背包系统。

love2d如何实现背包系统

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢