经过两天断断续续的代码,实现了单个坦克的基本行为,也就是移动,射击,效果如下

怎么样,看起来是不是有模有样?
而这个实现代码其实也非常简单,根据之前的教程,加上官方 wiki 的查询,以及群里大神的一两句指点就可以做出来啦~
示例的完整代码托管在 github 上,请戳链接
这里重点介绍部分代码(也就是根据大神指点查询 wiki 的部分)

--画坦克躯干
love.graphics.origin()
rotateGraph(centerX,centerY,Tank.bodyA);
love.graphics.rectangle("line", bodyX, bodyY, bodyW, bodyH)
--画坦克头部
love.graphics.origin()
rotateGraph(centerX,centerY,Tank.headA)
love.graphics.circle("line", centerX, centerY, Tank.headR, Tank.headS)
love.graphics.rectangle("line",fireX,fireY,Tank.fireW,Tank.fireH)
--画子弹
for i,v in pairs(bullets) do
  love.graphics.origin()
  -- rotateBuilet(v.angle)
  rotateGraph(v.cx,v.cy,v.angle)
  love.graphics.circle("line", v.x, v.y, 4,10)
end

love.graphics.origin

这个方法的作用时复原当前场景的状态。
这段代码对当前场景进行了旋转操作,为了实现局部旋转,每当画完要旋转的部分后,即将场景立刻复原。

rotateGraph

love.graphics.translate(posX, posY)
love.graphics.rotate(angle)
love.graphics.translate(-posX, -posY)

第一行,将坐标中心移动到指定位置
第二行,以该中心进行旋转,角度为 angle
第三行,将中心返回到初始位置

键盘两种监听方式

function keyboardLinstener(dt)
    if love.keyboard.isDown("a") then
        Tank.bodyA = Tank.bodyA - dt * math.pi/2
        Tank.bodyA = Tank.bodyA % (2*math.pi)
    end
    if love.keyboard.isDown("d") then
        Tank.bodyA = Tank.bodyA + dt * math.pi/2
        Tank.bodyA = Tank.bodyA % (2*math.pi)
    end
    if love.keyboard.isDown("w") then
        moveTank(-1,dt)
    end
    if love.keyboard.isDown("s") then
        moveTank(1,dt)
    end
    if love.keyboard.isDown("q") then
        Tank.headA = Tank.headA - dt * math.pi/2
        Tank.headA = Tank.headA % (2*math.pi)
    end
    if love.keyboard.isDown("e") then
        Tank.headA = Tank.headA + dt * math.pi/2
        Tank.headA = Tank.headA % (2*math.pi)
    end
end

function love.keyreleased(key)
   if key == "j" then
          tankFire()
   elseif key == "k" then
           Tank.bullets=Tank.maxbs
       end
end

keyboardLinstener 这个方法需要放到 update 中持续执行,每次执行的时候判断某个键是否按下,这样可以做出持续键盘事件的效果
而 love.keyreleased 是一个独立的方法,实现就能进行监听。功能如其名称,当某个键按下的时候触发(相比 html5 不用写键值真是谢天谢地)

好啦,就写这么多。不好意思,又发了一篇绝大多数人不看,看的人又有大部分并不能看懂的帖子
做游戏是个很有意思的数学过程,希望将来这个引擎能流行于初中学校之间,对于提高思维能力一定很有帮助,为我国培养出更多优秀的人才
说的我有点想笑,哈哈哈