ActionScript 3.0 Cookbook 6.2 从显示列表中移除项目(翻译:转载请注明)
2007-08-08 11:33
501 查看
6.2 从显示列表中移除项目(翻译:<ok7758521ok@hotmail.com>转载请注明)
问题:
你要想从显示列表移除项目从而从屏幕中移除
解决方案:
使用DisplayObjectContainer 类的removeChild()和removeChildAt()方法
讨论:
6.1节中已经陈述了如何用addChild()和addChildAt()方法去在显示列表中增加显示对象
达到相反的效果可以用removeChild()和removeChild()方法。
removeChild()方法接收唯一的参数,这个参数就是要从容器对象中要被删除的子对象,
如果假设被删除的对象不是一个容器的子对象,那么将会抛出一个参数异常
package{
import flash.display.Sprite;
import flash.text.TextField;
import flash.events.MouseEvent;
public class RemoveChildExample extends Sprite {
//创建一个本地变量用于存储稍后将被移除的Textfield
private var _label:TextField;
public function RemoveChildExample( ) {
_label = new TextField( );
_label.text = "Some Text";
// 把Textfield对象加入显示对象列表
addChild( _label );
//当鼠标点击舞台的任意位置时标签label被移除
stage.addEventListener( MouseEvent.CLICK, removeLabel );
}
// 从显示对象列表中移除该标签对象
public function removeLabel( event:MouseEvent ):void {
removeChild( _label );
}
}
}
在上面的代码例子中创建一个本地变量label来存储将要被removeChild()删除的对象TextField
如果你不用label存储被删除对象,也可以用removeChildAt()方法代替
removeChildAt()方法的参数也是一个,不过它是容器显示列表孩子对象的索引值。
范围0到numChildren 1. 如果无效的索引(如负数值,或者大于容器子节点数目的值)被指定
那么将抛出异常,将上面的代码用removeChildAt() 方法实现代码如下:
package {
import flash.display.Sprite;
import flash.text.TextField;
import flash.events.MouseEvent;
public class DisplayListExample extends Sprite {
public function DisplayListExample( ) {
var label:TextField = new TextField( );
label.text = "Some Text";
// 把label加入显示对象列表中
addChild( label );
//当鼠标点击舞台的任意位置时标签label被移除
stage.addEventListener( MouseEvent.CLICK, removeLabel );
}
// 从容器对象列表中移除所有子对象
public function removeLabel( event:MouseEvent ):void {
// 如果子对象存在则移除
if ( numChildren > 0 ) {
removeChildAt( 0 );
}
}
}
}
注意:移除子对象并不是完全删除该子对象,而是阻止其显示,如果要完全的删除该对象,要将该对象赋值为null
如果你想删除一个容器的所有的子对象,可以用removeChildAt()和一个循环一起来实现
每一个容器都有一个numChildren属性,这个属性指出该对象有多少个子对象的数目
无论什么时间从子对象列表中移除某一个子象,其他的没有被移除的子对象中位置比它高的都会移动一个位
来屏蔽空隙。比如列表中有三个子对象,分别对应列表中的0,1,2位置,如果0位置的子对象被删除,那么
1位置的子对象会移动到0位置,2位置的的子对象会移动到1位置。
我们推荐使用的第一种方法,是用ascb.util.DisplayObjectUtilities 类
package ascb.util {
import flash.display.*;
public class DisplayObjectUtilities {
// 移除一个容器中所有子对象
public static function removeAllChildren(
container:DisplayObjectContainer ):void {
// 每次移除一个子对象numChildren都会改变
var count:int = container.numChildren;
//通过循环移除子对象
for ( var i:int = 0; i < count; i++ ) {
container.removeChildAt( 0 );
}
}
}
第二中方法,使用DisplayObjectUtilities.removeAllChildren( ) 方法:
package {
import flash.display.*;
import ascb.util.DisplayObjectUtilities;
public class DisplayListExample extends Sprite {
public function DisplayListExample( ) {
//增加空的sprite对象
addChild( new Sprite( ) );
addChild( new Sprite( ) );
// 从这个容器中移除所有的对象
DisplayObjectUtilities.removeAllChildren( this );
// 所有的子对象被移除后该值显示为0
trace( numChildren );
}
}
}
问题:
你要想从显示列表移除项目从而从屏幕中移除
解决方案:
使用DisplayObjectContainer 类的removeChild()和removeChildAt()方法
讨论:
6.1节中已经陈述了如何用addChild()和addChildAt()方法去在显示列表中增加显示对象
达到相反的效果可以用removeChild()和removeChild()方法。
removeChild()方法接收唯一的参数,这个参数就是要从容器对象中要被删除的子对象,
如果假设被删除的对象不是一个容器的子对象,那么将会抛出一个参数异常
package{
import flash.display.Sprite;
import flash.text.TextField;
import flash.events.MouseEvent;
public class RemoveChildExample extends Sprite {
//创建一个本地变量用于存储稍后将被移除的Textfield
private var _label:TextField;
public function RemoveChildExample( ) {
_label = new TextField( );
_label.text = "Some Text";
// 把Textfield对象加入显示对象列表
addChild( _label );
//当鼠标点击舞台的任意位置时标签label被移除
stage.addEventListener( MouseEvent.CLICK, removeLabel );
}
// 从显示对象列表中移除该标签对象
public function removeLabel( event:MouseEvent ):void {
removeChild( _label );
}
}
}
在上面的代码例子中创建一个本地变量label来存储将要被removeChild()删除的对象TextField
如果你不用label存储被删除对象,也可以用removeChildAt()方法代替
removeChildAt()方法的参数也是一个,不过它是容器显示列表孩子对象的索引值。
范围0到numChildren 1. 如果无效的索引(如负数值,或者大于容器子节点数目的值)被指定
那么将抛出异常,将上面的代码用removeChildAt() 方法实现代码如下:
package {
import flash.display.Sprite;
import flash.text.TextField;
import flash.events.MouseEvent;
public class DisplayListExample extends Sprite {
public function DisplayListExample( ) {
var label:TextField = new TextField( );
label.text = "Some Text";
// 把label加入显示对象列表中
addChild( label );
//当鼠标点击舞台的任意位置时标签label被移除
stage.addEventListener( MouseEvent.CLICK, removeLabel );
}
// 从容器对象列表中移除所有子对象
public function removeLabel( event:MouseEvent ):void {
// 如果子对象存在则移除
if ( numChildren > 0 ) {
removeChildAt( 0 );
}
}
}
}
注意:移除子对象并不是完全删除该子对象,而是阻止其显示,如果要完全的删除该对象,要将该对象赋值为null
如果你想删除一个容器的所有的子对象,可以用removeChildAt()和一个循环一起来实现
每一个容器都有一个numChildren属性,这个属性指出该对象有多少个子对象的数目
无论什么时间从子对象列表中移除某一个子象,其他的没有被移除的子对象中位置比它高的都会移动一个位
来屏蔽空隙。比如列表中有三个子对象,分别对应列表中的0,1,2位置,如果0位置的子对象被删除,那么
1位置的子对象会移动到0位置,2位置的的子对象会移动到1位置。
我们推荐使用的第一种方法,是用ascb.util.DisplayObjectUtilities 类
package ascb.util {
import flash.display.*;
public class DisplayObjectUtilities {
// 移除一个容器中所有子对象
public static function removeAllChildren(
container:DisplayObjectContainer ):void {
// 每次移除一个子对象numChildren都会改变
var count:int = container.numChildren;
//通过循环移除子对象
for ( var i:int = 0; i < count; i++ ) {
container.removeChildAt( 0 );
}
}
}
第二中方法,使用DisplayObjectUtilities.removeAllChildren( ) 方法:
package {
import flash.display.*;
import ascb.util.DisplayObjectUtilities;
public class DisplayListExample extends Sprite {
public function DisplayListExample( ) {
//增加空的sprite对象
addChild( new Sprite( ) );
addChild( new Sprite( ) );
// 从这个容器中移除所有的对象
DisplayObjectUtilities.removeAllChildren( this );
// 所有的子对象被移除后该值显示为0
trace( numChildren );
}
}
}
相关文章推荐
- ActionScript 3.0 Cookbook 6.1添加一个项目到可视化列表中
- ActionScript 3 Cookbook 6.4创建自定义可视化对象(翻译:转载请注明)
- ActionScript 3.0 Cookbook 6.3向前或向后移动对象翻译
- Actionscript 3.0 显示编程基础---显示列表
- Actionscript 3.0 显示编程基础---显示列表
- remove xcode recent projects from dock menu 移除xcode dock菜单显示的项目列表
- [iOS基础控件 - 6.2] LOL英雄列表 UITableView单项显示
- 分析petshop3.0显示产品列表
- 如何让tomcat不显示文件列表(转载)
- OA项目11:部门列表树状显示功能及其他代码优化
- JAVAEE——SSH项目实战04:联系人添加、列表显示和修改
- ActionScript 3.0 学习(四) AS3显示对象的几个基本属性,ButtonMode,DropTarget,hitArea以及ScaleX,ScaleY,ScrollRect
- 清楚 Visual Studio 上的 开始页面上的最近项目列表(转载)
- 完整项目:木子记事本(原创,转载请注明出处)。
- [ActionScript 3.0] 用TextField的方法getCharIndexAtPoint(x:Number, y:Number):int实现文字在固定范围内显示
- IE6/7 BUG 列表UL OL项目符号不显示
- 项目里用百度地图城市列表不显示的问题
- [翻译]Nehe Lesson#12 显示列表
- iOS项目开发实战——学会使用TableView列表控件(四)plist读取与Section显示
- VS2010新建”安装和部署项目“时,“项目属性”-》“系统必备”列表中没有项,或显示“prerequisite could not be found for Bootstrapping”,的解决方法