1

我最近拿起了 Emanuele Feronato 的 Flash Game Development by Example 以尝试帮助扩展我对游戏设计和动作脚本 3 的知识,但我被困在第一章,我们基本上是在构建一个记忆匹配二游戏,你有十组瓷砖,您尝试通过单击它们来匹配它们。

在我坚持的代码中,Feronato 先生正在使用 for 循环和 addChild 将图块添加到舞台,特别是以下代码:

// tile placing loop
for (i:uint=0; i<NUMBER_OF_TILES; i++) {
tile = new tile_movieclip();
addChild(tile);
tile.cardType=tiles[i];
tile.x=5+(tile.width+5)*(i%TILES_PER_ROW);
tile.y=5+(tile.height+5)*(Math.floor(i/TILES_PER_ROW));
tile.gotoAndStop(NUMBER_OF_TILES/2+1);
tile.buttonMode = true;
tile.addEventListener(MouseEvent.CLICK,onTileClicked);
}
// end of tile placing loop

在第 5 行中,您可以看到他创建了名为“cardType”的 tile 变量的自定义属性,但是当我尝试运行代码时,我收到错误“通过静态类型 Tile 的引用访问可能未定义的属性 cardType。 " 我的 Tile 类扩展了 MovieClip,主类扩展了 Sprite,但据我所知,我编写的代码与书中完全一样,无法超越。我想过只使用一个普通的 int 变量 cardType 来保存 tiles[i] 但后来你在鼠标事件上使用 cardType 属性所以我有点卡住了。

Flash 中是否发生了一些变化,不再允许您以这种方式创建自定义属性?还是我只是做了一些我没有抓住的愚蠢行为。

一如既往,非常感谢您的帮助。

4

1 回答 1

1

ActionScript 支持动态,其中可以在运行时添加属性。如果没有 dynamic 关键字,一个类是密封的,这意味着它的属性可能不会被改变。

MovieClip是动态类的一个示例。

从代码(或在 Flash Professional 中创建的 MovieClip 实例)实例化 MovieClip,将支持添加此属性:

var tile:MovieClip = new MovieClip();
tile.cardType = "custom value";

但是从代码中,即使扩展 MovieClip,您也必须添加dynamic关键字:

package {

    import flash.display.MovieClip;

    public dynamic class Tile extends MovieClip {
        /* ... */
    }
}

现在,您可以向 Tile 实例添加属性:

var tile:Tile = new Tile();
tile.cardType = "custom value";
于 2014-07-03T15:04:18.033 回答