设计封装串口数据通信论文

2022-04-23

【摘要】为了将具有串口功能的设备适应物联网技术的要求,提出了一种基于LPC2103的串口服务器的设计方法。先从物理接口机制方面对串口服务器进行了概述,然后从系统硬件和软件两方面对基于LPC2103的串口服务器进行了详细的设计,最后对该串口服务器进行了测试。下面是小编为大家整理的《设计封装串口数据通信论文(精选3篇)》的相关内容,希望能给你带来帮助!

设计封装串口数据通信论文 篇1:

基于串口服务器组态通信软件设计

摘 要:利用串口服务器搭建组态通信软件,针对通信软件应用的广泛性,加入了自主组态技术,使软件系统更好的发挥延续性和可扩充性。解决了由于现场设备或用户通信需求发生改变,通信软件的更新和升级问题。用户可以不必掌握任何编程语言技术,就能很好地完成一个复杂通信工程的所有设计。

关键词:串口服务器,通信,组态

串口服务器提供串口转网络功能,能够将RS-232/485/422串口转换成TCP/IP网络接口,实现RS-232/485/422串口与TCP/IP网络接口的数据双向透明传输。使得串口设备能够立即具备TCP/IP网络接口功能,连接网络进行数据通信,极大的扩展串口设备的通信距离及稳定性,但是由于目前设备种类繁多,工程的异样性,使得配套通信软件都需要重新开发,提出基于串口服务器组态通信软件来具体解决重新开发方法。

一、组态通信原理

组态通过配置从现场获得实时数据,对数据进行加工处理后,一方面以图形方式显示在计算机屏幕上,来反映现场设备的运行状况;另一方面按照组态要求和操作人员的指令将控制数据送给I/O设备,对执行机构实施控制或调整控制参数。

一般情况下,I/O驱动程序是与设备相关的,即一种设备的驱动程序只能驱动该类的设备。设备制造商会提高PC与设备间进行数据通信的接口协议和物理接口标准。物理接口标准规定使用何种通信介质、链路层的接口标准,如RS232、RS485、以太网;接口协议规定通信双方约定的命令及数据响应格式、数据校验方式等。I\O驱动程序主要是按照接口协议的规定向设备发送数据请求命令,对返回数据进行拆包,从中分离出所需数据(即组态的数据连接项和设备状态数据)。多数设备的通信接口协议都有弱干条读写命令,分别用来读写设备上不同类别的数据,而每一条命令又可以读写同类别的多条数据,具体能读写几条是由接口协议规定的。使用组态软件做I\O数据连接的工程技术人员不必了解这些细节,只需按照I\O驱动程序的说明书组态数据库等变量与设备数据项的对应关系即可。I\O驱动程序主要以数据包为单位进行数据处理,这样会大大提高通信效率。

二、组态通信软件方法设计

在工业控制领域,现场测控设备不同类型的设备工作方式有所不同,其对应的通信方法的设计也有所不同。而最常用的设备通信方式主要是对串口进行操作,因此使用串口服務器能更好管理设备,下面结合实例给出用Delphi设计基于串口服务器组态软件设备通信的方法。

选用Delphi来开发,是因为使用Delphi开发软件运行效率高,程序代码较短,运行速度快,能够充分利用32位操作系统多任务多线程的优势。利用Delphi开发组态串口通信一般有两种方法,一种是直接使用WINDOWS API函数,自主网络协议栈进行编程,另一种是使用OverbyteIcs或者INDY控件来进行网络编程,因为OverbyteIcs控件封装了大量WINDOWS API函数,使用OverbyteIcs控件进行编程,用户只需考虑如何使用OverbyteIcs控件所提供的属性和事件,以驱动API函数的接口来完成工作。

在组态软件中实现串口服务器对串行设备的通信实际上就是开发TCP/IP不同的串行设备的驱动,一般为两个部分,一是对串行口的设置、初始化、以及读写操作,二是根据不同设备的通信协议对从串口服务器从串行口读写的数据帧进行处理,取出其中的有用数据。并包括以下功能:

(1)用户能够选择所要使用的设备。

(2)用户能通过人机界面很直观的对串口服务器串口进行设置,及获取通信数据定制。

(3)用户设置完毕后,在无需任何改动,就能实时稳定获取需求数据。

三、结论

通过在实际开发中具体应用,提出基于串口服务器组态软件的具体实现方法,在实际应用中具有重要的应用价值。

