as3 - 将位图转换回视图中的矢量
as3 - converting bitmap back to vector in view
所以我找到了一个 V-CAM 源,我现在正在使用它并且很高兴但是,当凸轮查看位图对象时是否可以取消位图?例如,假设我有一个带有一堆矢量艺术的矢量动画片段,我从 IDE 切换到动画片段上的位图导出,现在是否可以添加到我的 VCAM 中,它的视图中的所有内容(它调整舞台大小)取消切换或重新绘制回矢量,而 map/movieclip 的其余部分仍在位图中?当 VCAM 移开时,从位图转移到矢量的内容又转移回位图?
var camColor: ColorTransform = new ColorTransform();
var parentColor: ColorTransform = new ColorTransform();
var cX: Number;
var cY: Number;
var sX: Number;
var sY: Number;
this.visible = false;
var oldMode: String = stage.scaleMode;
stage.scaleMode = StageScaleMode.EXACT_FIT;
cX = stage.stageWidth / 2;
cY = stage.stageHeight / 2;
sX = stage.stageWidth;
sY = stage.stageHeight;
stage.scaleMode = oldMode;
camColor = this.transform.colorTransform;
parentColor = this.parent.transform.colorTransform;
camControl(new Event(Event.ENTER_FRAME));
addEventListener(Event.ENTER_FRAME, camControl);
addEventListener(Event.REMOVED, resetStage);
function camControl(event: Event): void {
camColor = this.transform.colorTransform;
parent.transform.colorTransform = camColor;
var xScale: Number = sX / this.width;
var yScale: Number = sY / this.height;
parent.x = cX - (this.x * xScale);
parent.y = cY - (this.y * yScale);
parent.scaleX = xScale;
parent.scaleY = yScale;
}
function resetStage(event: Event): void {
removeEventListener(Event.ENTER_FRAME, camControl);
parent.transform.colorTransform = parentColor;
parent.scaleX = 1;
parent.scaleY = 1;
parent.x = 0;
parent.y = 0;
}
我认为您最好使用另一台具有更高位图尺寸 (2x-4x) 的相机来渲染那些您认为过于像素化的矢量场景。在导出方面,只需将角色的位图导出 2 到 4 倍大,或者您可以将其作为矢量放在应用程序中的某个位置,可能会隐藏,并在需要时进行实时渲染,或者直接将其作为矢量放在显示列表中而不是位图。
如果您需要将一些复杂的矢量形式放入基于位图的引擎中,您可以在各种 postures/rotations 中使用单个源的实时位图绘制,然后使用这些渲染的位图来获得性能。检查游戏 "Enigmata: Stellar War" 中的这项技术,它在这个过程中看起来如何(提示:当它说 "Loading boss" 时它会在幕后进行所有渲染)。
与将现成的矢量化源存储在某处相比,获取矢量化源格式位图消耗的处理器要多得多。此外,您不会以精确的形式恢复原始矢量,因为将矢量转换为位图是一种有损转换。
所以我找到了一个 V-CAM 源,我现在正在使用它并且很高兴但是,当凸轮查看位图对象时是否可以取消位图?例如,假设我有一个带有一堆矢量艺术的矢量动画片段,我从 IDE 切换到动画片段上的位图导出,现在是否可以添加到我的 VCAM 中,它的视图中的所有内容(它调整舞台大小)取消切换或重新绘制回矢量,而 map/movieclip 的其余部分仍在位图中?当 VCAM 移开时,从位图转移到矢量的内容又转移回位图?
var camColor: ColorTransform = new ColorTransform();
var parentColor: ColorTransform = new ColorTransform();
var cX: Number;
var cY: Number;
var sX: Number;
var sY: Number;
this.visible = false;
var oldMode: String = stage.scaleMode;
stage.scaleMode = StageScaleMode.EXACT_FIT;
cX = stage.stageWidth / 2;
cY = stage.stageHeight / 2;
sX = stage.stageWidth;
sY = stage.stageHeight;
stage.scaleMode = oldMode;
camColor = this.transform.colorTransform;
parentColor = this.parent.transform.colorTransform;
camControl(new Event(Event.ENTER_FRAME));
addEventListener(Event.ENTER_FRAME, camControl);
addEventListener(Event.REMOVED, resetStage);
function camControl(event: Event): void {
camColor = this.transform.colorTransform;
parent.transform.colorTransform = camColor;
var xScale: Number = sX / this.width;
var yScale: Number = sY / this.height;
parent.x = cX - (this.x * xScale);
parent.y = cY - (this.y * yScale);
parent.scaleX = xScale;
parent.scaleY = yScale;
}
function resetStage(event: Event): void {
removeEventListener(Event.ENTER_FRAME, camControl);
parent.transform.colorTransform = parentColor;
parent.scaleX = 1;
parent.scaleY = 1;
parent.x = 0;
parent.y = 0;
}
我认为您最好使用另一台具有更高位图尺寸 (2x-4x) 的相机来渲染那些您认为过于像素化的矢量场景。在导出方面,只需将角色的位图导出 2 到 4 倍大,或者您可以将其作为矢量放在应用程序中的某个位置,可能会隐藏,并在需要时进行实时渲染,或者直接将其作为矢量放在显示列表中而不是位图。
如果您需要将一些复杂的矢量形式放入基于位图的引擎中,您可以在各种 postures/rotations 中使用单个源的实时位图绘制,然后使用这些渲染的位图来获得性能。检查游戏 "Enigmata: Stellar War" 中的这项技术,它在这个过程中看起来如何(提示:当它说 "Loading boss" 时它会在幕后进行所有渲染)。
与将现成的矢量化源存储在某处相比,获取矢量化源格式位图消耗的处理器要多得多。此外,您不会以精确的形式恢复原始矢量,因为将矢量转换为位图是一种有损转换。