Love2d 几何坦克大战 - 1

本贴最后更新于 2970 天前,其中的信息可能已经时移俗易

经过两天断断续续的代码,实现了单个坦克的基本行为,也就是移动,射击,效果如下
test.gif
怎么样,看起来是不是有模有样?
而这个实现代码其实也非常简单,根据之前的教程,加上官方 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 不用写键值真是谢天谢地)

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

  • Love2D

    Love2D 是一个开源的, 跨平台的 2D 游戏引擎。使用纯 Lua 脚本来进行游戏开发。目前支持的平台有 Windows, Mac OS X, Linux, Android 和 iOS。

    14 引用 • 53 回帖 • 533 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • 88250

    传说中的连珠炮,厉害。

    2 回复
  • ZephyrJung

    😂 价格填充时间容易,但是我感觉玩家会等不及

  • haojieli

    我们那时候是一按下发射键 ,周围全是炮弹发出去 哈哈