摘要: 图形界面给我们使用电脑带来了方便,可是那些按钮,文本框,工具栏等究竟是怎么实现的呢?其实它们都是系统画出来的,我们编程时使用那些控件就是调用系统封装好的画图操作,当然控件还必须有事件处理.现在windows下流行的界面库好多都是使用directui技术,即直接绘图.在示例里我使用love里的retangle函数,来实现一个简单的按钮,并实现一个简单的按钮事件.上图(没什么立体效果).其实就是画了一大一小两个矩形,小矩形的颜色比大矩形深.每次在love.update(dt)里检测鼠标的位置是否在小矩形区域内和鼠标左键是否按下.事件的处理是传入自定义的处理函数给onClick(fun),在upda 阅读全文
posted @ 2013-01-04 22:17 半山th 阅读(2794) 评论(8) 推荐(0) 编辑
摘要: Codeblocks更新到12.11了,可是软件中心还是10.01的.在codeblocks的官网找了一下发现了ubnutu的ppa, sudo apt-add-repository ppa:pasgui/ppa,可是不知道是否和以前的配置冲突,还是其它原因,编辑器居然没有多标签.于是想做一个绿色试试.到其wiki上以portable搜索果然找到了方法.如果不是像我一样喜欢折腾的同学,建议使用ppa安装.先到官网,下载codeblocks_12.11-1_i386-debian-stable.tar.bz2,解压后回得到一些deb包,把它们解压,在此搜索”user”,会得到一些”user”文件 阅读全文
posted @ 2013-01-03 20:43 半山th 阅读(900) 评论(6) 推荐(0) 编辑
摘要: 这次主要介绍两个批量绘图的结构canvas和spritebatch,到此love.graphics模块的数据类型就基本介绍完了.canvas(0.8之前是framebuffer,现已不用)画布用于离屏渲染,你可以认为它是一个不可见的屏幕,能在上面绘图,但是玩家看不见它,直到你把它绘制到实际的屏幕上。它也被称为“渲染到纹理”。把不常动的物体(如背景)绘制到画布上,之后把整个画布绘制到屏幕上,可以提高效率.spritebatch批量精灵(我直译的),可以仅使用一次draw绘制单一图像的任意数量副本。把图像纹理集 (包含许多独立图像的单个图像)添加quad到批处理,可以绘制纹理集中的的不同子图(就是 阅读全文
posted @ 2013-01-03 13:20 半山th 阅读(1506) 评论(1) 推荐(0) 编辑
摘要: love虽然没有提供直接操纵顶点颜色的函数,但是提供了和glsl-1.2(opengl着色语言)兼容的pixeleffect. 这相当于鸟枪换炮,当然先应的难度也加大了.什么是着色语言?它是在显卡上执行的可编程渲染管线(显卡在处理 数据的时候是按照一个固定的顺序来的,而且严格按照这个顺序,所以叫管线),具体见 百科.glsl还是比较复杂的,这里是csdn上的一系列教程. 我只是大致看了一下,也没动手,不过在love2d官方论坛找到了一些示例.下面大概说明一下glsl.glsl分为顶点着色器和片元着色器. 数据类型有基础类 int,float向量类 vec2、vec3、vec4 (float.. 阅读全文
posted @ 2013-01-01 22:19 半山th 阅读(1983) 评论(3) 推荐(0) 编辑
摘要: (下面的说法没有求证,是我估计的)粒子从名字可以看出是一种较小的东西,在游戏中粒子也是小的图片(也有大的).我估计招式就是用粒子效果做的.粒子效果就是把一个图片用不同的方法(旋转,缩放,平移等)不断的在屏幕上,按照预设随机的生成许多粒子.这样看起来就很华丽了.下面看一下效果(这个效果是截取的hge里的)love2d自带particialsystem,可是仅支持Image类型,不支持Quad,这样就只能把每个粒子作为单独的图片存放,不方便阿.当然我们也可以利用love.graphics里的函数自己实现一个,不过你看看wiki里的particialsystem的属性个数,实现起来它复杂了.后来我在 阅读全文
posted @ 2012-12-29 16:21 半山th 阅读(2425) 评论(4) 推荐(0) 编辑
摘要: 本来该早点写完的,可是由于一些小问题,拖到现在了,不过也好,我决定以后使用middleclass来实现面向对象.角色移动也就是对动画的进一步加强,方便调用.先上图,说明代码移植自以前学习hge时在网上下载的教程,不知原作者,如果你知道请告知,我会补上.(数字1切换行走,2切换跑步,注意是键盘字母区的1,2)对于rpg游戏,角色肯定是经常用到,因此我们需要一个角色类.require('Anim')require('middleclass')RpgRole=class('RpgRole')--方向常数RpgRole.static.DOWN=1RpgR 阅读全文
posted @ 2012-12-28 18:41 半山th 阅读(2135) 评论(4) 推荐(0) 编辑
摘要: 昨天本来还想写一篇love2d之角色移动的,可是不知怎么回事,我在一个类里有setXY(),在love.load()里调用了,可是居然没按我的预想坐标,而是直接显示在了顶点.后来各种print,发现确实是调用了,但就是不显示,郁闷,只好作罢.后来也想不出原因,于是又看了一下lua面向对象,想到以后可能很多地方会用到类,便想找一个简洁的lua面向对象的扩展.先推荐一个很好的lua博客,当lua语法不懂时,我常去翻阅.到http://lua-users.org翻了一下,发现了一些面向对象的扩展,最终选择了middleclass.middle意为中等,表明其是中等规模的面向对象实现(作者介绍的),官 阅读全文
posted @ 2012-12-27 12:06 半山th 阅读(3085) 评论(1) 推荐(1) 编辑
摘要: 本来我是新把动画和角色移动写在一块的可是出现了很多问题,特别是笔误程序调了很久,还是不稳定.后来觉得,应该把动画和角色移动分开,因为还有其它的运动也需要动画,这样才合理.动画(animation)实际就是快速的显示一系列连续的图片,这些图片组成完整的动作,这样人眼看起来就动起来了.既然是连续运动,那么怎么控制时间就很重要了.一开始我看了一下dt(update里的dt)的大小,大概60-70的dt一秒,于是就在统计update(dt)里统计其调用次数,后来写的挺好的拿到同学的机器上一试居然不动了.立即回去修改,可是半天也没发现怎么回事,后来我输出了一下dt,又到同学的机器上试了一下原来在他机器上 阅读全文
posted @ 2012-12-25 10:22 半山th 阅读(3438) 评论(11) 推荐(1) 编辑
摘要: zorder用来控制绘图的先后顺序,可惜love2d里没有zorder,我们需要自己控制绘图的先后顺序,即在love.draw()回掉函数中的先后顺序.可是这带来了不便当有很多绘图动作时,代码太多便弄不清先后了.我们可以自己增加一个z顺序的函数,每次添加绘图对象时,便把顺序设置好.这里我把zorder的取值范围设为0.0--1.0,值越下越靠近屏幕,值越大越远离屏幕,可以把zorder视为绘图对象离屏幕的距离.下面我们来把下面三张图合成为以幅完整的图:图片来自http://en.wikipedia.org/wiki/Parallax_scrolling下面是显示效果:左边的使用zorder,右 阅读全文
posted @ 2012-12-22 12:13 半山th 阅读(1438) 评论(4) 推荐(0) 编辑
摘要: 我折腾了好几天,终于搞明白了,看来对linux不够了解.我用的是linuxdeepn12.06,它基于ubuntu12.04,我发在了deepin论坛,链接http://www.linuxdeepin.com/forum/6/8739有使用这款网卡的同学可以去看看. 阅读全文
posted @ 2012-12-21 10:37 半山th 阅读(371) 评论(0) 推荐(0) 编辑