ActionScript Доступ к функциям / переменным извне класса - PullRequest
0 голосов
/ 29 мая 2010

как я могу вызвать публичные функции или переменные класса спрайта из другого класса (или фрейм-скрипта)? я продолжаю получать 1061: вызов возможно неопределенного метода getSide через ссылку со статическим типом flash.display: Sprite.

//Framescript
var a:Sprite = new customRect();
addChild(a);
a.getSide();

//.as file
package
{
import flash.display.Sprite;

public class customRect extends Sprite
{
public var side:Number;

private function customRect()
{
var box:Sprite = new Sprite();
box.graphics.beginFill();
box.graphics.drawRect(0, 0, 200, 200);
box.graphics.endFill();

side = box.width;
}

public function getSide():void
{
trace(side);
}
}
}

Ответы [ 2 ]

1 голос
/ 30 мая 2010

Вы пытаетесь вызвать реальные методы класса Sprite или те, которые вы добавили в подкласс Sprite? Я предполагаю, что вам нужно привести переменную к фактическому классу, который вы используете. Так что вместо:

someReference.yourFunction();

Вы можете попробовать:

YourClass(someReference).yourFunction();

... это необходимо, только если вы не контролируете типизацию someReference - если вы это делаете, вы можете просто определить его, используя var someReference: YourClass, чтобы сообщить об этом компилятору, который является var типа YourClass, и не из Sprite.

ОБНОВЛЕНИЕ после добавления примера кода, измените:

var a:Sprite = new customRect();

до

var a:customRect = new customRect();

так что компилятор знает, что это customRect, а не «общий» Sprite.

в качестве отступления: имена классов могут начинаться с заглавной буквы: так что используйте CustomRect вместо customRect.

1 голос
/ 30 мая 2010

Вам нужно будет ввести другой класс, какой бы он ни был. По умолчанию Sprite не имеет того свойства, к которому вы пытаетесь обратиться, поэтому вы не можете просто сделать mysprite.myRandomVariableName. Однако, если вы знаете, что mysprite действительно имеет тип MyClass, вы можете сделать MyClass (mysprite) .myRandomVariableName или (mysprite как MyClass) .myRandomVariableName. При использовании ключевого слова as обратите внимание, что типизированный mysprite будет иметь значение null, если mysprite на самом деле не имеет тип MyClass. Попытка напечатать mySprite для MyClass с использованием предыдущего метода приведет к ошибке, если mysprite не относится к типу MyClass.

В качестве альтернативы, я полагаю, что вы можете использовать квадратные скобки для доступа к динамическим свойствам спрайта (например, mysprite ['myRandomVariableName'], однако лучше строго указывать ваши объекты.

// редактировать, так как вы разместили пример кода:

Все, что вам нужно здесь:

var a:CustomRect = new CustomRect();//note that since CustomRect is a class name, it should be captialized.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...