0

こんにちは、私はこのビットのコードを持っています。それがしなければならないことは、同じタイプのクラスがすでに存在する場合に生成する必要があるクラス (常に Box クラスを拡張する) がある場合です。それは新しいものを作成します。

private var _l:Vector.<Box> = new Vector.<Box>();
public function respawn(shapeId:int, className:String = "Box"):Class {
        var l:int = _l.length, i:int;
        var c:Class;
        var ct:Class = getDefinitionByName(className) as Class;
        for (i = 0; i < l; i++) {
            c = _l[i];
            if (!c.active && c.shapeId == shapeId) {
                return c;
            }
        }
        c = new ct();
        _l[l] = c;

        return c;
    }

このコードを試すと、次のエラーが生成されます。

Implicit coercion of a value of type com.shapes:Box to an unrelated type Class.
Implicit coercion of a value of type Class to an unrelated type com.shapes:Box

これを修正して、Box クラスをすべて拡張し、Vector.<Box>.

4

2 に答える 2

1

Objectは、Classではなく、すべてのActionScriptクラスのスーパークラスです。

その上、あなたはすることができます:

var box:Object = new Box();

しかし、あなたはできません:

var box:Box = new Object();
于 2012-10-14T18:48:12.630 に答える
0

Max Golovanchukが言ったように、クラスではなくオブジェクトをターゲットにする必要がありました。

public function respawn(shapeId:int, className:Class):Object {
    var l:int = _l.length, i:int;
    var c:Box;
    for (i = 0; i < l; i++) {
        c = _l[i];
        if (c.shapeId == shapeId) {
            return c;
        }
    }
    c = new className();
    _l[l] = c;

    return c;
}
于 2012-10-15T13:33:06.667 に答える