代码复制方法及设备、电子设备和计算机可读存储介质的制作流程

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

图片简介:
本公开是关于一种代码复制方法及装置、电子设备以及计算机可读存储介质,涉及软件开发技术领域,可以应用于对已开发完成的旧版本代码进行复制操作的场景。

该代码复制方法包括:获取初始模块文件;其中,初始模块文件包括初始代码以及初始资源;针对初始模块文件执行复制操作,并将得到的目标模块文件存储至目标存储位置;对初始代码进行复制操作,生成中间代码,并对中间代码进行改名操作,以生成目标代码;获取初始模块文件与目标模块文件之间的标识符对照列表,并根据标识符对照列表对目标资源执行重绑定操作,以将目标代码绑定至目标资源。

本公开可以解决代码复制过程中可能出现的命名冲突问题和资源引用问题。

技术要求
1.一种代码复制方法,其特征在于,包括:
获取初始模块文件;其中,所述初始模块文件包括初始代码以及与所述初始代码相关的初始资源;
针对所述初始模块文件执行复制操作,并将得到的目标模块文件存储至目标存储位置;其中,所述目标模块文件包括与所述初始代码对应的中间代码以及与所述初始资源对应的目标资源;
对所述中间代码进行改名操作,以生成目标代码;
获取所述初始模块文件与所述目标模块文件之间的标识符对照列表,并根据所述标识符对照列表对所述目标资源执行重绑定操作,以将所述目标代码绑定至所述目标资源。

2.根据权利要求1所述的代码复制方法,其特征在于,所述针对所述初始模块文件执行复制操作,并将得到的目标模块文件存储至目标存储位置,包括:
读取初始配置文件;其中,所述初始配置文件包括所述初始模块文件的初始目录路径、目标目录路径和名称映射关系;
根据所述初始目录路径获取所述初始模块文件的原始名称,并根据所述原始名称和所述名称映射关系确定目标模块文件的目标名称;
根据所述目标名称和所述目标目录路径生成所述目标模块文件的目标存储路径;
针对所述初始模块文件执行复制操作以得到所述目标模块文件,并按照所述目标存储路径将所述目标模块文件存储至所述目标存储位置。

3.根据权利要求2所述的代码复制方法,其特征在于,所述针对所述初始模块文件执行复制操作以得到所述目标模块文件,包括:
确定所述初始模块文件对应的资源类型;
根据所述资源类型确定与所述初始模块文件对应的目标复制操作;
针对所述初始模块文件执行所述目标复制操作,以得到所述目标模块文件。

4.根据权利要求3所述的代码复制方法,其特征在于,若所述资源类型为图片类型,所述针对所述初始模块文件执行所述目标复制操作,以得到所述目标模块文件,包括:
确定所述初始模块文件中的待复制图片,并获取所述待复制图片的图片属性;
针对所述待复制图片执行复制操作,得到目标图片;
将所述待复制图片的图片属性添加至所述目标图片;所述目标模块文件包括所述目标图片。

5.根据权利要求1所述的代码复制方法,其特征在于,所述对所述中间代码进行改名操作,以生成目标代码,包括:
对所述中间代码进行代码分析,得到所述中间代码的初始语法分析树;
根据所述初始语法分析树确定所述中间代码的初始对象名称,并获取所述初始对象名称对应的目标对象名称;
采用所述目标对象名称替换所述初始语法分析树中的所述初始对象名称,以生成目标语法分析树,并根据所述目标语法分析树生成所述目标代码。

6.根据权利要求1所述的代码复制方法,其特征在于,所述获取所述初始模块文件与所述目标模块文件之间的标识符对照列表,包括:
获取所述初始模块文件的初始存储路径,并根据所述初始存储路径生成所述初始模块文件中初始资源对应的初始资源标识符;
根据所述目标存储位置确定目标存储路径,并根据所述目标存储路径生成所述目标模块文件中目标资源对应的目标资源标识符;
根据所述初始资源标识符和所述目标资源标识符生成所述标识符对照列表。