参考文献:

[1]王亚民,陈青.组态软件设计与开发[M].西安电子科技大学出版社,2003,4.

[2]李伟建,郭宏.监控组态软件的设计与开发[M].冶金工业出版社,2007,6.

作者:王卫

设计封装串口数据通信论文 篇2:

基于LPC2103的串口服务器设计与实现

【摘要】为了将具有串口功能的设备适应物联网技术的要求,提出了一种基于LPC2103的串口服务器的设计方法。先从物理接口机制方面对串口服务器进行了概述,然后从系统硬件和软件两方面对基于LPC2103的串口服务器进行了详细的设计,最后对该串口服务器进行了测试。实验发现,基于LPC2103的串口服务器设计具有嵌入式产品的特点,满足物联网络应用要求,为串口服务器设计提供了一种设计方法。

【关键词】串口服务器;LPC2103;物联网;TCP/IP

1.引言

物联网是新一代信息技术的重要组成部分。其英文名称是“The Internet of things”。由此,顾名思义,“物联网就是物物相连的互联网”。这有两层意思:第一,物联网的核心和基础仍然是互联网,是在互联网基础上的延伸和扩展的网络;第二,其用户端延伸和扩展到了任何物品与物品之间,进行信息交换和通信。因此,物联网的定义是通过射频识别(RFID)、红外感应器、全球定位系统、激光扫描器等信息传感设备,按约定的协议,把任何物品与互联网相连接,进行信息交换和通信,以实现对物品的智能化识别、定位、跟踪、监控和管理的一种网络。

电子系统在生产生活中扮演着越来越重要的角色,工业中的控制系统、监控系统带来了生产力的飞速提升,生活中的门禁系统、考勤系统、POS消费系统、医疗设备系统带来了生活的高效和便捷。这些电子系统通常由控制主机以及各各样数量繁多的传感器、检测器等设备组成。在这些系统的运转中,设备的运行控制和设备间的数据传输是其中最重要的环节,而这两者都要依赖于设备间的互联通信。在各种电子系统中,以RS-232和RS-485为代表的串行通信方式因其易于实现和维护的特点得到广泛的应用。但是,伴随物联网技术和数字技术的快速发展,越来越多的传感器、检测器等设备投入到应用中,设备间的互联要求变得越来越高,设备的网络化成为主要的发展趋势,而传统的串行通信方式逐渐暴露出其传输速率低、传输距离近、网络化实现复杂的缺点。与此同时,Internet技术逐渐发展完善,TCP/IP网络迅速普及,其宽带传输速率、网络接入后的无限传输距离以及成熟的现有网络等特点使之成为升级串行通信方式的首选改造方案。当前,在生产生活中广泛使用的以串行通信标准进行通信的设备往往不具备网络接口,将这些设备更换升级,使之具有网络接口会耗费大量的人力、物力、财力,产生巨大的改造成本;而在一些串口通信足以满足需求,只有少量设备需要进行网络化的环境下,把所有设备进行升级也是一种浪费。

因此如何通过外部模块或设备,利用现有的通信接口如何来实现联网,以适应物联网技术的要求是一个具有创新的理论及实践意义的课题。本文本文提出了一种以高性能微处理器ARM7TDMI-S芯片LPC2103和以太网控制芯片DM9000AE为核心的转换系统,把从串口(RS-232)中接收的数据数据通过以太网进行传输,达到了远程控制,远程通信的目的,提高了传输数据的抗干扰性,节省了更新换代成本

2.串口服务器设计

2.1 物理接口设计概述

串口服务器是一种通信协议转换器,它设有两类通信端口:一类是标准RS232/422/485格式的串行端口,远程的实时监控模块通过串行控制总线接入串口服务器的此类端口;另一类是RJ45以太网口,通过网线将串口服务器接入局域网的交换机等设备中,因上位监控机亦连入此局域网,故可对远程实时单元进行运行数据采集及实时控制。若局域网接入了路由器等设备,可实现广域网范围的远程监控。有的串口服务器以太网口数目为两个,这样通过自身的以太网口就可实现网络设备的互联,可以省去交换机等设备。串口服务器在工作中可自动的将RS232/422/485格式的串行数据与基于TCP/IP协议的以太网数据包进行透明转换。一方面,串口服务器收到来自某一串行端口的现场数据,端口号判断完毕后将其连同实时数据一并打入TCP/UDP数据包,加入报头地址通过以太网口进行网络上传;另一方面,串口服务器在局域网中捕获合法的数据协议包,通过解包解析出有效控制信息,通过监控机指定的串行端口将控制命令以串行数据的方式传送给远程实时控制单元。服务器模型如图1所示。

