![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
SDL_Engine
文章平均质量分 88
小牛_牛sky
学海无涯
展开
-
SDL_Engine游戏引擎制作 6-Director 负责全局的导演
在前面几节中,测试代码主要是在main.cpp中编写的。但是,如果接下来还是在main.cpp中修改的话,要么添加静态函数需要传递的参数,要么需要各种全局变量,这两种方法都不是权宜之计。因此,应该有一个能统筹整个游戏开发,并且提供各种需要用到的功能的类,它就是Director(导演)类导演类主要控制游戏流程,其功能包括:1.游戏的绘制方面的设定,窗口的大小,FPS显示,帧率设置等。2.切换...原创 2018-03-30 09:38:55 · 807 阅读 · 1 评论 -
SDL农场游戏开发 1.环境搭建
由于我个人受到传统农场类游戏的熏陶,因此萌生出了开发一个类似于QQ农场的游戏。本次游戏打着SDL的幌子(这么说自己真的好么),其实使用的是SDL_Engine,它是我闲暇时模仿cocos2dx而写的一个游戏框架。个人认为了解下SDL_Engine框架是有点用的(去掉了cocos2dx中精华的部分,然后加上自己写的糟粕-_-),但是不太建议使用这个框架(里面的坑比较多);然后就是SDL_Engi...原创 2018-12-01 19:48:49 · 12745 阅读 · 15 评论 -
SDL农场游戏开发 2.地图与土壤层
本游戏的地图使用的是tiled这个软件导出的*.tmx(xml格式),地图类型是45度方向,以前曾经研究过45度与90度地图的区别,最后发现区别不是很大,主要在于图块的不同,90度地图的图块一般是矩形(正方形),而45度地图非透明图块一般是菱形。本游戏地图共有以下几种图块: 用到的图块主要是第一个图块和第四个图块,其他的图块作为扩展图块。tiled地图分为两层:bg层主...原创 2018-12-02 16:15:57 · 5192 阅读 · 2 评论 -
SDL农场游戏开发 4.Crop类,作物的产生及成长
首先,先创建一个Entity类。该类的内部有一个精灵对象及相关操作来专门负责显示,以后需要显示的类都可继承自Entity类。比如Crop类的父类就是Entity。问:为什么Soil类不继承自Entity类呢?答:Soil类其本身并不负责显示,它的内部精灵只是指向了TMXTiledMap对象中的精灵。1.EntityEntity.h#ifndef __Entity_H__#d...原创 2018-12-04 15:12:39 · 578 阅读 · 0 评论 -
SDL农场游戏开发 5.作物层和动态数据
在前几节实现了Soil和SoilLayer,本节有两个任务,首先是实现CropLayer,之后是实现DynamicData。无论是SoilLayer,还是CropLayer,其内部的代码相对较少,它们的作用类似于stl的vector,vector是把c/c++中的数组和对应的操作数组的方法结合起来;而SoilLayer和CropLayer亦是如此。作为容器,一般会有添加方法、删除方法、以及满足...原创 2018-12-05 13:50:13 · 882 阅读 · 0 评论 -
SDL农场游戏开发 6.作物的收获和铲除
FarmUILayer主要用于显示,它的功能大致如下:商店、背包按钮。 作物的收获、铲除按钮。 作物的具体信息,如多少小时后成熟。 农场信息,如金币数目、等级和经验。其界面大致如下:商店按钮、仓库按钮和存档按钮。 农场信息,包括金币数目、等级和经验。 作物信息和作物操作按钮。尽管FarmUILayer中包含了农场游戏中的大部分控件,但是它并不包括这些按钮的功...原创 2018-12-08 19:09:50 · 712 阅读 · 0 评论 -
SDL农场游戏开发 7.物品显示-背包层的编写
1.update函数的实现上一节实现了FarmUILayer类,它负责显示各种UI控件,不过当前的问题就在于作物状态面板的时间并不会每一秒刷新一次,这是因为我们还并没有调用对应的update函数。首先需要在FarmScene.h中添加一个update函数的声明:class FarmScene : public Scene , public Farm...原创 2018-12-13 09:36:45 · 468 阅读 · 3 评论 -
SDL农场游戏开发 3.StaticData类
前面说过,StaticData类负责管理程序在运行过程中不会发生变化的数据,如下为Resources目录结构:data文件夹保存着一些静态数据,比如crops.csv文件保存着作物信息,soils.csv文件保存着可扩展土壤所需要的等级和金钱。1.外部文件首先看一下crops.csv 前两行为描述字段,而从第三行起,每一行保存了一个植物的种子和作物的相关信息,比如名称、描述...原创 2018-12-03 21:02:43 · 5432 阅读 · 6 评论 -
SDL农场游戏开发 9.滑动对话框
本节实现滑动条对话框,界面如下:滑动条对话框用在购买物品和出售物品时的个数选择 ,同时也能有效避免玩家的误碰操作。该对话框主要使用了滑动条,两个按钮控件以及数个标签控件,它对应的UI文件是scene/slider_dialog.xml。(使用了其他引擎请根据需要自行创建界面文件,也可在代码中生成)。上一节实现的物品层的优先级为-1和-2,而对话框的优先级应该比物品层的优先级要大,以...原创 2018-12-29 11:29:38 · 732 阅读 · 0 评论 -
SDL农场游戏开发 8.物品显示-填充物品
1.物品填充接下来实现仓库、种子背包、商店的物品的填充。上面三个区别在于:物品不同。 “使用”按钮的逻辑不同。仓库显示的是种子、果实等,此时的“使用”按钮为出售;商店中是可以购买的种子,此时的“使用”为购买。而种子背包的“使用” 为种植。首先需要在FarmScene.h添加:/*物品层显示类型*/enum class GoodLayerType{ No...原创 2018-12-25 11:39:49 · 329 阅读 · 1 评论 -
SDL农场游戏开发 10.土地的扩展和特效的生成
1.土地的扩展在第三节就提到了土地扩展对应的数据,这里不再赘述。土地扩展精灵,显示如下:另外,土地扩展需要用到一个文本对话框来显示土地扩展的条件,如下:该文本对话框的实现和滑动条对话框类似,不再赘述(github)。综上所述,土地扩展精灵是可以点击的,当点击后会显示出文本对话框来提示所需的金币和等级。如果满足则扣除金币,并增加土地;否则提示金币不足或者等级不足。该精...原创 2019-01-03 14:30:50 · 557 阅读 · 0 评论 -
RPG游戏制作-06-与NPC的交互
脚本触发方式分为Touch和Click,上一节实现了Touch,接下来实现Click。由于本游戏使用的是鼠标/手指来操纵人物,不存在什么虚拟摇杆,因此如果想要实现Click的话,就需要点击NPC,之后角色根据A星算法得到的路径行走,在NPC面前停下,然后对应NPC调用execute(),来调用对应的脚本。不过我们发现,目前的碰撞检测中是不包含NPC在内的,即无论NPC是否是PRIORITY_SAM...原创 2018-09-16 19:18:32 · 1796 阅读 · 1 评论 -
RPG游戏制作-05-世界多姿多彩 NPC的诞生
NPC(Non-Player Character)在游戏中广泛存在。本游戏是c++为主,lua为辅,然后在脚本中来控制游戏流程,以后的NPC应用广泛,可以是普通的人物,还可以是宝箱,传送阵,乃至是田地,即角色扮演+模拟经营。当然,前提是我们得在c++做好足够的工作才行。首先,添加一个枚举体//游戏状态enum class GameState{ Normal,/*正常状态,即行走状态...原创 2018-09-16 19:18:00 · 419 阅读 · 0 评论 -
RPG游戏制作-01-搭建游戏框架,初进游戏世界
本游戏为我个人的毕业设计,开贴旨在用来用来记录。个人写的角色扮演游戏(RPG)已经有了一个成品,但是个人感觉部分实现上不便于以后的扩展,故进行第二次重构。本游戏基于SDL_Engine进行开发(个人模仿cocos2d-x开发,可以认为是简化版的cocos2d-x)。目前先构建框架。本游戏采用MVC设计模式,GameScene为MVC中的Control控制器,主要起到负责全局的管理,逻辑处理...原创 2018-09-16 19:17:05 · 5484 阅读 · 6 评论 -
SDL_Engine游戏引擎制作 0-目录
本系列文章旨在介绍并开发一个基于SDL(Simple DirectMedia Layer)的模仿Cococs2d-x的一个游戏引擎。目前我已经使用这个开发了好几个游戏,从飞机大战,到捕鱼达人,再到植物大战僵尸。都能使用SDL_Engine进行开发,而不用修改SDL_Engine的内部代码。(本系列暂停更新,对矩阵什么的不了解。。。待更新)我个人做的一些游戏图片:植物大战僵尸超级玛丽捕鱼达人目录(不...原创 2018-03-24 17:05:22 · 4303 阅读 · 0 评论 -
SDL_Engine游戏引擎制作 1-C++的内存自动释放
众所周知,C++本身是不会自动释放new出来的对象的内存,即使没有指针引用它(此时的内存在程序运行期间将无法释放,导致了内存泄漏)。cocos2d-x给出的解决办法就是引用计数。SDL_Engine关于引用计数涉及到三个类,分别是:Object,PoolManager,AutoreleasePool。PoolManager是单例类,内有一个指向AutoreleasePool对象的指针(不同于coc...原创 2018-03-24 18:36:11 · 1239 阅读 · 0 评论 -
RPG游戏制作-02-游戏世界主角的诞生
在RPG游戏中,有着各种各样的NPC(Non-Player Control),玩家可以操作主角与NPC进行交互,来获得情报,道具,装备等等。而NPC的概念比较广泛,从各种商人到宝箱再到空气墙,都可以认为是NPC,只不过它们的贴图和响应不同。主角的动画一般情况下是最丰富的,如行走图,战斗图,立绘等等。而RPG游戏角色的数量很多,因此需要一个扩展性强,处理便捷的格式进行存储和读取,这里采用plis...原创 2018-09-16 19:17:20 · 818 阅读 · 0 评论 -
SDL_Engine游戏引擎制作 2-Point Size Rect
Point Size 和Rect都是在游戏中经常使用到的类。Point为坐标,经常用来标示一个对象的位置。Size为尺寸,用来标示一个对象的大小。Rect则是Point 和Size的集合体,可以认为是一个包围盒,经常用来判断是否发生碰撞。SEMath.h#ifndef __SDL_Math_H__#define __SDL_Math_H__/*SDL_Engine Math*/#includ...原创 2018-03-26 10:33:11 · 606 阅读 · 0 评论 -
RPG游戏制作-03-人物行走及A*寻路算法
在游戏中,可以控制人物的方法一般有:1.键盘 2.虚拟摇杆 3.鼠标 4.手机触碰。键盘一般是在PC端较为常用,如果在游戏中使用wasd等操作人物的话,那么在移植到安卓端时,就需要使用虚拟摇杆或虚拟按钮来模拟键盘,以实现处理的统一性。鼠标类似于手机的单点触碰,而手机触碰一般分为单点和多点触碰。这里使用触碰操作人物。既然使用触碰进行操作人物,那么就需要一个从出发点到目的地的路径,这里选用的是A星...原创 2018-09-16 19:17:39 · 2687 阅读 · 1 评论 -
RPG游戏制作-07-特效层的创建
首先,先创建一个特效层,其主要负责特效,如帧动画或粒子特效。#ifndef __EffectLayer_H__#define __EffectLayer_H__#include <vector>#include <string>#include "SDL_Engine/SDL_Engine.h"using namespace std;USING_NS_S...原创 2018-09-16 19:18:22 · 440 阅读 · 4 评论 -
RPG游戏制作-08-为lua注册c/c++函数
接下来,就可以注册c函数给lua使用了。本游戏中把不同种类的函数集合成各种各样的模块,就类似于lua中的math模块io模块。目前的模块如下:1.base模块,注册了一些常用的基础函数。2.movement模块,移动函数,场景切换函数等。3.screen模块,场景相关函数,如淡入淡出函数,调出背包函数等。4.timer模块,延迟函数。void register_funcs(l...原创 2018-09-16 19:18:40 · 693 阅读 · 0 评论 -
SDL_Engine游戏引擎制作 3-Window 游戏窗口
SDL编写程序的第一步先是初始化SDL,然后就是创建窗口。然后就是创建基于本窗口的渲染器(Renderer 姑且称为渲染器吧)。SDL中的窗口为SDL_Window,是一个结构体,与之对应的有各种与窗口处理相关的函数,比如窗口创建和销毁函数,最大化或最小化窗口等等。下面先简单地说一下常用的几个函数。1.SDL_Init() 初始化SDL库。这个函数一定要在使用大多数SDL函数前被调用。(类似的有S...原创 2018-03-27 15:30:29 · 1027 阅读 · 0 评论 -
RPG游戏制作-04-接入脚本前的准备
在RPG的开发中,一般情况下都会使用脚本,脚本在游戏开发中也很重要,在RPG游戏中,脚本就像剧本,来控制整个RPG游戏的流程。本游戏使用lua脚本语言,版本为5.3,没使用额外的库,这点和cocos2d-x不同,cocos2d-x使用的luajit是基于5.1版本的,并且为了能在lua文件中开发游戏做了很多工作。这两种选择没什么优劣,只是看个人的选择。lua在和c/...原创 2018-09-16 19:17:50 · 1378 阅读 · 0 评论 -
SDL_Engine游戏引擎制作 4-Surface 1.x的遗孀
SDL自更新至2.x后,原先在1.x大放异彩的SDL_Surface大部分功能被SDL_Texture所取代,如渲染。不过SDL_Surface还是有用武之地的,比如在使用SDL_ttf.h的部分函数时还是需要用到SDL_Surface,之后再转换成SDL_Texture。列举一些常用的API(Application Programming Interface),详细可参见SDL wiki。1.I...原创 2018-03-28 09:58:57 · 953 阅读 · 0 评论 -
SDL_Engine游戏引擎制作 5-Texture 2.x的新宠
SDL在2.x后,SDL_Texture成为了主力军,以实现各种绘制操作。简单介绍一些与之相关的函数:1.SDL_QueryTexture。获取一个纹理(即SDL_Texture)的属性,如纹理的高和宽等。Texture.h#ifndef __SDL_Texture_H__#define __SDL_Texture_H__#include "SDL.h"#include "Object.h"...原创 2018-03-28 17:50:53 · 1033 阅读 · 0 评论 -
SDL农场游戏开发 11.总结
1.总结到目前为止,整个游戏的开发已经完成了,整个开发过程跨时比较长,实现的基本上是比较完整的游戏了,当然了,单纯的农场类游戏目前可能有些无趣,所以下面我提供一个思路,以便于将不同游戏结合起来。2.把游戏编码为模块的一个思路一个游戏内有多种经典元素已经是司空见惯的,像我个人比较喜欢的符文工房3,就是集各种玩法为一体的游戏。举个例子,现在的硬件厂家都是把各种传感器封装成一个模块,一般...原创 2019-01-03 14:41:21 · 837 阅读 · 7 评论