7.根据权利要求6所述的代码复制方法,其特征在于,所述目标资源包括预制体资源,所述根据所述标识符对照列表对所述目标资源执行重绑定操作,包括:
从所述标识符对照列表中获取所述预制体资源的预制体标识符信息;其中,所述预制体标识符信息包括所述预制体资源对应的初始预制体标识符、所述预制体资源对应的目标预制体标识符以及标识符映射关系;
通过标识符替换函数并采用所述目标预制体标识符替换所述初始预制体标识符,以执行所述重绑定操作。

8.一种代码复制装置,其特征在于,包括:
资源文件获取模块,用于获取初始模块文件;其中,所述初始模块文件包括初始代码以及与所述初始代码相关的初始资源;
资源文件复制模块,用于针对所述初始模块文件执行复制操作,并将得到的目标模块文件存储至目标存储位置;其中,所述目标模块文件包括与所述初始代码对应的中间代码以及与所述初始资源对应的目标资源;
命名修改模块,用于对所述中间代码进行改名操作,以生成目标代码;
重绑定模块,用于获取所述初始模块文件与所述目标模块文件之间的标识符对照列表,并根据所述标识符对照列表对所述目标资源执行重绑定操作,以将所述目标代码绑定至所述目标资源。

9.一种电子设备,其特征在于,包括:
处理器;以及
存储器,所述存储器上存储有计算机可读指令,所述计算机可读指令被所述处理器执行时实现根据权利要求1至7中任一项所述的代码复制方法。

10.一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现根据权利要求1至7中任一项所述的代码复制方法。

技术说明书
代码复制方法及装置、电子设备和计算机可读存储介质
技术领域
本公开涉及软件开发技术领域,具体而言,涉及一种代码复制方法、代码复制装置、电子设备以及计算机可读存储介质。

背景技术
在游戏开发中,有时可能需要基于某些旧版本代码制作新的功能逻辑。

当旧版本的代码已经能够稳定运行,但却难以维护和修改时,可以拷贝旧的功能模块代码,在复制得到的代码基础上进行修改。

采用这种方式进行代码开发,可以避免修改到后续的功能逻辑,给旧版本的模块引入新的错误(bug)。

在基于Unity3D游戏开发工具进行游戏开发时,由于Unity开发工程中可以包括图片资源、代码资源、预制资源等多种类型的资源,因此,在复制一个功能模块时,需要将功能模块中涉及到的各类资源都进行复制操作。

由于资源之间可能存在相互引用关系,另外,由于代码中可能存在类的重名问题,因此,在进行复制操作时,还需解决上述可能存在的问题以避免资源复制操作时可能造成的问题。

需要说明的是,在上述背景技术部分公开的信息仅用于加强对本公开的背景的理解,因此可以包括不构成对本领域普通技术人员已知的现有技术的信息。

技术内容
本公开的目的在于提供一种代码复制方法、代码复制装置、电子设备以及计算机可读存储介质,进而至少在一定程度上克服代码复制过程中可能出现的命名冲突和资源之间相互引用的问题。

本公开的其他特性和优点将通过下面的详细描述变得显然,或部分地通过本技术的实践而习得。

根据本公开的第一方面,提供一种代码复制方法,包括:获取初始模块文件;其中,初始模块文件包括初始代码以及与初始代码相关的初始资源;针对初始模块文件执行复制操作,并将得到的目标模块文件存储至目标存储位置;其中,目标模块文件包括与初始代码对应的中间代码以及与初始资源对应的目标资源;对中间代码进行改名操作,以生成目标代码;获取初始模块文件与目标模块文件之间的标识符对照列表,并根据标识符对照列表对目标资源执行重绑定操作,以将目标代码绑定至目标资源。

可选的,针对初始模块文件执行复制操作,并将得到的目标模块文件存储至目标存储位置,包括:读取初始配置文件;其中,初始配置文件包括初始模块文件的初始目录路径、目标目录路径和名称映射关系;根据初始目录路径获取初始模块文件的原始名称,并根据原始名称和名称映射关系确定目标模块文件的目标名称;根据目标名称和目标目录路径生成目标模块文件的目标存储路径;针对初始模块文件执行复制操作以得到目标模块文件,并按照目标存储路径将目标模块文件存储至目标存储位置。