图1 串口服务器模型

2.2 系统硬件设计

本系统主要由三大模块组成,分别是由微处理器芯片LPC2103构成的MCU模块,由网口控制芯片DM9000AEP和含RI45和网络变压器的HR911105A的网口模块,由串口控制芯片MAX232与RS-232接口构成的串口模块。设备发送过来的信息通过串口模块之后,送入MCU进行处理,然后通过网口模块发送至以太网进行显示,如图2所示为服务器的系统设计框图。

图2 串口服务器系统框图

2.2.1 MCU模块

LPC2103是PHILIPS公司最新推出的基于ARM7TDMI-S、LQFP48封装的LPC2103,最高工作速度可达70MHz,32KB的片内FLASH程序存储器和8K的片内静态RAM。通过片内boot装载程序实现ISP/IAP编程。

LPC2103的10位A/D转换器提供8路模拟输入,低功耗实时时钟具有独立的电源和特定的32768HZ时钟输入,多达32个通用I/O口(可承受5V电压),可通过个别使能/禁止外围功能外围时钟分频来优化额外功耗。较小的封装和很低的功耗使LPC2103特别适用于访问控制和POS机等小型应用中;由于内置了宽范围的串行通信接口和8KB的片内SRAM,非常适合于通信网关和协议转换器的研制,在本串口服务器的设计中,MCU的设计如图3所示。

图3 串口服务器的MCU模块

2.2.2 串口模块

几乎所有的微控制器PC都提供串行接口,使用电子工业协会(EIA)推荐的RS-232-C标准RS-232-C是一种很常用的串行数据传输总线标准,采用的接口是3芯插头,通过3芯插头再连接到标准的9芯D型插座上。由于RS-232-C标准所定义的高低电平信号与lpc2103系统的LVTTL电路所定义的高低电平信号完全不同,所以,两者间要进行通信必须经过信号电平的转换目前常使用的电平转换芯片为MAX232。将MAX232的10,11脚分别接至LPC2103的13,14脚。具体设计如图4所示。

图4 串口通讯接口

2.2.3 网口模块

是一款高集成度且成本较低的单片快速以太网媒体介质访问层MAC控制器,上有通用处理器接口,10M/100M物理层和16KbyteSRAM,低功耗、高性能IO管脚兼容3.3/5.0V电压。DM9000AEP合成了以太网MAC、物理层PHY和MMU,内置AUTOMDI2X功能10/100MPHY,芯片可以根据处理器提供8/16/32bit3种连接方式实现以太网MAC层和PHY层的功能。

以太网变压器HR911105A主要包含了RJ45和网络变压器RJ45连接器俗称水晶头,就是连接网卡或HUB的那个透明的插头,是用来连接双绞线的两端RJ45是一种网络接口规范,类似的还有RJ11接口,就是平常所用的电话接口,用来连接电话线双绞线的两端必须都安装这种RJ45插头,以便插在网卡(NIC)集线器(Hub)或交换机(Switch)的RJ45接口上,进行网络通讯。网络模块设计如图5所示。

图5 DM9000AE构成的以太网控制电路

2.2.4 下载口模块

本系统设计中采用10针的JTAG接口作为下载口,如表1接口的管脚和lpc2103的管脚相连接。

表1 JTAG接口与LPC2103的管脚对应

JTAG LPC2103

管脚号 名称 管脚号

3 nTRST 8

4 TDI 15

5 TMS 9

6 TCK 10

7 RTCK 26

8 TDO 16

3.系统软件设计

本系统要实现UDP/IP通信,还要实现和串口交换数据,若用一般的前后台系统,设计起来将是相当复杂,而且性能也要受到影响。因此,在设计中采用了嵌入式操作系统,把需要实现的各种功能分解成一个个独立的任务,按照任务的优先级,使各个任务独占CPU来运行。任务之间通过信号量、消息队列、邮箱等进行通信,这样既保证了系统的实时性,又简化了实现的难度。又简化了实现的难度。

