Flash AS3 - AddChild 超出精灵范围
Posted
技术标签:
【中文标题】Flash AS3 - AddChild 超出精灵范围【英文标题】:Flash AS3 - AddChild outside of sprite range 【发布时间】:2011-10-15 14:51:09 【问题描述】:我正在尝试在 Flash AS3 中创建动态滚动列表。创建列表时,我将其设置为初始长度。稍后,我将更多对象添加到列表的原始大小之外。我希望能够向下滚动列表并查看所有对象。
我的滚动条只是移动列表的 y 位置。但是,当我运行程序并滚动时,不会显示在原始列表大小之外绘制的每个对象。我该如何解决这个问题?
当我需要向列表中添加内容时,我有一个具有以下功能的列表对象。当我初始化列表时,我给它一个初始高度和宽度,我用它来创建一个蒙版。
public function AddPlayers(pPlayers:Array, pScrollBar:ScrollBar):void
var player:Player;
trace("happened again");
for (var i:int = 0; i < pPlayers.length; i++)
player = pPlayers[i];
this.addChild(player);
player.x = 0;
player.y = player.height * i;
pScrollBar.InitializeScrollBar(this);
InitializeScrollBar 函数根据所添加内容的大小更新滚动条的属性。主要是根据列表内容的大小来改变滚动面的大小。
public function InitializeScrollBar(pList:List)
this.list = pList;
// Size and place scroll track
scrollTrack.height = scrollHeight - 2 * scrollUp.height;
scrollTrack.y = scrollUp.height;
addChild(scrollTrack);
// Place scroll face
scrollFace.y = scrollUp.height;
scrollFace.height = scrollTrack.height * (scrollHeight / list.height);
addChild(scrollFace);
// Place scroll buttons
addChild(scrollUp);
scrollDown.y = scrollDown.height + scrollTrack.y + scrollTrack.height;
addChild(scrollDown);
scrollDown.scaleY = -1;
scrollFace.addEventListener(MouseEvent.MOUSE_DOWN, MoveScrollFace);
scrollDown.addEventListener(MouseEvent.CLICK, MoveDown)
scrollUp.addEventListener(MouseEvent.CLICK, MoveUp)
我在滚动条中还有一个更新函数,当滚动面被拖动时,它使用 ENTER FRAME 事件。
private function Update(evt:Event)
trace(mouseY);
scrollFace.y = mouseY;
if (scrollFace.y <= scrollTrack.y)
scrollFace.y = scrollTrack.y;
else if (scrollFace.y + scrollFace.height >= scrollTrack.y + scrollTrack.height)
scrollFace.y = scrollTrack.y + scrollTrack.height - scrollFace.height;
var scrollChange:Number = (list.height - scrollHeight)/(scrollTrack.height - scrollFace.height);
list.y = -1 * scrollChange * (scrollFace.y - scrollUp.height);
list.y = list.y + list.y % 25;
【问题讨论】:
你有一些代码可以分享吗? 您的滚动条代码可能已经设置了一些用于计算滚动距离的属性,而不是不断地从列表中读取它们。当您的列表发生变化时,它们将需要更新,但如果没有看到代码,就不可能说更多。 【参考方案1】:如果你使用标准 UIScrollbar 组件,它有一个内置函数scrollBar.update();
你应该在改变内容大小后使用这个函数。
【讨论】:
我正在使用列表中的对象,所以我认为 UIScrollBar 组件不会起作用。我认为它仅适用于文本。以上是关于Flash AS3 - AddChild 超出精灵范围的主要内容,如果未能解决你的问题,请参考以下文章
Swift - SpriteKit:如果添加不同的“addchild”父母,使精灵相互反应