Love2D游戏引擎制作贪吃蛇游戏

代码地址如下:
http://www.demodashi.com/demo/15051.html

Love2D游戏引擎制作贪吃蛇游戏

内附有linux下的makefile,windows下的生成方法请查看:

for windows

预览游戏

love2d游戏引擎重要函数

详情:

love2d wiki

  • love.load:当游戏开始时被调用且仅调用一次

  • love.draw:回调函数,每帧更新一次游戏画面

  • love.update:回调函数,每帧更新一次游戏状态

  • love.keypressed:回调函数,当有按键被按下时触发

  • love.filesystem.load:加载一个lua脚本文件但不执行

!其他的函数在用到时再做解释

版本区别以及初始化资源

!首先要注意的是,本次使用的游戏引擎时love 0.9版本,与最新的love 11.x版本稍有区别。在0.9版本中颜色使用0~255来表示,而在11.x版本中是0~1来表示。

因为需要制作的游戏非常小,所以我们将所用到的资源在第一时间将其初始化并加载到内存中,以便使用。使用到的资源主要有:

  • 字体

  • 颜色

  • 声音

  • 窗口大小与块大小

  • 标题

  • 边框

所用到的函数:

  • love.window.setMode:设置窗口大小,以及样式

  • love.window.setTitle:设置标题

  • love.graphics.newFont:加载字体文件,大小自定义,返回Font类型

  • love.audio.newSource:加载音效文件

代码如下:

function love.load ()
	-- 块大小,窗口宽高,标题
	cellSize = 20
	width = 20 * 40
	height = 20 * 25
	title = 'SNAKE !'

	-- 设置窗口大小和标题
	love.window.setMode (width, height)
	love.window.setTitle (title)

	-- 加载不同大小字体
	fonts = {
		pixies100 = love.graphics.newFont ('Fonts/Pixies.TTF', 100),
		pixies30 = love.graphics.newFont ('Fonts/Pixies.TTF', 30),
		pixies10 = love.graphics.newFont ('Fonts/Pixies.TTF', 10)
	}

	-- 加载音效资源
	sounds = {
		showMenu = love.audio.newSource ('Sounds/showMenu.wav', 'stream'),
		switchOption = love.audio.newSource ('Sounds/switchOption.wav', 'stream'),
		eatFood = love.audio.newSource ('Sounds/eatFood.wav', 'stream'),
		collided = love.audio.newSource ('Sounds/collided.wav', 'stream'),
		gameOver = love.audio.newSource ('Sounds/gameOver.wav', 'stream')
	}

	-- 边框数据
	border = {
		1, 1,
		width-1, 1,
		width-1, height-1,
		1, height-1,
		1, 1
	}

	-- 颜色数据
	colors = {
		darkGray = { 0.3, 0.3, 0.3, 1 },
		beiga = { 0.98, 0.91, 0.76, 1 },
		white = { 1, 1, 1, 1 },
		paleTurquoise = { 0.7, 1, 1, 1 },
	}

	SwitchScence ('Menu')
end

场景与其切换

!首先我们需要实现一个简单的场景切换函数,因为一个游戏总是有多个场景

  1. 先将love2d引擎的主要回调函数赋值nil以免之后出现错误
  2. 加载新场景的lua脚本
  3. 执行新场景的lua脚本

代码如下:

function SwitchScence (scence)
	-- 将重要的函数赋予空值,以免冲突
	love.update = nil
	love.draw = nil
	love.keypressed = nil

	-- 将需要的场景加载进来,并执行load函数
	love.filesystem.load ('Scences/'..scence..'.lua') ()
	love.load ()
end

-- 切换到初始化场景
SwitchScence ('Init')

绘制开始界面

在这里我们需要认识一些绘图函数:

  • love.graphics.setFont:设置当期字体

  • love.graphics.setColor:设置当前颜色

  • love.graphics.rectangle:绘制矩形

  • love.graphics.line:绘制直线

  • love.graphics.print:在窗口上输出

!绘制比较简单,其他详情都在代码里有详细注释,要注意的是我绘制选项的方法。options的有效长度并不是#options,而是options.count记录的选项数量

代码如下:

-- 游戏标题,以及绘制位置
local gameName = {
	text = title,
	textX 
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值