可选的,针对初始模块文件执行复制操作以得到目标模块文件,包括:确定初始模块文件对应的资源类型;根据资源类型确定与初始模块文件对应的目标复制操作;针对初始模块文件执行目标复制操作,以得到目标模块文件。

可选的,若资源类型为图片类型,针对初始模块文件执行目标复制操作,以得到目标模块文件,包括:确定初始模块文件中的待复制图片,并获取待复制图片的图片属性;针对待复制图片执行复制操作,得到目标图片;将待复制图片的图片属性添加至目标图片;目标模块文件包括目标图片。

可选的,对中间代码进行改名操作,以生成目标代码,包括:对中间代码进行代码分析,得到中间代码的初始语法分析树;根据初始语法分析树确定中间代码的初始对象名称,并获取初始对象名称对应的目标对象名称;采用目标对象名称替换初始语法分析树中的初始对象名称,以生成目标语法分析树,并根据目标语法分析树生成目标代码。

可选的,获取初始模块文件与目标模块文件之间的标识符对照列表,包括:获取初始模块文件的初始存储路径,并根据初始存储路径生成初始模块文件中初始资源对应的初始资源标识符;根据目标存储位置确定目标存储路径,并根据目标存储路径生成目标模块文件中目标资源对应的目标资源标识符;根据初始资源标识符和目标资源标识符生成标识符对照列表。

可选的,目标资源包括预制体资源,根据标识符对照列表对目标资源执行重绑定操作,包括:从标识符对照列表中获取预制体资源的预制体标识符信息;其中,预制体标识符信息包括预制体资源对应的初始预制体标识符、预制体资源对应的目标预制体标识符以及标识符映射关系;通过标识符替换函数并采用目标预制体标识符替换初始预制体标识符,以执行重绑定操作。

根据本公开的第二方面,提供一种代码复制装置,包括:资源文件获取模块,用于获取初始模块文件;其中,初始模块文件包括初始代码以及与初始代码相关的初始资源;资源文件复制模块,用于针对初始模块文件执行复制操作,并将得到的目标模块文件存储至目标存储位置;其中,目标模块文件包括与初始代码对应的中间代码以及与初始资源对应的目标资源;命名修改模块,用于对中间代码进行改名操作,以生成目标代码;重绑定模块,用于获取初始模块文件与目标模块文件之间的标识符对照列表,并根据标识符对照列表对目标资源执行重绑定操作,以将目标代码绑定至目标资源。

可选的,资源文件复制模块包括资源文件复制单元,用于读取初始配置文件;其中,初始配置文件包括初始模块文件的初始目录路径、目标目录路径和名称映射关系;根据初始目录路径获取初始模块文件的原始名称,并根据原始名称和名称映射关系确定目标模块文件的目标名称;根据目标名称和目标目录路径生成目标模块文件的目标存储路径;针对初始模块文件执行复制操作以得到目标模块文件,并按照目标存储路径将目标模块文件存储至目标存储位置。

可选的,资源文件复制单元包括文件复制子单元,确定初始模块文件对应的资源类型;根据资源类型确定与初始模块文件对应的目标复制操作;针对初始模块文件执行目标复制操作,以得到目标模块文件。

可选的,文件复制子单元包括图片复制子单元,用于确定初始模块文件中的待复制图片,并获取待复制图片的图片属性;针对待复制图片执行复制操作,得到目标图片;将待复制图片的图片属性添加至目标图片;目标模块文件包括目标图片。

可选的,命名修改模块包括命名修改单元,用于对中间代码进行代码分析,得到中间代码的初始语法分析树;根据初始语法分析树确定中间代码的初始对象名称,并获取初始对象名称对应的目标对象名称;采用目标对象名称替换初始语法分析树中的初始对象名称,以生成目标语法分析树,并根据目标语法分析树生成目标代码。

可选的,命名修改模块包括标识符列表确定单元,用于获取初始模块文件的初始存储路径,并根据初始存储路径生成初始模块文件中初始资源对应的初始资源标识符;根据目标存储位置确定目标存储路径,并根据目标存储路径生成目标模块文件中目标资源对应的目标资源标识符;根据初始资源标识符和目标资源标识符生成标识符对照列表。

