随笔分类 - 游戏开发
记录在游戏开发中遇到的点点滴滴
摘要:昨天折腾了大半天参考了铁血丹心论坛里各位前辈的经验,还只是完成了一点,先记录一下,以后再补充。大家可以下载金庸群侠的dosbox版(以下简称“金”),资源文件在game目录下。一、文件纵览“金”的文件命名很有规律,图片文件分为“.idx、.grp、.col”,分别是图片索引、图片数据、调色板。图片索引里保存着对应图片在图片数据里的地址。若我们要载入第5幅图片,则先到.idx里其地址,软后到对应的.grp里取数据,取出后再按调色板显示。文件列表: 1.所有人物头像 hdgrp.grp hdgrp.idx 2.所有武功效果 eft.grp eft.idx 3.所有武功动作 figh...
阅读全文
摘要:游戏里如何存档是个问题,前几天有网友问到这个问题,我便找了一些资料看了一下。加密方法有很多,最简单的便是以下三种:1、移位比如a--z,每个字母都向后移动3位,这样"hello"加密后就变成了"khoor"了2、密码表按指定一个顺序表示,如规定h---w,e---o,l---r,o---l,这样"hello"加密后就成了"worrl"3、简单的四则运算比如a--z代表1--26,现在我们做规定x=(x+4)*3%26 ,这样"hello"加密后加变成了"javvq"现代的高级
阅读全文
摘要:转载:来自朱大仙,感谢他的博客,并让我发布。hump.timer是一个很强大的模板.是一个老外写的. 源博客请点这里hump.timer是hump的系列之一.hump 还有许多不为人知的功能.英文好的或善于阅读网页翻译的同学可以去看源博客.hump.timer提供了一个简单的安排时间的执行函数。可以在一些时间后运行功能。例如,可以设置一个计时器,每5秒移动敌人一次或玩家在短时间类无敌。模板名称new()创建新的定时器对象add()添加一个函数addPeriodic()添加一个周期函数do_for()在接下来的几秒运行一个函数cancel()取消预定的函数clear()删除所有的定时器和周期函数
阅读全文
摘要:来自老外博客,鼠标拖动原文链接,发光效果原文链接。鼠标拖动这个就是检测鼠标是否在绘图区域按下,还要注意拖动时的坐标要减去鼠标坐标与绘图区左顶点的差值。function love.load() rect = { x = 100, y = 100, width = 100, height = 100, dragging = { active = false, diffX = 0, diffY = 0 } }end function love.update(dt) if rect.dragging.active then rect.x = love.mous...
阅读全文
摘要:剪切系数终于找到了love2d里love.graphics.draw()中shearing factor的解释,至于具体是什么还是不知,涉及到矩阵变换,这里是链接,另外还有一个专业的数学网站。shearing factor的kx为正时图形以ox,oy为中心会向左偏,为负右偏;ky为正时向下偏,为负上偏。自定义鼠标这个是在老外的博客上看到的,实现如下,不是很难。cursor:getWidth() / 2, love.mouse.getY() 是设置图片中心。function love.load() cursor = love.graphics.newImage("crosshair.p
阅读全文
摘要:今天花了点时间把输入法修正了一下,可以删除中文了。其实lua可以直接使用string.sub()来截取汉字字符串(注意此时一个汉字占两个字节),love里也可以用,不过在回调函数里的循环里一用就提示内存不够,不知为什么。后来我突然想到何不用table试试,于是重新改写了一下,终于完成了,并提供了供其它类调用的借口,方便移植。其实输入法关键是词库,我只是用的在网上找的一个文本格式的词库,然后改成了lua的table。代码注释的很详细了,我就不多说了。功能如图:(首先按f12键开启输入法)支持输入汉字、小写字母、数字、空格、英文的逗号和句号,"-"键上翻页,"=&qu
阅读全文
摘要:所谓杂记指不成系列的,主要记一些在官方论坛看到好玩内容,及一些想法。虽然love2d没有提供播放视频的函数,不过我在她的论坛里看到有些hacker实现了用纯lua播放视频,原理这是把视频文件转换成许多帧图片和音频,然后控制音频和图片的播放。需要用到其它软件,而且特别的占内存,我觉得只能播放很小的视频片段,不是很有用,原文在此。由于不实用,过程比较麻烦,我就不写过程了,给出两个作者制作好的love文件,清晰版,模糊版。我在金庸群侠传sdl版里发现它用的是smpeg来播放视频,到时候看可不可以把smpeg合到love里。
阅读全文
摘要:惭愧,在春节里一篇文章也没写,现在又回到学校了,继续love2d教程。由于我 只是现看现写,有些地方可能错了,希望大家指正,我会及时修正。这篇文章主要关 于loveframes的应用,是按网友朱大仙要求写的,原文在此。 背包功能是通过loveframe来实现的,loveframes其实是支持中文的,只需要修改 loveframes中的init.lua和skins目录下的皮肤文件夹中的skin.lua的字体设置。我另 外建了一个font.lua来保存全局的字体配置,在init.lua和skin.lua里使用全局字体, 这样可以减少内存的消耗,也便于管理...
阅读全文
摘要:这几天在折腾linux,几乎把我折腾怕了,不过终于搞定了。下面继续love2d物理引擎的回调处理。1、创建世界 world2、使用world:setCallbacks(beginContact, endContact, preSolve, postSolve),这四个参数即回调函数的名字(名字任意),分别在两个物体开始接触,结束接触,碰撞发生前,碰撞结束后调用。3、回调函数的参数为(fixure1,fixture2,contact) (参数名字任意)即碰撞两物体的形状,碰撞产生的contact。之后发生碰撞后物理引擎会自动调用我们的回调函数,并传给回调函数(fixure1,fixture2,c
阅读全文
摘要:国际化一般都是把字符串资源放到单独的文件里,这样加载不同的语言文件就可以实现国际化了。下面介绍的是love的babel库。首先我们先看一下它的语言文件格式:LANGUAGE = { formats = { -- 作者说保留以后实现 }, -- List of all the translations translations = { -- [""]里的是原始字符串,等号后面是翻译后显示的字符串 ['Hello world'] = "Bonjour le monde", --可以使用变量替换,类似c里的宏,%%里的内...
阅读全文
摘要:love虽然没有提供直接操纵顶点颜色的函数,但是提供了和glsl-1.2(opengl着色语言)兼容的pixeleffect. 这相当于鸟枪换炮,当然先应的难度也加大了.什么是着色语言?它是在显卡上执行的可编程渲染管线(显卡在处理 数据的时候是按照一个固定的顺序来的,而且严格按照这个顺序,所以叫管线),具体见 百科.glsl还是比较复杂的,这里是csdn上的一系列教程. 我只是大致看了一下,也没动手,不过在love2d官方论坛找到了一些示例.下面大概说明一下glsl.glsl分为顶点着色器和片元着色器. 数据类型有基础类 int,float向量类 vec2、vec3、vec4 (float..
阅读全文
摘要:本来该早点写完的,可是由于一些小问题,拖到现在了,不过也好,我决定以后使用middleclass来实现面向对象.角色移动也就是对动画的进一步加强,方便调用.先上图,说明代码移植自以前学习hge时在网上下载的教程,不知原作者,如果你知道请告知,我会补上.(数字1切换行走,2切换跑步,注意是键盘字母区的1,2)对于rpg游戏,角色肯定是经常用到,因此我们需要一个角色类.require('Anim')require('middleclass')RpgRole=class('RpgRole')--方向常数RpgRole.static.DOWN=1RpgR
阅读全文
摘要:本来我是新把动画和角色移动写在一块的可是出现了很多问题,特别是笔误程序调了很久,还是不稳定.后来觉得,应该把动画和角色移动分开,因为还有其它的运动也需要动画,这样才合理.动画(animation)实际就是快速的显示一系列连续的图片,这些图片组成完整的动作,这样人眼看起来就动起来了.既然是连续运动,那么怎么控制时间就很重要了.一开始我看了一下dt(update里的dt)的大小,大概60-70的dt一秒,于是就在统计update(dt)里统计其调用次数,后来写的挺好的拿到同学的机器上一试居然不动了.立即回去修改,可是半天也没发现怎么回事,后来我输出了一下dt,又到同学的机器上试了一下原来在他机器上
阅读全文
摘要:zorder用来控制绘图的先后顺序,可惜love2d里没有zorder,我们需要自己控制绘图的先后顺序,即在love.draw()回掉函数中的先后顺序.可是这带来了不便当有很多绘图动作时,代码太多便弄不清先后了.我们可以自己增加一个z顺序的函数,每次添加绘图对象时,便把顺序设置好.这里我把zorder的取值范围设为0.0--1.0,值越下越靠近屏幕,值越大越远离屏幕,可以把zorder视为绘图对象离屏幕的距离.下面我们来把下面三张图合成为以幅完整的图:图片来自http://en.wikipedia.org/wiki/Parallax_scrolling下面是显示效果:左边的使用zorder,右
阅读全文
摘要:接着上一篇的教程,我们现在可以四处移动了,但是地图是有限的,玩家在移动过程中会走出地图外,我们可以加边界限定.现在要实现当玩家超出限定时地图不动的效果.这次的代码更改如下:camera.lua里增加边界设置--左上角,右下角的坐标function camera:setBounds(x1, y1, x2, y2) self._bounds = { x1 = x1, y1 = y1, x2 = x2, y2 = y2 }end更改设置偏移的函数,setY()和setX类似,完整的代码请看附件.--设置摄相机的x偏移,如果value在左右边界之间,那么设置--摄相机的x偏移为value;若valu.
阅读全文
摘要:说明,我只是在网上浏览时发现了“金庸群侠传lua复刻版”,有源码,基于sdl使用C语言,我大概看了一下不是很懂。后来发现了love2d,也是基于sdl,于是便有了用love2d再复刻一遍的想法。lua可以很容易的与c/cpp结合,对于一些消耗资源的事可以用c/cpp编码,然后给lua调用。由于我也是初学者,代码很乱,而且都是用的简单又笨的方法,如果有好的建议希望您慷慨指出!我准备用一年的课余时间来实现这个想法,love2d的教程也一直写到做出完整的“金庸群侠传”。love2d文档http://pan.baidu.com/share/link?shareid=140069&uk=1913
阅读全文
摘要:”说明,在love2d的wiki上以下的这些操作都比较费时,建议不要在draw和update里重复加载同样的数据, 而是创建以后保存以重复使用。” 材质可以简单的说是一些图片素材,love2d可以从文件和ImageData(可以看作内存中的图像数据) 载入图片image=love.graphics.newImage(path或imagedata),返回一个Image对象(可以被画在屏幕上) 说明只能从main.lua所在文件夹为相对路径,载入图片,不能使用外面的图片。 显示图片使用love.graphics.draw(image, x, y),x、y为显示在屏幕上的坐标(说明d...
阅读全文
摘要:love的绘图函数,共有以下7个,以"love.graphics."开头line 直线quad 矩形arc 弧线point 点rectangle 多边形circle 圆triangle 三角形drawmode有line和fill两种,分别指轮廓和填充blendmode有additive alpha subtractive multiplicative premultipliedcolormode有modulate,replace,combine以上具体的说明请看love的wiki下面说一下文字。可以直接使用love.graphics.print()输出文字,其实love2d
阅读全文
摘要:首先,新建一个文件夹,以及main.lua和conf.lua。conf.luafunction love.conf(t)--设置标题和窗口大小t.title = "my first love" t.screen.width = 240t.screen.height = 320endmain.lua,这里暂时是几个空的常用回调函数function love.load() --资源加载回调函数,仅初始化时调用一次endfunction love.draw() --绘图回调函数,每周期调用endfunction love.update(dt) --更新回调函数,每周期调用endf
阅读全文
摘要:0、love2d介绍LÖVE是一个使用 Lua 作为编程语言的轻量级 2D 游戏框架。LÖVE是完全免费的,能用在任何友好的开源项目,或者“邪恶”的闭源商业项目中。LÖVE基于zlib/libpng 协议发布。目前能够在Windows、Linux和Mac OS X下实现跨平台,Android版本正在开发中,可以找到0.72的android版,另外网友告知有ios移植版,这样我们写的游戏就可以夸5个平台了! 1、windows和linux的安装都可到官网下载www.love2d.org要想学好love2d要多看它的wiki,https://love2d.org/wi
阅读全文

浙公网安备 33010602011771号