【问题标题】:All these projectiles going in 1 direction所有这些射弹都朝着一个方向
【发布时间】:2016-11-15 05:34:25
【问题描述】:

伙计们,基本上我在 Lua 的不同位置(不想在这里发布所有代码)有这段代码。我想在love2d上做一个游戏。我的问题是:我的弹丸总是朝一个方向前进。我什至制作了 projectile.animnumber 但它仍然可以朝 1 个方向前进。有什么办法可以拆分这个庞大的。 (我是新手,所以不要喷我太多)

projectile = {}
   projectile.width = 30
   projectile.height = 32
   projectile.animNumber = 1    


function love.keyreleased(key)
        if (key == "space") then
            shoot()
            love.audio.play(magic_shotSND)

            if player.animNumber == 1 then 
                projectile.animNumber = 1

            elseif player.animNumber == 2 then 
                projectile.animNumber = 2

            elseif player.animNumber == 3 then 
                projectile.animNumber = 3

            else 
                projectile.animNumber = 4
            end

        end
    end

    -----

    for i,v in ipairs(player.shots) do
            if projectile.animNumber == 1 then 
                v.x = v.x + 300 * dt

            elseif projectile.animNumber == 2 then 
                v.x = v.x - 300 * dt

            elseif projectile.animNumber == 3 then 
                v.y = v.y + 300 * dt

            else 
                v.y = v.y - 300 * dt

            end
        end


    ----


    function shoot()
        local shot = {}
        shot.x = player.x - 16
        shot.y = player.y - 8
        table.insert(player.shots, shot)
    end


    for i,v in ipairs(player.shots) do 
            love.graphics.draw(skull, v.x, v.y)
        end

【问题讨论】:

  • 可能,您有两个不同的projectile 表?
  • 什么是“弹丸”?这是在您的代码中编写的随机单词。我认为你的意思是从 shoot() 中返回射弹
  • 射弹是一个物体。我用它来描述行为。忘记添加了。 projectile = {} projectile.width = 30 projectile.height = 32 projectile.animNumber = 1
  • 玩家 animnumber 是我用来识别玩家最后移动方向的变量,因此他将使用正确的角度进行动画。

标签: animation lua directions love2d projectile


【解决方案1】:

将所有“projectile.animNumber”替换为“v.animNumber”

我认为问题是这样的:

for i,v in ipairs(player.shots) do
    if projectile.animNumber == 1 then 
        v.x = v.x + 300 * dt

    elseif projectile.animNumber == 2 then 
        v.x = v.x - 300 * dt

    elseif projectile.animNumber == 3 then 
        v.y = v.y + 300 * dt

    else 
        v.y = v.y - 300 * dt

    end
end

在您的 for 循环中,您正在检查 projectile.animNumber 以前没有出现在您的代码中。因此,使 else 语句为真并导致所有射弹向 1 个方向行进。

如果让您感到困惑,请见谅;我不太擅长解释事情

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-27
    • 2014-06-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多