可选的,重绑定模块包括重绑定单元,用于从标识符对照列表中获取预制体资源的预制体标识符信息;其中,预制体标识符信息包括预制体资源对应的初始预制体标识符、预制体资源对应的目标预制体标识符以及标识符映射关系;通过标识符替换函数并采用目标预制体标识符替换初始预制体标识符,以执行重绑定操作。

根据本公开的第三方面,提供一种电子设备,包括:处理器;以及存储器,所述存储器上存储有计算机可读指令,所述计算机可读指令被所述处理器执行时实现根据上述任意一项所述的代码复制方法。

根据本公开的第四方面,提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现根据上述任意一项所述的代码复制方法。

本公开提供的技术方案可以包括以下有益效果:
本公开的示例性实施例中的代码复制方法,获取初始模块文件;其中,初始模块文件包括初始代码以及与初始代码相关的初始资源;针对初始模块文件执行复制操作,并将得到的目标模块文件存储至目标存储位置;其中,目标模块文件包括与初始代码对应的中间代码以及与初始资源对应的目标资源;对中间代码进行改名操作,以生成目标代码;获取初始模块文件与目标模块文件之间的标识符对照列表,并根据标识符对照列表对目标资源执行重绑定操作,以将目标代码绑定至目标资源。

一方面,根据标识符对照列表进行改名操作和资源重绑定操作,可以解决采用现有技术进行代码或资源复制时产生的人工工作量大的问题,可以减少大量的工作时间,提高代码复制效率。

另一方面,通过对中间代码执行改名操作,极大程度上避免了开发者需要手动修改代码的操作,可以有效避免由于人工操作造成的误操作和漏操作,提高了代码复制的准确性。

再一方面,根据标识符对照列表执行重绑定操作,无需开发者了解资源数据所在的功能模块,降低了开发门槛,降低了开发难度。

应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。

附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理。

显而易见地,下面描述中的附图仅仅是本公开的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

在附图中:
图1示意性示出了根据本公开的示例性实施方式的代码复制方法的流程图;
图2示意性示出了根据本公开的示例性实施方式的复制并存储目标模块文件的流程图;
图3示意性示出了根据本公开的示例性实施方式的执行代码复制操作的基类的类图;
图4示意性示出了根据本公开的示例性实施方式的根据资源文件的资源类型确定对应的复制操作的流程图;
图5示意性示出了根据本公开的示例性实施方式的对中间代码执行改名操作的流程图;
图6示意性示出了根据本公开的示例性实施方式的生成标识符对照列表的流程图;
图7示意性示出了根据本公开的示例性实施方式的对目标资源进行重绑定操作的流程图;
图8示意性示出了根据本公开的示例性实施方式的代码复制装置的方框图;
图9示意性示出了根据本公开一示例性实施例的电子设备的框图;
图10示意性示出了根据本公开一示例性实施例的计算机可读存储介质的示意图。

具体实施方式
现在将参考附图更全面地描述示例实施例。

然而,示例实施例能够以多种形式实施,且不应被理解为限于在此阐述的实施例;相反,提供这些实施例使得本公开将全面和完整,并将示例实施例的构思全面地传达给本领域的技术人员。

在图中相同的附图标记表示相同或类似的部分,因而将省略对它们的重复描述。

此外,所描述的特征、结构或特性可以以任何合适的方式结合在一个或更多实施例中。

在下面的描述中,提供许多具体细节从而给出对本公开的实施例的充分理解。

然而,本领域技术人员将意识到,可以实践本公开的技术方案而没有所述特定细节中的一个或更多,或者可以采用其它的方法、组元、装置、步骤等。

在其它情况下,不详细示出或描述公知结构、方法、装置、实现、材料或者操作以避免模糊本公开的各方面。

附图中所示的方框图仅仅是功能实体,不一定必须与物理上独立的实体相对应。

即,可以采用软件形式来实现这些功能实体,或在一个或多个软件硬化的模块中实现这些功能实体或功能实体的一部分,或在不同网络和/或处理器装置和/或微控制器装置中实现这些功能实体。

在游戏开发中,有时可能需要基于某些旧版本代码制作新的功能逻辑。

