love2d自学笔记(三)运行问题

love2d 中遇到的问题与解决办法

引言

黑色标题表示低级错误:语法错误等
黄色标题表示中级错误:逻辑错误等
红色标题表示高级错误:未知

Q1:表内代码无序性报错

function love.load()
    Myimage = {
        image = love.graphics.newImage("ghost1.png"),
        x=200,
        y=300,
        speed=500,
        width=image:getWidth(),
        height=image:getHeight()
    }
    end
    ---------------------------------
    erro:image未定义

当时我在想我不是已经声明image = love.graphics.newImage("ghost1.png"),为什么提示我image未定义。后面通过gpt了解到,是在表中的键值对的执行是无序的,所以可能先执行的是height=image:getHeight(),后执行的是image的声明,所以才提示我image未定义。

解决办法

function love.load()
    image = love.graphics.newImage("ghost1.png") --在表外先声明
    Myimage = {
        image=image,
        x=200,
        y=300,
        speed=500,
        width=image:getWidth(),
        height=image:getHeight()
    }

Q2: 人物朝向变化时x值变化过大

如果初始人物朝向是右,当我按下“←”时人物应该转向且人物的位置不应该变化不大。但是实际运行中,人物在每次变向的过程中其位置至少偏移了一个身位。
在这里插入图片描述

通过了解love.graphics.draw()参数得知,如果不设置中心点则变向则以图形的边界为轴进行翻转。
图片大小是1024x1024,所以我可以设置中心点为512,512,代码如下:
love.graphics.draw(Myimage.image, Myimage.x, Myimage.y, 0, direc, 0.3, 512, 512)
效果如下:

在这里插入图片描述
从图上可以看出,当人物反向运动时人物的位置不再大幅变动,满足我们的需求。

Q3:love.graphics.setColor() 的疑惑

刚学这个函数有点疑惑,目前有一个小球对象,如果我需要单独对小球上色,应该是小球调用setcolor()才对,但是看了教程代码发现并没有使用这样的方法,而是简单的一句love.graphics.setColor() ,那如何做到对不同的小球上色呢?t

通过gpt查询得知,该函数调用后会指定全局使用某种颜色,除非再次使用该函数调用另外一种颜色。

Q4: 提示block.lua中Object无定义

低级错误

<main.lua>

function love.load()
   require "Classic"  -- 改为Object = require "Classic"  ,报错消失
   require "block"
   block = Block
   blockList = {{3,2},{3,3}}
end

function love.update(dt) 
end

function love.draw() 
end

<block.lua>

Block = Object:extend()
function Block:new()
    local block = {}
    block.x = math.random(10)
    block.y = math.random(10)
    return block
end

function Block:draw()
    for k, v in pairs(blockList) do
        love.graphics.rectangle("fill",(v.x-1)*30,(v.y-1)*30,30,30)
    end
end

<Classic.lua>

-- classic.lua: A simple class module for Lua
local Object = {}
Object.__index = Object

function Object:extend()
    local cls = {}
    for k, v in pairs(self) do
        if k:find("__") == 1 then
            cls[k] = v
        end
    end
    cls.__index = cls
    cls.super = self
    setmetatable(cls, self)
    return cls
end

function Object:new()
end

function Object:__call(...)
    local instance = setmetatable({}, self)
    instance:new(...)
    return instance
end

return Object

<block.lua>中Block = Object:extend()报错Object无定义,刚开始我认为require Classic.lua会返回一个Object,所以没有在<main.lua>中用Object去接库里返回的Object,导致Object无定义,所以<block.lua>里使用Object类就会直接报错

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值