串口服务器的软件系统完成的功能主要有:进行硬件初始化,包括对网络接口芯片DM9000AE和主控芯片LPC2103的进行初始化、参数配置;协议透明转换,完成串行数据与以太网数据的相互转换;通过LED进行工作状态指示。具体的软件流程图如图6所示。

图6 软件流程图

图7 系统测试示意图

4.实验

在本系统设计中,发送收发数据按照事先约定的协议“开始码+数据长度+类型+数据+结束码”的数据格式进行数据的收发,开始前用UDP网络调试工具,勾上按十六进制发送即网络和串口数据双向发送了。实验发现,网络向串口发和串口向网络发数据均正常,从而验证了本设计的正确性,测试如图7所示。

5.结论

通过本系统的研究表明,串口和网口的通信正常,实时性和稳定性都实现得较好,并且硬件电路制作简单,功耗较低,工作稳定。本系统串口服务器可以进行串口和网口的通信,可以通过以太网远程管理串口设备,也可以把串口设备返回的数据封装成IP数据包,然后通过网口传输至网络中,实时地显示串口设备的工作状态。由于串口服务器具有使用方便、组网便捷、投资经济等优点,是用以实现以太网数据通信的最佳产品选择,将在工业自动化、医疗设备网络监测、智能楼宇、通信和交通等领域有着广泛的应用。

参考文献

[1]任哲.嵌入式实时操作系统C/OS-II原理及应用(第2版)[M].北京:北京航空航天大学出版社.

[2]徐爱钧.IAR EWARM V5嵌入式系统应用编程与开发[M].北京:北京航空航天大学出版社,2009.

注:本课题来源于2012年上海市大学生创新创业训练计划项目“基于物联网技术的串口服务器设计”(项目编号:SH201210252045)。

作者:崔二勇 简献忠 蔡晶晶 赵俊艳 唐唯乔 谷亮

设计封装串口数据通信论文 篇3:

3D街机游戏系统研究与应用

摘要:针对当前国内街机游戏开发难度大、难以移植、开发周期长的问题,提出Unity3D引擎结合Android平台技术的街机开发方案。该项目用Unity3D引擎开发一款游戏,完成Android系统与Unity3D的数据交互、添加NGUI事件源,从而实现外部硬件设备控制游戏及游戏中的交互界面。针对厂家生产需求开发一个安卓系统桌面启动器并监听Android开机广播实现开机启动游戏,预装游戏软件实现系统集成。实践表明该系统完成度高,该开发方案开发效率高,在街机游戏开发和应用方面有一定的推广应用价值。

关键词:街机游戏;Unity3D;NGUI;Android; 安卓系统桌面启动器

Research and Application of 3D Arcade Game System

DENG Zeng-qiang1, ZHU Zheng-tao1,LONG Shi-jun2

(1.Guangdong University of Technology, College of Information Engineering,Guangzhou 510006,China;2.Longsys Electronics Company Limited,Shenzhen 518057,China)

Key words:arcade games; unity3d; ngui; android; launcher

1 概述

街机是置于公共娱乐场所的经营性专用游戏机[1]。1971年麻省理工学院学生诺兰.布施内尔设计了世界上第一个业务用游戏机开始,街机这一名词开始出现[2]。20世纪80年代街机游戏开始蓬勃发展,到21世纪初,期间出现了众多优秀的街机游戏。随着计算机技术的发展,各种形式的游戏开始涌现,如:PC游戏、手游、电视游戏等,这些新兴的游戏方式冲击着街机游戏市场。然而,街机游戏的临场感、操控感和体验感是PC游戏和手游等无法比拟的[3]。由此,街机游戏还是拥有数量可观的玩家用户。但作为开发者和厂商来说,街机游戏并不欢迎,其原因主要是开发方式难、硬件成本高、一台机器只能运行一个游戏。

随着Android平台和Unity3D游戏开发引擎的出现,街机游戏的开发方式也出现了新的可能。Android平台是开源系统,其开放性和广泛的硬件支持的特点吸引众多的开发者进行游戏开发[4]。为简化游戏开发,选用Unity3D游戏引擎,该引擎有良好的跨平台特性、打包发布简单、良好的移植性的特点,开发者无需了解底层技术即可进行开发,大大缩短了开发时间周期[5]。Unity3D 中整合如地形创建工具、碰撞检测和灯光渲染组件、粒子系统、物理引擎、常用脚本等丰富的开发资源。同时,还在Mono Behavior这个类库中为开发者定义了各种实用的方法,从而为开发提供了更大的方便[6,7]。本项目以Unity3D技术为基础,实现一款街机游戏,以Android技术为辅助,实现游戏控制和系统集成。该系统为解决街机游戏开发困境提供一定的引导和参考。