当旧版本的代码已经能够稳定运行,但却难以维护和修改时,可以拷贝旧的功能模块代码,在复制得到的代码基础上进行修改。

采用这种方式进行代码开发,可以避免修改到后续的功能逻辑,避免给旧版本的模块引入新的错误(bug)。

在基于Unity3D游戏开发工具进行游戏开发时,Unity中的资源可能包括图片、代码、预制体等多种类型的资源,在复制一个功能模块时,需要将功能模块中涉及到的各类资源都进行复制。

然而采用现有的代码复制方法可能产生下述问题。

一是由于资源之间可能存在相互引用关系。

比如,预制体可能引用代码,这导致复制出来的新预制体继续引用老的代码。

而预制体中的代码又可能引用图片资源,也将产生类似的问题。

例如,在A代码中,可能引用了全局唯一标识符(Globally UniqueIdentifier,GUID)为001的图片B。

如果只是进行简单的复制,那么得到的代码A’的GUID引用还是GUID为001的图片B,而不是新复制出来的GUID为另一个的图片B’。

另外一个就是类的重名问题。

同一个C#模块,不允许在同一个命名空间中出现名字相同的两个类。

如果只是简单的复制,将可能导致产生冲突,进而导致无法编译。

首先,在解决代码的命名冲突问题时,需要逐一打开各个文件,然后使用编辑器的“全局替换”功能,把其中的类名或者命名空间名替换成新的版本。

其次,打开预制体,删除预制体与旧版本代码之间的绑定,然后找到新版本的代码,并绑定上去。

再次,由于复制得到的新的预制体中的代码可能绑定原功能中的图片或者其他预制体,因此,同样需要将其与新版本的图片和预制体重新绑定。

同时,由于新的代码是重新被绑定到预制体中的,所以原有的预设字段都会消失,这需要开发者把各种预设字段都还原到与原来相同。

上述提到的复制之后的步骤,每一步均需要耗费巨大的人力。

例如,在第一步中,如果代码繁多复杂,且代码之间有相互引用的问题,那么开发者对于存在的n个类,可能最多需要进行重命名操作
O(n2)次。

每次修改完之后都需要使用编译器对其重新编译,才能发现隐藏的错误。

然后再去修改这些隐藏的错误,再编译检查,周而复始。

尽管如此,还是有很大的可能性出现改漏或者改错的情况,导致功能出现问题或者根本无法运行。

在第二步中,需要打开新的预制体,删除对旧代码的引用,并增加对新代码的引用。

同样这里也不是简单地将引用代码删除,由于有些代码属于公用模块,不需要重新绑定,因此需要开发者对原有的功能有一定的认识,提高了开发门槛。

第三步中需要改变预制体的引用代码对资源的绑定。

开发者常需要对照原功能的预制体,逐个将新资源拖进预制体。

由于预制体对资源的引用是常事,预制体中一个模块可能就会引用好几个资源,导致开发者的工作量特别大。

同时,预制体中代码的预设字段可能也会非常的多,这使得开发者的工作量进一步增多。

基于此,在本示例实施例中,首先提供了一种代码复制方法,可以利用服务器来实现本公开的用代码复制方法,也可以利用终端设备来实现本公开所述的方法,其中,本公开中描述的终端可以包括诸如笔记本电脑、掌上电脑等移动终端,以及诸如台式计算机等固定终端;并且,服务器和终端设备需预先安装游戏开发引擎,诸如Unity等游戏开发引擎。

图1示意性示出了根据本公开的一些实施例的代码复制方法流程的示意图。

参考图1,该代码复制方法可以包括以下步骤:
步骤S110,获取初始模块文件;其中,初始模块文件包括初始代码以及与初始代码相关的初始资源。

步骤S120,针对初始模块文件执行复制操作,并将得到的目标模块文件存储至目标存储位置;其中,目标模块文件包括与初始代码对应的中间代码以及与初始资源对应的目标资源。

步骤S130,对中间代码进行改名操作,以生成目标代码。

步骤S140,获取初始模块文件与目标模块文件之间的标识符对照列表,并根据标识符对照列表对目标资源执行重绑定操作,以将目标代码绑定至目标资源。

相关文档
最新文档