2015-03-30 90 views
0

我已经在舞台上添加了许多对象(在Achievements.as类中)来创建成就板。当有人按下后退按钮时,我想从main.as类中删除所有的孩子。另外,有没有办法创建一个自定义textField类,其中每个textField.selectable = false,而不必分别分配给每个。删除不同级别的孩子As3

public static var texts:Vector.<TextField> = new Vector.<TextField>(); 
public static var titleTxt:Vector.<TextField> = new Vector.<TextField>(); 
public static var descripTxt:Vector.<TextField> = new Vector.<TextField>(); 
public static var rewardTxt:Vector.<TextField> = new Vector.<TextField>(); 
public static var achCoins:Vector.<MovieClip> = new Vector.<MovieClip>(); 

for (var j:int = 0; j < 30; j++) 
     { 
      achCoins[j].x = 240; 
      achCoins[j].y = 45 + j * 70; 
      addChild(achCoins[j]); 
      descripTxt[j].x = 0; 
      descripTxt[j].y = 30 + 70 * j; 
      //descripTxt[j].antiAliasType = AntiAliasType.ADVANCED; 
      descripTxt[j].defaultTextFormat = tf2; 
      descripTxt[j].text = descriptext[j]; 
      descripTxt[j].embedFonts = true; 
      addChild(descripTxt[j]); 
      titleTxt[j].x = 0; 
      titleTxt[j].y = j * 70; 
      //titleTxt[j].antiAliasType = AntiAliasType.ADVANCED; 
      titleTxt[j].defaultTextFormat = tf3; 
      titleTxt[j].text = titletext[j]; 
      titleTxt[j].embedFonts = true; 
      addChild(titleTxt[j]); 
      rewardTxt[j].x = 200; 
      rewardTxt[j].y = 30 + j * 70; 
      rewardTxt[j].text = reward[j].toString(); 
      rewardTxt[j].setTextFormat(tf1); 
      rewardTxt[j].embedFonts = true; 
      rewardTxt[j].textColor = 0x000000; 
      addChild(rewardTxt[j]); 
      texts[j].text = Main.achievement[j] + "/" + totnum[j]; 
      texts[j].setTextFormat(tf1); 
      texts[j].x = 200; 
      texts[j].y = j * 70; 
      texts[j].embedFonts = true; 
      addChild(texts[j]); 

     } 

然后我使用此代码

for (var k:int = 0; k < 30; k++) 
     { 
      removeChild(achievementback.descripTxt[k]); 
      removeChild(achievementback.titleTxt[k]); 
      removeChild(achievementback.rewardTxt[k]); 
      removeChild(achievementback.texts[k]); 

     } 

我得到的错误

1119: Access of possibly undefined property descripTxt through a reference with static type Achievements.

