Flash AS3 вызывает функцию из класса в отдельном классе - PullRequest
0 голосов
/ 04 февраля 2012

Я искал вокруг, пытаясь решить это некоторое время сейчас.Появились различные идеи, такие как dispatchEvent и т. Д., Но нет ничего, что казалось бы простым и понятным способом сделать это.

Я пытаюсь вызвать функцию из отдельного (но в той же папке, что и моя папка) класса документа.В частности, я хочу «породить» объект и запустить функцию в классе этого объекта из моего файла Main.as.Ниже приведен фрагмент кода:

В Main.as:

var object:class_Object = new class_Object();
object.spawn();
addChild(object);

Функция spawn является публичной функцией в class_Object, но когда я пытаюсь ее запустить, я получаюошибка: «Ошибка № 1006: spawn не является функцией» Если я уберу object.spawn ();код добавляет объект отлично.

Я должен упустить что-то очевидное, но не могу понять, что

Спасибо

РЕДАКТИРОВАТЬ

Исправлена ​​проблема, я забыл указать путь к классу в связи AS моего объекта Library, думал, что я это сделал!

Ответы [ 2 ]

4 голосов
/ 04 февраля 2012

Вы пометили этот метод как static. Это означает, что он принадлежит самому классу , а не экземплярам этого класса.

Чтобы вызвать метод как определено, вы должны сказать:

class_Object.spawn()

Однако, это может быть не то, что предназначено, но трудно сказать, не видя реализации. Удаление ключевого слова static из его определения присоединит его к экземпляру и будет доступно, как вы описали.

См. здесь для документации Adobe по этому вопросу.


Чтобы ответить на ваш комментарий, простой способ думать о нем - это «класс» - это план создания «экземпляров».

Итак, когда вы говорите new class_Object(), вы говорите «проекту» «создать» новый экземпляр проекта. Помимо этого, вы можете определить методы / свойства, которые должны быть доступны экземпляру (или методам экземпляра). Кроме того, вы также можете определить методы / свойства, которые доступны самой «схеме» (или статическим методам).

Итак, используя классический пример Car

public class Car {

    public function startEngine():void {
        // This is an instance method, it will be available to
        // any instance of a car, or new Car();

        // Note: "this" in this context refers to the current instance of the car
        // that the method is being called from
    }

    public static function compare(Car car1, Car car2):bool {
        // This method belongs to the blueprint of a car

        // Note: "this" doesn't make any sense in this context, because we 
        // aren't talking about a particular instance.
    }
} 

Тогда, например:

var mercedes:Car = new Car();
var bmw:Car = new Car();

mercedes.startEngine(); // call an instance method. notice we call it from a particular instance of a car.
Car.compare(mercedes, bmw); // call an static method. notice we call it from the class of Car.

Когда вы «расширяете» другой класс, вы «заимствуете» функциональность у другого класса и добавляете / заменяете свою собственную функциональность. Но до тех пор, пока у вас есть экземпляр, если это «публичный» метод, он будет доступен извне, откуда бы этот экземпляр ни был доступен. Я не знаю, поможет ли это ответить на ваш комментарий.

0 голосов
/ 05 февраля 2012

вам нужно сделать метод внутри вашего class_Object общедоступным

package my.package{
    public class class_Object(){
         public function class_Object(){
             //constructor 
         }

         public function spawn():void{
               //spawn code
         }

    }
}



var classObject:class_Object = new class_Object();
classObject.spawn();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...