2 设计内容概述

该项目为一款针对儿童用户的安卓平台游戏,采用三维游戏风格,最终将游戏集成到安卓源码,实现自定义安卓系统桌面启动器(launcher)和针对游戏软件的开机自启。系统主要模块包括两部分:客户端游戏软件模块和安卓系统集成模块。

2.1 游戏玩法介绍

游戏设置有三个场景:草原、雪地、海岛,每个场景跑道都设置有路障。玩家使用操纵拉绳操控马匹,在限定的时间内与电脑马匹竞赛,玩家可以操控马匹加速,限定時间倒计时结束判定玩家马匹在跑道上的位置进行排名。游戏流程如图1。

图1 游戏过程展示

游戏操控方式通过马匹上左右两条缰绳控制左右移动,同时拉两根缰绳表示主角跳起,而在交互界面场景中表示“确定”,马身一个按键控制主角加速,机箱处留有投币处和商家进入后台参数设置界面的按键。

2.2 主要模块及功能

客户端软件模块是软件的主要模块,是直接影响玩家用户体验的重要部分,该模块使用C#编写游戏逻辑和交互界面。在Unity3D游戏引擎中导入游戏需要的场景资源:图片素材、角色模型、场景模型、音乐资源、字体等,编写脚本代码控制游戏逻辑,例如:角色行为控制、AI寻路、UI等。

生产厂家在生产中有硬件制作、系统镜像烧录、游戏安装等过程。然而,这样每次机器运行需要选择游戏应用图标进入游戏,大大增加了操作复杂度,不符合街机生产需求。针对这一情况,笔者将游戏APK(Android Package)预装到Android系统中,并开发一个launcher替换系统原生launcher,由此launcher启动游戏。基于以上描述可得项目关键模块框架如图2。由于篇幅限制,本文对开发过程中模型导入、粒子系统、Android源码编译等不做描述。

图2 游戏总体框架图

3 系统关键模块技术及实现

3.1 控制功能模块

区别手机游戏触摸控制和PC游戏的键盘控制,本游戏依赖外部硬件设备,通过串口数据通信与Android平台进行数据交互。

Unity3D与Android数据传输的方式有多种。可以在Eclipse中编写所需的Android平台功能,以库文件的形式在Unity3D中使用;也可以将Unity项目导出为Android项目,然后编写Android程序,两种方式都可实现数据传输,只是实现过程有区别。本项目以Unity3D为主,将Eclipse的功能制作成插件集成到Unity3D中,其原理是使用Android NDK將C/C++编写的代码编译成.so文件后,在Unity3D中用C#代码进行相互调用,具体实现方法为:

1)使用Eclipse创建一个库文件工程;

2)在Eclipse中编写串口操作,遵循普遍串口操作规律,实现打开串口、读写串口、关闭串口,继承UnityPlayerActivity实现Activity与Unity对接,并封装一系列的方法来为Unity3D提供访问串口读写数据的接口,然后输出.jar格式库文件,代码片段:

public String getJumpPass()

{return jumpPass;}

public void setJumpPass(String jumpPass) {this.jumpPass = jumpPass;}

3)复制AndroidManifest.xml、.so文件、.jar文件到Unity3D目录Plugins/Android下,重新设置AndroidManifest.xml中activity名称,使之与Eclipse工程中activity一致;

4)Unity3D创建SerialPortData.cs脚本访问.jar库。在Start()函数中获取Android的activity,从而访问.jar库文件中传来的字符串数据,据此判断玩家或商家做出的操作;

void Start(){

AndroidJavaClass jc=new AndroidJava- Class("com.unity3d.player.UnityPlayer"); activity=jc.GetStatic("currentActivity");}

在Update()函数中每帧刷新一次,检测是否有新的操作,代码片段如下:

void Update(){

string coin=":020"; //投币信号

string jump=":290"; //上跳或者确认

string left=":210"; //左操作

string right=":220"; //右操作

string accelerate = ":230";//加速信号

string bkEnter = ":240"; //后台信号if(activity.Call(“getJumpPass")==jump)

{activity.Call("setJumpPass","");

isjump = true;}}

