Love2D 标签

Love2d 几何坦克大战 - 1

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

阅读全文 »

LoveExample-18 向指定的位置发射子弹

Long time no see~ 虽然可能本来看的人也不多吧 示例在视觉上其实很朴素,不过实现了定点射击的功能,这个功能感觉还是比较常用的。 大概思路就是,在 update 方法中,不断将获取到的鼠标位置(如果点击了话)放到表中,同时又不断的从表中取出存放的子弹信息进行绘制。 逻辑上并不难,但是有些 lua 语言本身的点。 代码如下: function love.load() SPEED = 250 StartPos = {x=250, y=250, width=50, height=50} --The starting point that the bullets are fired from, acts like the shooter. bullets={} --The table that contains all bullets. end function love.draw() --Sets the color to red and draws the "bullets". love.graphics.setColor(255, 0, 0) --This loops t....

阅读全文 »

LoveExample-17 使用特殊字体

这里只是英文字体,似乎对中文字体支持的不是很好 还好,按照我对它的用法,大概是写不了多少中文的 其实非剧情类的,一般的英文也没什么障碍了 -- Example: Using a truetype font function love.load() -- Create a new font with 32pt size and set it as default. local f = love.graphics.newFont("assets/Grundschrift-Normal.otf", 24) love.graphics.setFont(f) end text = [[ Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incid....

阅读全文 »

LoveExample-15~16 图片旋转

平面旋转,也即 xy 旋转,本人自创的词儿 效果就是向月亮环绕地球的旋转,只不过不自转 -- Example: Rotating images angle = 0 function love.load() image = love.graphics.newImage("assets/love-ball.png") end function love.update(dt) angle = (angle + dt) % (2 * math.pi) --决定了图片的向心旋转 x, y = 400 + math.cos(angle)*100, 300 + math.sin(angle)*100 --决定了图片位置的旋转 end function love.draw() --image:图片本身 --x,y:图片位置坐标 --angle:图片旋转角度,加上这个参数,会在指定位置上旋转图片指定角度 love.graphics.draw(image, x, y,angle) end love 本身的 API 还是很好理解的,问题是在于数学函数的运用,用什么样的函数做出什么样的运动轨迹,很考验数学....

阅读全文 »

LoveExample-12~14 自定义鼠标、键盘控制位移

看到这段代码我是一脸蒙逼,我之前的推测竟然是打脸么? function love.load() -- Load the "cursor" (with default hot spot 0, 0) cursor = love.mouse.newCursor("assets/love-cursor.png") -- Set the cursor love.mouse.setCursor( cursor ) end 然而并不是—— function love.load() -- Load the "cursor" image = love.graphics.newImage("assets/love-ball.png") -- Hide the default mouse. love.mouse.setVisible(false) end function love.draw() -- Draw the "cursor" at the mouse position. love.graphics.draw(image, love.mouse.getX(), love.mouse.getY()....

阅读全文 »

LoveExample-11 Animation

这一节引用了外部库,没看懂,先占个位,再研究。。。 -- Example: Create and use an Animation require("animation") function newImagePO2(filename) local source = love.image.newImageData(filename) local w, h = source:getWidth(), source:getHeight() --math.ceil 返回不小于参数的最小整数 --math.pow(x,y)==x^y:x的y次方 --math.log(x [, base]):返回以指定底的 x 的对数。 默认的 base 是 e (因此此函数返回 x 的自然对数)。 -- Find closest power-of-two. --local wp = math.pow(2, math.ceil(math.log(w)/math.log(2))) --local hp = math.pow(2, math.ceil(math.log(h)/math.log(2))) local wp....

阅读全文 »

LoveExample-5..10 设置指针可见性、获取输入键等

接下来的几篇 demo 都很简单,一片一片的写没什么意义,说起来之前三篇其实也可以合起来,事已至此,先这样吧 [5] 获取鼠标按键,代码本身就已经做了很好地说明了: function love.load() love.graphics.setFont(love.graphics.newFont(11)) end function love.draw() -- Left mouse button. if love.mouse.isDown(1) then love.graphics.print("Left mouse button is down", 50, 50) end -- Right mouse button. if love.mouse.isDown(2) then love.graphics.print("Right mouse button is down", 50, 100) end -- Middle mouse button. if love.mouse.isDown(3) then love.graphics.print("Middle mouse button ....

阅读全文 »

LoveExample-3 设置鼠标位置

次新代码并不多,加上已经很晚了,也就不再多说,看代码就好 -- Example: Setting the mouse position function love.load() love.graphics.setFont(love.graphics.newFont(11)) end function love.draw() love.graphics.print("Press a key to move the mouse to a random point", 50, 50) end -- Press a key to move the mouse to -- some random point. function love.keypressed(k) local x, y = math.random(0,800), math.random(0,600) love.mouse.setPosition(x, y) end 这个函数的意义,大概在于可以设置鼠标自动到某个按钮的位置上吧。

阅读全文 »

LoveExample-2 获取鼠标位置

本系列算是入门练习,只讨论代码表面功能,不做深入研究 拟在最后用这些内容实现一个小游戏,还没想好,学完再说吧 function love.load() love.graphics.setFont(love.graphics.newFont(11)) end function love.draw() -- Gets the x- and y-position of the mouse. local x, y = love.mouse.getPosition() -- Draws the position on screen. love.graphics.print("The mouse is at (" .. x .. "," .. y .. ")", 50, 50) end newFont 里面大概设置了字体大小,11 的效果感觉很小,不知道其单位是啥,不重要,日后再看吧…… 这里涉及 lua 比较独特的语法,顺手搜了一个教程:lua 教程 Lua 可以对多个变量同时赋值,变量列表和值列表的各个元素用逗号分开,赋值语句右边的值会依次赋给左边的变量。 运算符 .. :两个英文句号,....

阅读全文 »

LoveExample-1 加载图片

本帖为系列代码研习教程,项目地址:Love-Example-Browser 第一节代码很短: function love.load() image = love.graphics.newImage("assets/love-ball.png") end function love.draw() love.graphics.draw(image, 400, 300) end 总这段代码看,读取文件的基准目录,应该是 main.lua 所在的地方,无论这段代码是否写在了 main.lua 中。 如此,有几个问题有待实践验证 文件基准是否为 main.lua,如果这段代码在别处是否依然以 main.lua 为准?上级目录是否能访问到? draw 方法后面跟了两个参数,这两个参数是否会影响图片的大小?

阅读全文 »

Love2D开发环境的搭建

说到开发环境,大概很多人都被 Java 的 JDK,Maven 什么的环境变量折磨过 此外还要在 eclipse 里面配置默认 JDK,maven 设置文件,tomcat 路径等等等等 好在 Sym 用 Jetty 省略了 tomcat 的配置,也不用先 build 再 install 再启动 tomcat 了 Love2D 的开发环境十分方便,Sublime Text 足矣,也有 IDE 如 ZeroBrane,搜索下载即可,这里不再赘述 1. 在官网下载 love 安装包 2. 打开 Sublime Text(以 3 为例),点击 new build system 3. 输入如下配置: { "selector": "source.lua", "cmd": ["C:/Program Files/LOVE/love.exe", "${projectpath:${filepath}}"], "shell": true, "file_regex": "^Error: (?:[^:]+: )?([^: ]+?):(\d+):() ([^:]*)$" } 只需要替换下 love 的安装路径....

阅读全文 »

使用 Love2D 写一个贪吃蛇小游戏

以下文字均为本人原创,因此有可能说错什么,请不要介意,欢迎指正~ 代码由 Alexar 大大所写(自己实现的那版结构比较乱而且有 bug…),群号见下部隐藏区域 love2d 引擎的代码结构 function love.load() --资源预加载 end function love.update(dt) --实时渲染 end function love.draw() --绘图 end 是不是很简单,通过 load 方法加载资源,或者做一些预处理,通过 draw 方法绘制想要的图案,再通过 update 不断刷新画面,一个游戏或者动画就形成了。 love2d 引擎的游戏,均以 main.lua 文件作为入口(我就是喜欢这种由确切入口的,有迹可循),而 main.lua 中,上述三个方法是必须的,其实还有个隐藏的主函数 love.run(),用以调用这三个方法。如果有什么特殊要求,可以自定义主函数,直接写出就会覆盖(有点像 java 的构造函数规则)。从官方 wiki 中可以看到run 的代码: function love.run() if love.math then love.m....

阅读全文 »