簡體   English   中英

lua中的沖突和OOP

[英]Collision and OOP in lua

因此,我使用基本的OOP在love2D中制作了基本的碰撞系統。

function love.update(dt)
    player:update(dt)
    for _, rect in pairs(randomRectangles) do
        local collides,mtv,side = collider:collidesMTV(player,rect)
        if collides then 
            print(side)
            player:collide(collides,mtv,side)
        end
    end
end

mtv是碰撞零件時移動零件的最小平移,而側面是碰撞零件的側面。

問題是,我希望能夠在player:collide函數中做到這一點,如下所示:

function player:collide(colliding,mtv,side)
    if colliding==true and side=="top" or colliding==true and side == "bottom" then
        self.Position=self.Position-mtv
    end
    if colliding==true and side=="left" or colliding==true and side == "right" then
        self.Position=self.Position-mtv
        self.Gravity=-0.1
    end
    if not colliding and self.Gravity ~= -0.95 then
        self.Gravity=-0.95
    end
end

我可以做到,當它不發生碰撞時,將重力設置回正常,但是如果我在其中添加了elseif / else語句以表示不發生碰撞,那么如果它與一個塊發生碰撞,它也會這樣做,因為還有30個其他塊在屏幕上顯示塊,並且不會將重力設置為-0.1,因為如果有任何意義,它將始終將其設置為正常重力。

我該如何解決?

也許簡單的提取外的碰撞行為collide的方法? 這是一個主意:

function player:collide(colliding,mtv,side)
    if colliding==true and side=="top" or colliding==true and side == "bottom" then
        self.Position=self.Position-mtv
    end
    if colliding==true and side=="left" or colliding==true and side == "right" then
        self.Position=self.Position-mtv
        self.hasSideCollision = true
    end
end

function player:computeGravity()
    if player.hasSideCollision then
        self.Gravity = -0.1
    else
        self.Gravity = -0.95
    end
end

function love.update(dt)
    player:update(dt)
    player.hasSideCollision = false

    for _, rect in pairs(randomRectangles) do
        local collides,mtv,side = collider:collidesMTV(player,rect)
        if collides then 
            print(side)
            player:collide(collides,mtv,side)
        end
    end

    player:computeGravity()
end

處理重力應該在玩家級別上處理,而不是在單個碰撞級別上處理。

編輯

考慮了方向,並將重力邏輯移到了自己的方法中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM