Интерпретация строки как имени функции - ActionScript 3.0 - PullRequest
0 голосов
/ 01 ноября 2011

Я работаю над игрой для университетского задания и хочу создать класс, который будет обрабатывать все ресурсы из библиотеки FLA-файла.Я занимаюсь разработкой сайтов с использованием OO PHP почти 4 года, поэтому у меня есть опыт программирования, но я новичок в AS3.

Класс обработчика активов:

package library {
    public class AssetHandler {
        public var stageWidth: int;
        public var stageHeight: int;

        public function AssetHandler(sw:int, sh:int):void {
            stageWidth = sw;
            stageHeight = sh;
        }
        //Convert asset to bitmap
        public function bm(AssetsName:String):Object {
            var a:Object = new AssetsName(stageWidth, stageHeight);
            return new Bitmap(a);
        }

    }
}

И основнойкласс, на который ссылаются в Main.fla

package {
    import flash.display.*;
    import library.AssetHandler;

    public class Main extends Sprite {
        private var cannon:Cannon = new Cannon();
        private var holder:Holder = new Holder();
            //I want to replace this
        public var bdata = new Char(stage.stageWidth, stage.stageHeight);
        public var char = new Bitmap(bdata);
            //into this
            public var asset = new AssetHandler(stage.stageWidth, stage.stageHeight);
            public var char = asset.bm("Char");

        private var cannonAngle:Number;

        public function Main() {
                }
        }
}

В php вы можете легко сделать $ Class -> $ name ();Есть ли аналогичный подход в AS3?

Я получаю ошибки: 1180: вызов возможно неопределенного метода AssetsName.1180: вызов возможно неопределенного метода Bitmap.

Я полагаю, что метод Bitmap не найден из-за видимости, но как мне его исправить?Спасибо!

Ответы [ 2 ]

3 голосов
/ 01 ноября 2011
1180: Call to a possibly undefined method Bitmap.

Вам нужно будет импортировать flash.display.Bitmap.

1180: Call to a possibly undefined method AssetsName.

Если я правильно помню, вы не можете создать экземпляр класса из ссылки на String, как выделаешь.Однако вы можете сделать getDefinitionByName, используя ссылку на строку, и создать экземпляр класса таким образом.

public function bm(AssetsName:String):Object {
    var classdef:Class = getDefinitionByName(AssetsName) as Class;
    var a:Object = new classdef(stageWidth, stageHeight);
    return new Bitmap(a);
}

(я думаю, это правильно. Могут быть некоторые ошибки.)(Правка: была - пропущена часть "как класс".)

Удачи.

1 голос
/ 01 ноября 2011

Я думаю, вам нужно что-то вроде этого

Если вам нужно получить ссылку на класс по строке:

import flash.utils.getDefinitionByName;
.....
var ClassReference:Class = getDefinitionByName("YourClass") as Class;

Если вы хотите вызвать функцию по строке:

var functionName:String = "testFunction";
this[functionName]("hello!");

public function testFunction(param:String):void {
    trace(param);
}

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

ОБНОВЛЕНИЕ

PHP's $Class->$name() may be assumed as classInstance["name"](); in ActionScript
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...