本站欢迎大家分享优质的源码和程序, 本站内容来源于作者发布和网络转载,如有版权相关问题请及时与我们取得联系,我们将立即删除。
摄像机 Camera在游戏中的作用是控制游戏窗口的位置显示,跟踪玩家的移动。可以使玩家始终在屏幕的正中央。 在引擎中我们提供了lookAt函数设置追踪的目标: /// 设置跟随目标 void lookAt(DFSprite sprite) { this.sprite = sprite; } 当玩家快要移动到地图边界时,为了避免显示空白的区域,要限制摄像机的边界: /// 设置跟随限制 came

碰撞检测,在引擎中已经实现了矩形与矩形,圆形与圆形,圆形和矩形的碰撞判断函数,每个精灵都可以实现碰撞函数,返回DFShape类,表示碰撞的区域的形状和位置。 DFShape的子类有:DFRect和DFCircle两个类。都可以作为碰撞形状。这两个都具有碰撞检测函数: @override bool overlaps(DFShape other) { if (other is DFRect) {

A*寻路算法,根据地图的Block数据(二维矩阵,0表示可通过,1表示不可通过),在起点和终点之前规划一条最优路径。 引擎中已经实现DFAStar了,主角或者怪物需要向目标移动的时候,都需要先寻路,得到路径后,按照路径移动: this.pathList = await aStar.start(GameManager.mapSprite!.mapInfo.blockMap!, startNode,

  地图
地图,我们通过瓦片精灵类实现地图,引擎优先支持的是tmx地图的加载,设计地图时,我们约定地图有3个图层,map,block,alpha,其中map地图时地图的纹理, block绘制碰撞块,alpha绘制遮挡块。 block有tile表示不可以通过,A*寻路时需要这个数据,alpha是当主角被树或者其他建筑遮挡时用于显示透明的效果。

  音效
音效,通过DFAudio类在游戏里播放音效: this.actionAudio!.startPlay(this.player.runAudio, loop: true);

  按钮
游戏里用的按钮和APP上的按钮还是有区别的,游戏中的按钮一般是2张图片,很少用背景颜色的形式。 引擎里设计了DFButton类用于游戏中的按钮: DFButton(   image: "assets/images/...png",   size: Size(50, 50),   onPressed: (button) {   }, ), 自带触感 Filter Color 特效。

瓦片精灵TiledSprite,在2d游戏里地图一般是使用很多零碎的小图拼接而成,我们把这些小图成为瓦片,为什么不用一张整图呢? 原因是整图的资源很大,加载慢,暂用内存高,使用瓦片地图可以便于我们实现仅加载可见区域的地图进行显示,能够大大的节省资源的内存占用。 你可以使用Tiled工具进行地图的制作,引擎支持读取Tiled导出的json文件。 代码示例: /// 地图精灵 MapSprite m

进度精灵DFProgressSprite,该精灵用于显示游戏里的进度条,如Loading,血条等。 首先你先要按照如下规则准备好用于显示进度的图片,一张是进度底图,另外一张就是进度填充的图,我们将这2张图放到一张整合图里节省性能,并且y方向留2个像素分隔。如下图: DFProgressSprite会自动将图片进行拆分和渲染。 效果如下图: 代码示例: /// 血条 ui.Image image

游戏循环GameLoop 这个是游戏引擎的核心,就是通过一个计时器,控制游戏内精灵的更新,为什么要更新? 玩家的移动,主角的衣服动画,这些都是要实时刷新的,而游戏的刷新是不能乱刷新的,精灵自己也无法刷新自己,所以就需要这样一个GameLoop GameLoop是根据设备的性能相关的,性能越好,GameLoop没次刷新就越快,没秒能刷新的次数就越多,FPS就是这么来的。 引擎里定义的GameWid

动画精灵 DFSpriteAnimation,在游戏里动画精灵是用的最多的了,因为游戏里很多物件都是动态的,在2d游戏里动态的图像我们用序列帧实现。 Texturepacker是游戏开发中常用的开发工具,可以将零散的序列帧图片组合成一张整图,并用plist或者json记录每个序列帧小图的位置和尺寸。 动画精灵内有加载Texturepacker游戏资源的函数,如果你的数据格式和我使用的不一样可以参