2015-09-10 3 views
0

У меня есть символ tile с несколькими ключевыми кадрами. Один из ключевых кадров имеет динамическое текстовое поле с именем экземпляра pTwo.as3 Изменение динамического текста в символе

Я хочу, чтобы изменить текст в pTwo пустой строке и попытались:

pTwo.text = String(""); //Atempt One 

MovieClip.pTwo.text = String(""); //Attempt two 

Любая помощь будет оценена. Заранее спасибо

EDIT: Im делает мозаичную игру и использовать массив, чтобы сделать карту - мой массив следующим образом:

public var myMap: Array = [ 
 
\t \t \t \t \t \t [1, 1, 1, 1, 1, 1, 1, 1, 1, 1], 
 
\t \t \t \t \t \t [1, 0, 0, 0, 3, 2, 2, 2, 0, 1], 
 
\t \t \t \t \t \t [1, 0, 0, 0, 0, 0, 2, 0, 0, 1], 
 
\t \t \t \t \t \t [1, 0, 2, 0, 2, 0, 0, 0, 0, 1], 
 
\t \t \t \t \t \t [1, 0, 2, 2, 0, 3, 0, 0, 0, 1], 
 
\t \t \t \t \t \t [1, 0, 0, 0, 0, 0, 2, 2, 0, 1], 
 
\t \t \t \t \t \t [1, 0, 2, 0, 2, 0, 2, 0, 0, 1], 
 
\t \t \t \t \t \t [1, 0, 2, 2, 2, 0, 2, 0, 2, 1], 
 
\t \t \t \t \t \t [1, 0, 0, 0, 0, 0, 2, 0, 0, 1], 
 
\t \t \t \t \t \t [1, 1, 1, 1, 1, 1, 1, 1, 1, 1] 
 
\t \t \t \t \t ];

Всех массивы сделаны из символа называемый «плитка», который состоит из разных ключевых кадров. Поэтому каждое число в массиве ссылается на другой ключевой кадр. У меня есть персонаж, и когда персонаж перебирает плитку - я хочу, чтобы динамический текст менялся на пустой, чтобы имитировать пустую черепицу, - альтернативно, если это способ заменить плиту на [0], это тоже было бы хорошо.

мой код, который генерирует плату:

var mapWidth = 10; 
 
      var mapHeight = 10; 
 
      var tileSide = 32; 
 
      var totalTiles = mapWidth * mapHeight; 
 
      var myMap: Array = [ 
 
       [1, 1, 1, 1, 1, 1, 1, 1, 1, 1], 
 
       [1, 0, 0, 0, 3, 2, 2, 2, 0, 1], 
 
       [1, 0, 0, 0, 0, 0, 2, 0, 0, 1], 
 
       [1, 0, 2, 0, 2, 0, 0, 0, 0, 0], 
 
       [1, 0, 2, 2, 0, 3, 0, 0, 0, 1], 
 
       [1, 0, 0, 0, 0, 0, 2, 2, 0, 1], 
 
       [1, 0, 2, 0, 2, 0, 2, 0, 0, 1], 
 
       [1, 0, 2, 2, 2, 0, 2, 0, 2, 1], 
 
       [1, 0, 0, 0, 0, 0, 2, 0, 0, 1], 
 
       [1, 1, 1, 1, 1, 1, 1, 1, 1, 1] 
 
      ]; 
 

 
      for (var i: int = 0; i < mapHeight; i++) { 
 
       for (var u: int = 0; u < mapWidth; u++) { 
 
        var cell: MovieClip = new tile(); 
 
        cell.gotoAndStop(myMap[i][u] + 1); 
 
        cell.x = tileSide * u; 
 
        cell.y = tileSide * i; 
 
        addChild(cell); 
 
       }; 
 
      };

К сожалению я не ясно с самого начала. Новое в actionscript, поэтому я извиняюсь заранее, если моя терминология неясна.

+1

Где код вы показываете? существует ли 'pTwo' во всех фреймах вашего' tile' с правильным именем экземпляра? – BadFeelingAboutThis

ответ

0

Этот символ «плитки» доступен во всех рамах? Если головка воспроизведения перемещается, символы в MovieClip могут быть разыменованы. Добавьте объект «pTwo» в свой список наблюдения в отладочном режиме и определите, существует ли объект, который играет символ «плитка».

Возможно, вам понадобится создать один символ кадра с 2 слоями. Один с анимированным символом, а другой с текстом.

+0

Я не думаю, что я четко объяснил свою проблему, и я виноват, что я сделал некоторые изменения и очень признателен за любую помощь :) – elzzup

0

Если TextField существует только на определенном кадре, и вы уверены, что это текущий кадр, вы можете использовать это:

TextField(getChildByName("pTwo")).text = ""; 

Если вы не всегда уверены, просто обернуть его в попробуйте блок:

try { 
      TextField(getChildByName("pTwo")).text = ""; 
     } catch(error:Error) { 
      trace("text field doesn't exist on this frame"); 
     } 

Если pTwo живет внутри MovieClip, код может выглядеть примерно так:

try { 
      TextField(YourMovieclipsName.getChildByName("pTwo")).text = ""; 
     } catch(error:Error) { 
      trace("text field doesn't exist on this frame"); 
     } 

Надеюсь, это поможет!

Редактировать на основе новой информации:

for (var i: int = 0; i < mapHeight; i++) { 
     for (var u: int = 0; u < mapWidth; u++) { 
     var cell: MovieClip = new tile(); 
     cell.gotoAndStop(myMap[i][u] + 1); 
     cell.x = tileSide * u; 
     cell.y = tileSide * i; 
     try { 
      TextField(cell.getChildByName("pTwo")).text = ""; 
     } catch(error:Error) { 
      trace("text field doesn't exist on this frame"); 
     } 
     addChild(cell); 
    }; 
}; 
+0

спасибо, что ответ, к сожалению, он не работал. Я попытался использовать «try», и я получил то, что было прослежено. Думаю, я не объяснил свою проблему. Ive внесла некоторые изменения - любая дополнительная помощь будет принята с благодарностью :) – elzzup

+0

Добавлено решение для установки текста во время настройки плитки.Он должен работать, поэтому вы можете хотя бы увидеть, как изменить текст. Похоже, вам нужно будет изучить функцию ** hitTestObject() **, чтобы активировать код, как только ваш персонаж коснулся плитки. Подробнее об этом здесь: http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/DisplayObject.html#hitTestObject() – Flawsome