for (var i:int = 0; i < 30; i++) 
     { 
      texts.push(new TextField()); 
      titleTxt.push(new TextField()); 
      rewardTxt.push(new TextField()); 
      descripTxt.push(new TextField()); 
      achCoins.push(new coinSmall()); 
     { 

在Achievements.as删除儿童类

public function RemoveTextboxes(){ 
for (var k:int = 0; k < 30; k++) 
    { 
     removeChild(descripTxt[k]); 
     removeChild(titleTxt[k]); 
     removeChild(rewardTxt[k]); 
     removeChild(texts[k]); 
    } 
} 

在Main.as类

achievementback.RemoveTextBoxes() 

这里是我的全部成果二等

package 
{ 
import flash.display.MovieClip; 
import flash.text.TextField; 
import flash.text.TextFormat; 
import flash.display.Shape; 
import flash.display.Graphics; 
import flash.text.AntiAliasType; 
public class Achievements extends MovieClip 
{ 
    public var backRect:Shape = new Shape(); 
    public var coinsmall:MovieClip = new coinSmall(); 
    public var titleText:MyTextField = new MyTextField(); 
    public var descripText:MyTextField = new MyTextField(); 
    public var reward_txt:MyTextField = new MyTextField(); 
    public static var texts:Vector.<TextField> = new Vector.<TextField>(); 
    public static var titleTxt:Vector.<TextField> = new Vector.<TextField>(); 
    public static var descripTxt:Vector.<TextField> = new Vector.<TextField>(); 
    public static var rewardTxt:Vector.<TextField> = new Vector.<TextField>(); 
    public static var achCoins:Vector.<MovieClip> = new Vector.<MovieClip>(); 
    public var tf1:TextFormat = new TextFormat(); 
    public var tf2:TextFormat = new TextFormat(); 
    public var tf3:TextFormat = new TextFormat(); 
    //Achievement Variables 
    public var descriptext:Array = new Array(); 
    public static var acharr:Array = new Array(); 
    public var titletext:Array = new Array(); 
    public var reward:Array = new Array(25,50,250,500,200,2000,10,100,500,10,25,50,10,25,100,25,25,50,50,100,500,500,5,5,5,50,10,50,100,250); 


    public function Achievements() 
    { 
     //Defining Objects 
     //Set Up Text Formats 
     //Text Format 1 
     tf1.font = "Myriad pro"; 
     tf1.size = 20; 
     tf1.color = 0x660000; 
     tf1.align = "right"; 
     //Text Format 2 
     tf2.size = 16; 
     tf2.color = 0xB8461D; 
     tf2.font = "Myriad Pro"; 
     tf2.align = "center"; 
     //Text Format 3 
     tf3.size = 23; 
     tf3.color = 0x660000; 
     tf3.font = "Myriad Pro"; 
     tf3.align = "center"; 
     //Text Box: Fraction Completed 

     //Text Box: Reward Amount For Each Achievement 
     //Text Box: Description of Achievement 

     for (var i:int = 0; i < 30; i++) 
     { 
      texts.push(new TextField()); 
      titleTxt.push(new TextField()); 
      rewardTxt.push(new TextField()); 
      descripTxt.push(new TextField()); 
      achCoins.push(new coinSmall()); 
      backRect.graphics.beginFill(0x86B46D, 0.7); 
      backRect.graphics.drawRoundRect(0, i*70, 300, 60, 10, 10); 
      backRect.graphics.endFill(); 
      addChild(backRect); 
     } 

     //change the text in a loop; 
     var acharr:Array = new Array(); 
     var totnum:Array = new Array(50,100,500,1000,5,10,10,100,500,25,50,100,1,1,3,1,50,100,50,100,2,5,5,5,5,20,10,50,100,250); 
     for (var j:int = 0; j < 30; j++) 
     { 
      achCoins[j].x = 240; 
      achCoins[j].y = 45 + j * 70; 
      addChild(achCoins[j]); 
      descripTxt[j].width = 225; 
      descripTxt[j].height = 30; 
      descripTxt[j].x = 0; 
      descripTxt[j].y = 30 + 70 * j; 
      //descripTxt[j].antiAliasType = AntiAliasType.ADVANCED; 
      descripTxt[j].defaultTextFormat = tf2; 
      descripTxt[j].text = descriptext[j]; 
      descripTxt[j].embedFonts = true; 
      addChild(descripTxt[j]); 
      titleTxt[j].width = 225; 
      titleTxt[j].height = 30; 
      titleTxt[j].x = 0; 
      titleTxt[j].y = j * 70; 
      //titleTxt[j].antiAliasType = AntiAliasType.ADVANCED; 
      titleTxt[j].defaultTextFormat = tf3; 
      titleTxt[j].text = titletext[j]; 
      titleTxt[j].embedFonts = true; 
      addChild(titleTxt[j]); 
      rewardTxt[j].width = 100; 
      rewardTxt[j].height = 30; 
      rewardTxt[j].selectable = false; 
      rewardTxt[j].x = 200; 
      rewardTxt[j].y = 30 + j * 70; 
      rewardTxt[j].text = reward[j].toString(); 
      rewardTxt[j].setTextFormat(tf1); 
      rewardTxt[j].embedFonts = true; 
      rewardTxt[j].textColor = 0x000000; 
      addChild(rewardTxt[j]); 
      texts[j].text = acharr[j] + "/" + totnum[j]; 
      texts[j].setTextFormat(tf1); 
      texts[j].width = 100; 
      texts[j].height = 30; 
      texts[j].selectable = false; 
      texts[j].x = 200; 
      texts[j].y = j * 70; 
      texts[j].embedFonts = true; 
      addChild(texts[j]); 

     } 
    } 
public function RemoveTextboxes(){ 
for (var k:int = 0; k < 30; k++) 
    { 
     removeChild(descripTxt[k]); 
     removeChild(titleTxt[k]); 
     removeChild(rewardTxt[k]); 
     removeChild(texts[k]); 
    } 
}} 

} 的阵列descriptext:数组acharr:数组titletext:阵列中的所有在他们正确的内容,但它是大量的文字,所以我把它张贴此

这里是我使用从Main.as

除去孩子的代码
+0

是否在添加之前删除它们? – Xela 2015-03-31 00:14:13

+0

@Xela我将他们删除后,但在不同的类 – TomMcmann 2015-03-31 03:35:09

回答

0

我不得不稍微修改代码并注释掉设置框中的文本以使其运行(因为我缺少一些代码)但是,我的问题似乎是文本框被删除但你的绿色形状留在舞台上。添加一个矢量来保存所有这些并将它们添加到remove函数中。

package { 
    import flash.display.MovieClip; 
    import flash.text.TextField; 
    import flash.text.TextFormat; 
    import flash.display.Shape; 
    import flash.display.Graphics; 
    import flash.text.AntiAliasType; 
    public class Achievements extends MovieClip 
    { 
     public var coinsmall:MovieClip = new MovieClip(); 
     public var titleText:TextField = new TextField(); 
     public var descripText:TextField = new TextField(); 
     public var reward_txt:TextField = new TextField(); 
     public static var texts:Vector.<TextField> = new Vector.<TextField>(); 
     public static var titleTxt:Vector.<TextField> = new Vector.<TextField>(); 
     public static var descripTxt:Vector.<TextField> = new Vector.<TextField>(); 
     public static var rewardTxt:Vector.<TextField> = new Vector.<TextField>(); 
     public static var achCoins:Vector.<MovieClip> = new Vector.<MovieClip>(); 
     public static var graphix:Vector.<Shape> = new Vector.<Shape>(); 
     public var tf1:TextFormat = new TextFormat(); 
     public var tf2:TextFormat = new TextFormat(); 
     public var tf3:TextFormat = new TextFormat(); 
     //Achievement Variables 
     public var descriptext:Array = new Array(); 
     public static var acharr:Array = new Array(); 
     public var titletext:Array = new Array(); 
     public var reward:Array = new Array(25,50,250,500,200,2000,10,100,500,10,25,50,10,25,100,25,25,50,50,100,500,500,5,5,5,50,10,50,100,250); 


     public function Achievements() 
     { 
      //Defining Objects 
      //Set Up Text Formats 
      //Text Format 1 
      tf1.font = "Myriad pro"; 
      tf1.size = 20; 
      tf1.color = 0x660000; 
      tf1.align = "right"; 
      //Text Format 2 
      tf2.size = 16; 
      tf2.color = 0xB8461D; 
      tf2.font = "Myriad Pro"; 
      tf2.align = "center"; 
      //Text Format 3 
      tf3.size = 23; 
      tf3.color = 0x660000; 
      tf3.font = "Myriad Pro"; 
      tf3.align = "center"; 

      for (var i:int = 0; i < 30; i++) 
      { 
       descriptext.push("THIS IS " + i); 
       texts.push(new TextField()); 
       titleTxt.push(new TextField()); 
       rewardTxt.push(new TextField()); 
       descripTxt.push(new TextField()); 
       achCoins.push(new MovieClip()); 
       var backRect:Shape = new Shape(); 
       backRect.graphics.beginFill(0x86B46D, 0.7); 
       backRect.graphics.drawRoundRect(0, i*70, 300, 60, 10, 10); 
       backRect.graphics.endFill(); 
       graphix.push(backRect); 
       addChild(backRect); 
      } 

      //change the text in a loop; 
      var acharr:Array = new Array(); 
      var totnum:Array = new Array(50,100,500,1000,5,10,10,100,500,25,50,100,1,1,3,1,50,100,50,100,2,5,5,5,5,20,10,50,100,250); 
      for (var j:int = 0; j < 30; j++) 
      { 
       achCoins[j].x = 240; 
       achCoins[j].y = 45 + j * 70; 
       addChild(achCoins[j]); 
       descripTxt[j].width = 225; 
       descripTxt[j].height = 30; 
       descripTxt[j].x = 0; 
       descripTxt[j].y = 30 + 70 * j; 
       //descripTxt[j].antiAliasType = AntiAliasType.ADVANCED; 
       descripTxt[j].defaultTextFormat = tf2; 
       //descripTxt[j].text = descriptext[j]; 
       descripTxt[j].embedFonts = true; 
       addChild(descripTxt[j]); 
       titleTxt[j].width = 225; 
       titleTxt[j].height = 30; 
       titleTxt[j].x = 0; 
       titleTxt[j].y = j * 70; 
       //titleTxt[j].antiAliasType = AntiAliasType.ADVANCED; 
       titleTxt[j].defaultTextFormat = tf3; 
       //titleTxt[j].text = titletext[j]; 
       titleTxt[j].embedFonts = true; 
       addChild(titleTxt[j]); 
       rewardTxt[j].width = 100; 
       rewardTxt[j].height = 30; 
       rewardTxt[j].selectable = false; 
       rewardTxt[j].x = 200; 
       rewardTxt[j].y = 30 + j * 70; 
       //rewardTxt[j].text = reward[j].toString(); 
       rewardTxt[j].setTextFormat(tf1); 
       rewardTxt[j].embedFonts = true; 
       rewardTxt[j].textColor = 0x000000; 
       addChild(rewardTxt[j]); 
       //texts[j].text = acharr[j] + "/" + totnum[j]; 
       texts[j].setTextFormat(tf1); 
       texts[j].width = 100; 
       texts[j].height = 30; 
       texts[j].selectable = false; 
       texts[j].x = 200; 
       texts[j].y = j * 70; 
       texts[j].embedFonts = true; 
       addChild(texts[j]); 

      } 
     } 

     public function RemoveTextboxes(){ 
     trace("removing") 
     for (var k:int = 0; k < 30; k++) 
      { 
       removeChild(descripTxt[k]); 
       removeChild(titleTxt[k]); 
       removeChild(rewardTxt[k]); 
       removeChild(texts[k]); 
       removeChild(graphix[k]); 
      } 
     } 
    } 
} 

我也不得不将您的自定义类更改回MovieClip和TextBox,因为我没有这些源代码。

+0

你会如何将他们从主类中删除? – TomMcmann 2015-03-31 03:33:17

+0

我以为你试图删除Main.as中的textfields。如果你想从Main.as中移除Achievement.as中的textfields,你可以在你的类Achievement.as中添加一个方法,名为RemoveTextboxes(),然后从Main.as中调用myAchievementClassInstance.RemoveTextBoxes(); – 2015-03-31 19:03:57

+0

也许多一点的代码可能会有所帮助。 – 2015-03-31 19:04:22

0

它应该是:

for (var k:int = 0; k < 30; k++) 
     { 
      achievementback.removeChild(achievementback.descripTxt[k]); 
      achievementback.removeChild(achievementback.titleTxt[k]); 
      achievementback.removeChild(achievementback.rewardTxt[k]); 
      achievementback.removeChild(achievementback.texts[k]); 
     } 

更新 你甚至添加这些的DisplayObject到矢量阵列?

+0

我已经试过了,它不工作 – TomMcmann 2015-03-31 03:49:10

+0

它得到了同样的错误作为一个我最初发布的 – TomMcmann 2015-03-31 03:50:34

+0

你是否将这些DisplayObject添加到你的矢量数组中? – Xela 2015-03-31 04:00:50

相关问题