获得解决方案 - 请参阅帖子底部
如果我给子元素提供负-y坐标,只是想知道是否有任何问题?在我的项目中,当我这样做时,它表现得非常笨拙。
在我的flex 3.5项目中,我扩展了Canvas类。在这个课程中,我将有一个子项(Image),我动态加载并设置x,y位置以调整通常为-x和-y值的偏移量。这没问题。现在,当我尝试动态添加另一个具有-y值的子项时,它会缩小画布并显示一个非常小的矩形(不缩小图像大小)
我还注意到,即使添加了第一张图像,Canvas身高属性也为0。
有谁知道它是什么问题?
*已编辑:已添加以下源代码*
public class WorldElementView extends Canvas {
private var mainAsset:UIComponent;
private var shopItem:ShopItem;
private var map:WorldMapView;
private var loader:Loader;
private var timer:Timer;
private var readyToCollect:Boolean = false;
private var loadingUserData:Boolean = false;
private var collectionImage:Image;
删除了许多在上下文中没有意义的变量
public function WorldElementView(m:WorldMapView):void{
map = m;
mainAsset = new UIComponent();
loadAsset();
}
调用loadAsset()来加载正在加载的主资产
private function loadAsset():void{
loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE,onLoadComplete);
loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR,onLoadError);
loader.load(new URLRequest(GameConfig.ASSET_IMAGE_PATH + shopItem.ImagePath));
}
内部变量中的所有值都是正确的, //事件处理程序 私有函数onLoadComplete(e:Event):void {
loader.contentLoaderInfo.removeEventListener(Event.COMPLETE,onLoadComplete);
loader.contentLoaderInfo.removeEventListener(IOErrorEvent.IO_ERROR,onLoadError);
addEventListener(MouseEvent.CLICK,onClick);
var bmp:Bitmap = LoaderInfo(e.target).content as Bitmap;
//*****NEW CODE****//
this.height = bmp.height + 20;
this.width = bmp.width;
bmp.x+=shopItem.OffSetX;
bmp.y+=shopItem.OffSetY;
mainAsset.addChild(bmp);
addChildAt(mainAsset,0);
setDimensions();
initTimer();
dispatchEvent(new GreenRevEvent(GreenRevEvent.WORLD_ELEMENT_INITIALIZED));
}
调用initTimer()来启动计时器
public function onLoadError(e:IOErrorEvent):void{
loader.contentLoaderInfo.removeEventListener(Event.COMPLETE,onLoadComplete);
loader.contentLoaderInfo.removeEventListener(IOErrorEvent.IO_ERROR,onLoadError);
Alert.show("Error loading world!" + e.toString());
}
private function initTimer():void{
var interval:int;
// *** LOGIC to determine "interval"
interval = 10000; // hardcoded to 10 seconds
timer = new Timer(interval,1);
timer.addEventListener(TimerEvent.TIMER,onTimer);
timer.start();
}
这里不多,只是设置计时器
private function onTimer(e:TimerEvent):void{
readyToCollect = true;
showCollectIcon();
}
问题在于下面的功能看内联评论
private function showCollectIcon():void{
if(!collectionImage){
collectionImage = new Image();
collectionImage.autoLoad = true;
collectionImage.source = GameResource.imgCollect;
collectionImage.y = -20; // **** THIS BEHAVES AWCKWARDLY ****
addChild(collectionImage);
collectionImage.filters = [new GlowFilter(0x0000ff,1,10,1,1)]
collectionImage.mouseEnabled = false;
collectionImage.visible = false;
}
collectionImage.visible = true;
}
}
如果我注释掉下面这一行,那么每件事情都可以正常运行,但问题是我需要将图标放在主图像的正上方
collectionImage.y = -20;
解决方案
问题在于设置父画布的尺寸。 我在 onLoadComplete()函数
中添加了这一行 //*****NEW CODE****//
this.height = bmp.height + 20;
this.width = bmp.width;
此致
答案 0 :(得分:0)
问题在于设置父画布的尺寸。 我在 onLoadComplete()函数
中添加了这一行 this.height = bmp.height + 20;
this.width = bmp.width;