其中”:290\n”等是串口通信协议,利用AndroidJavaObject的Call()方法获取串口数据,通过比较字符串确定操作是否成功。

3.2 交互界面实现

游戏中涉及的界面操作有玩家选择场景界面和商家后台参数设置界面,界面设计采用NGUI插件。NGUI[8]是专门针对unity引擎,用C#语言编写的一套插件,相比较unity3D原生引擎GUI和NewGUI系统功能更强大、操作更方便,它提供了强大的事件机制,通过UICamera监听UI事件并分发事件,事件覆盖此camera渲染的GameObject。游戏中玩家投币达到商家设定的数量后,游戏进入场景选择界面如图3。

图3 场景选择界面

UICamera监听的事件源有鼠标、键盘、触屏和手柄。而本游戏控制依赖外部硬件设备,通过串口输入与Android系统通信,UICamera事件源并不包括串口控制方式。因此,通过UICamera.cs中Update()添加事件源,Notify()分发事件处理函数的方式对NGUI做二次开发,左拉缰绳操作事件代码:

if(SerialPortData.leftpull)

{SerialPortData.leftpull = false;

currentScheme=ControlScheme.Controller; Notify(mCurrentSelection,"OnSignalLeft",null);Notify(editActiveValue,"OnSignalLeft",null);}

其中Notify封装SendMessage方法分发事件,参数一为接收消息的游戏对象,参数二为函数名。为了使操控效果美观,添加WrapContent脚本实现无限滑动效果,添加UIKeyNavigation定位UI。当监听到控制事件,立即转发到对应的处理函数,函数片段:

public class NewUIKeyNavigation : UIKey- Navigation {void OnSignalLeft()

{if (!NGUITools.GetActive(this)) return;

GameObject go = null;

go = GetLeft();

go.GetComponent().O-nClick ();if (go != null)

UICamera.selectedObject = go;}......}

街机游戏每局需要的投币数量是商家设定的,此时就需要定制一个后台参数设置界面如图4。参数包括:中英文切换、游戏时长、每次游戏需投币数目、背景音乐开关。

图4 后台设置界面

后台设置使用Unity3D提供的Player- Prefs類持久化保存和读取数据,该类以键值对的形式将数据保存在本地文件中,保存成功后通过“键”访问数据值。

3.3 寻路AI

游戏AI设计是评价一个游戏可玩性的一个重要指标,本游戏使用AI是寻路AI。Unity3D中常用的寻路AI算法有A*(A-Star)、导航网格(NavMeshAgent)、路点寻路。

A*算法是目前用来解决静态网格求最短路径问题最有效的算法[9]。普通搜索算法,如广度优先和深度优先算法,通过遍历所有解从而去寻找最优解,当解的数量过多,普通算法效率过低。A*算法使用启发式搜索算法,对每个搜索位置进行评估,提高搜索效率。A*算法适用地图类型为静态网格的游戏,所以必须是先设计好属性固定不变的地图,且必须已知起点和终点,本游戏角色在场景中起始位置确定,但终点位置不定,所以A*寻路不适用本游戏。

导航网格[10](NavMesh)寻路方法是Unity3D自3.5版本起增加的内置插件。其原理是通过烘焙将地形的信息记录起来, 游戏物体挂载NavMeshAgent组件,导航物体便会自行根据目标点来寻找最直接的路线,并沿着该线路到达目标点。角色会绕过或者跳跃过各种复杂的障碍,找到一条理论上“最短路径”。在本游戏中这种方式实现自动寻路会存在很多不定的因素,如场景道路边界存在拐点,自动寻路时移动角色会紧贴拐点移动,并不适合路径随机、移动平滑等需求,导致游戏可玩性不高。

路点寻路方式是在地图场景中设置一些节点并且构成连通的网络区域,每一个节点表示一个路点(WayPoint)[11],游戏角色沿连通的网络线移动,该路线由开发者设定,并不是最优路径,而且游戏角色每次穿过一个路点时产生一个随机小角度起始方向角度并沿该方向寻找下一路点。路点寻路方式适合用于大地图场景,而且对系统消耗更小,实现方法简单有效。综上,本游戏选用路点寻路AI,其具体实现流程为:

