PDA

Просмотр полной версии : TypeError: Error #2007: Parameter child must be non-null.


$mival
17.06.2007, 12:24
Начал ковырять AS3.

Написал простейший "конвертер" string->ascii->string.
Но вот беда: в Output вылезает какая то непонятная ботва:
TypeError: Error #2007: Parameter child must be non-null.
at flash.display::DisplayObjectContainer/addChildAt()
at fl.controls::BaseButton/fl.controls:BaseButton::drawBackground()
at fl.controls::BaseButton/fl.controls:BaseButton::draw()
at fl.core::UIComponent/drawNow()
at fl.controls::ScrollBar/fl.controls:ScrollBar::draw()
at fl.controls::UIScrollBar/fl.controls:UIScrollBar::draw()
at fl.core::UIComponent/drawNow()
at fl.controls::TextArea/fl.controls:TextArea::updateScrollBars()
at fl.controls::TextArea/fl.controls:TextArea::drawLayout()
at fl.controls::TextArea/fl.controls:TextArea::draw()
at fl.core::UIComponent/::callLaterDispatcher()


Код для нетелепатов:

import flash.display.SimpleButton;
import flash.events.MouseEvent;

convert_ascii_btn.addEventListener(MouseEvent.MOUSE_DOWN, _convert_ascii);
convert_unicode_btn.addEventListener(MouseEvent.MOUSE_DOWN, _convert_unicode);

function _convert_ascii(event:Event)
{
if(tt.text=="") return;

trace("converting");

var str:String = tt.text;
var str2:String;
var i:Number;

tt.text = "";
for (i = 0; i<str.length; i++)
{
tt.text += str.charCodeAt(i) + ", ";
}
str2 = tt.text;
tt.text = str2.substr(0, -2);
}

function _convert_unicode(event:Event)
{
if(tt.text=="") return;

trace("converting");

var str:String = tt.text;
var arr:Array = str.split(", ");
var i:Number;

tt.text = "";
for (i = 0; i<arr.length; i++)
{
tt.text += String.fromCharCode(arr[i]);
}
}

где:

tt - текстфилд
convert_ascii_btn - кнопка
convert_unicode_btn - кнопка

Спасибо.

etc
17.06.2007, 15:34
Ну во-первых кнопки на сцене не являются экземплярами SimpleButton, они вообще в пакет flash.* не входят (это ж надо, кнопки в Player Level пакетах!).

Приведенный код у меня работает. Только несколько моментов:
1) Подписываться надо на CLICK, а не MOUSE_DOWN;
2) Вместо tt.text += использовать appendText;
3) Запихнуть все в класс и избавиться от привычки писать код в кадрах.

$mival
17.06.2007, 17:08
точно!
благодарю...

ЗЫ: про код в кадрах знаю, что некрасиво, в платных проектах всё тока на классах.