- 最后登录
- 2021-9-15
- 注册时间
- 2011-7-15
- 阅读权限
- 100
- 积分
- 50625
- 纳金币
- 53202
- 精华
- 32
|
[sandy3D引擎]sandy1.1与sandy1.2使用单一代码库
我一直在使用Sandy1.1,因为它比较稳定,但我想在Sandy 1.2尝试一些新东西。我想为每个版本的不同部分有条件地编译代码,以处理库之间的差异。
Sandy 1.2变化的详细信息,请参阅附件。
有一种解决方案是使用预处理器有条件地编译代码。(参见条件编译MTASC和迈克·钱伯斯的博客上发布条件编译。)
不过,据我所知,Flash第8代中的创作工具不支持条件编译,同时我也不想打扰一个预处理。
由于在Sandy 1.1和Sandy 1.2库的差异,这里采用一个简单的方法来欺骗Flash的语法检查器以防止编译时错误。
警告:Flash对你的参数是错误类型的警告。
基本的技巧是使用无类型变量的构造函数名称。
以下,,我用tmpCam和tmpscreen代替Camera3D和ClipScreen,以避免编译器错误。
我的“版本”变量定义为“1.1”,“1.2”。
var version = "1.1";
var tmpCam = Camera3D;
if (version == "1.1") {
var tmpScreen = ClipScreen;
var screen:ClipScreen = new tmpScreen(mc,250,250);
var cam:Camera3D = new tmpCam(350,screen);
} else {
var cam:Camera3D = new tmpCam(350,350);// 1.2
}
你可以为Sandy1.1和1.2的其他区别点做一些类似的事情(见主要网站上的常见问题解答,详细了解这些)
例如,你可以从enableBackFaceCulling去做到这一点,enableBackFaceCulling是一个Sandy 1.1的固有属性,但在Sandy 1.2里确实个路径。
var version = "1.1";
var tmpObj = theRealObj;
if (version == "1.1") {
tmpObj.enableBackFaceCulling = ***e;
} else {
tmpObj.enableBackFaceCulling (***e);
}
你唯一需要做的(除了改变您的版本变量)只是使其指向正确的Sandy库1.1或1.2,而手工去设置CLASSPATH。
当您切换不同版本之间的Sandy库时,不要忘了删除ASO文件。
你可以通过两种外壳的FLA文件来解决这个问题,每一个不同的类路径下设置发布设置(而不是根据首选项,适用于所有FLAS)
这也将是可能的修补World3D的类中的Sandy 1.1和Sandy 1.2库返回版本号,所以您的代码可以检查该值,而不是手动版本号。我就曾弄了这样一个Sandy 1.2 变化的SVN存储库。新的方法是 World3D.getVersion(),它返回字符串“1.2”Sandy1.2。如果要修补你的Sandy1.1 World3D.as的文件,添加以下代码:
private static var _version:String = "1.1";
public static function getVersion( Void ) : String
{
return _version;
}
您还可以添加类似的补丁,弥补Sandy1.1和Sandy1.2之间的差异,以确保向前兼容性。我做了一些变化,例如,支持addCamera()在Sandy 1.2一样,它是支持的,Sandy1.1。这可以节省您的麻烦改变你的addCamera()调用的setCamera()。
好了主要分享就是这些,原文在这里:http://www.flashsandy.org/multiversions。
编译:驰骋的风
如需转载请保留本文纳金网处链接:http://www.narkii.com/club/bbs_285254.shtml
|
|