1)在场景地图上设置路点,为路点添加sphere碰撞体,并设置tag标签“playerways”,并将路点对象按顺序放进程序定义的public数组中;

2)通过OnTriggerExit(Collider other)函数判定当前路点索引值;

3)以一定的速度朝下一路点移动,如果到达最后一个路点并且游戏时间未结束,则将数组索引置零,方式如下:

if(NUM==waypoints.Length-1) transform.LookAt(waypoints[0]);else transform.LookAt(waypoints[NUM+1]);

图5 路点寻路示意图

3.4 系统集成关键技术

Android桌面就是一个应用软件,管理所有已安装的应用。实验中发现,通过系统原生launcher启动本游戏会在桌面停留,影响系统流畅性。由此,笔者自定义launcher,替换系统原生launcher,并屏蔽桌面界面。Android系统开机会发送一个开机广播,在自定义launcher的AndroidManifest.xml文件注册接收开机广播,并设置其为开机启动程序。编写脚本继承BroadcastReceiver,实现通过游戏APK包名启动游戏。

前文提到为厂家生产方便,需将游戏预装到安卓源码,并裁剪安卓源码,缩小系统镜像包体,加速镜像烧录,最终厂家只需要硬件平台和预装了游戏APK和launcher的镜像。预装中注意将游戏APK中的库文件放在device/softwinner/fiber-commom/prebuild/-apklib文件中,将游戏APK放入prebuild/ preinstall-apk目录下,并修改该目录下的Android.mk,对该apk进行申明。自定义launcher替换原生launcher时应删除原生launcher,并在当前文件夹下Android.mk文件中声明添加LOCAL_OVERRIDES_PACKA- GES := launcher2;否则第一次开机需要选择launcher启动器,系统不连贯。

4 系统展示

整个街机游戏系统从开启,如图6(a)到进入游戏,如图6(b),总共耗时35秒左右,系统运行流畅,无卡顿闪退等情况,投币、角色控制、后台控制等功能准确有效,交互界面简洁实用,整机如图6(c)。

图6 街机游戏整体效果图

5 结束语

本文就以往街機开发方式困难、开发成本高的问题,提出一种结合Unity3D游戏引擎和Android平台技术的街机开发方案,为突破以往街机开发方式,提出新的方案,具备一定的推广应用的价值。整个街机系统符合生产需求和游戏本身的设计需求,达到预期效果。当然,本游戏在游戏内容设计和优化方面稍显不足。目前,只有预装一个游戏。因此,后续可以开发更多游戏并开发一个安卓应用来管理这些游戏,丰富街机内容。

参考文献:

[1]刘卓.电子游戏的娱乐体验与交互设计[D].无锡:江南大学,2008.

[2]王峥.试论电子游戏与社会的互动[J].哈尔滨工业大学学报:社会科学版,2005,7(4):26-30.

[3]唐洁.VC++2008开发网络百家乐游戏[J].电脑编程技术与维护,2011,13(10):68-78.

[4]寿柏炎.基于Android平台软件开发方法的研究与应用[J].计算机光盘软件与应用,2013(01):244-245.

[5]袁田琛,胡新荣,赵俭辉.基于Leap Motion和Unity3D的体感游戏开发与集成[J].电脑知识与技术,2015,11(13):201-204.

[6]刘冬梅,宋平,邓英芝,等.基于Unity3D的"林大的松鼠”APP的设计与实现[J].智能计算机与应用,2015,5(2):80-85.

[7]谷敏,康雪丽.数据驱动的Unity3D场景约束框架的分析与设计[J].电脑知识与术,2015,11(30):180-183.

[8]相茂英,马纯永,韩勇,等.基于Unity3D的化工设备虚拟培训系统研究[J].计算机技术与发展,2014,24(07):196-200.

[9]周小镜.游戏地图中寻找路径的改进算法研究[J].信息技术,2010(12):125-127.

[10]Sturtevant N R,Buro M.Improving Collaborative Pathfinding Using Map Abstrac//AIIDE[C]. Marina del Rey, California: Proceedings of the Second Artificial Intelligence and Interactive Digital Entertainment Conference, 2006:80-85.

[11]臧晓强.手机游戏AI引擎设计[D].延吉:延边大学,2008.

作者:邓增强 朱铮涛 龙诗军

上一篇:旅游资源保护路径选择论文下一篇:语文生字卡片识字教学论文