我最近选择了Emanuele Feronato的Flash游戏开发实例来尝试帮助扩展我对游戏设计和动作脚本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变量的自定义属性,但是当我尝试运行代码时,我得到错误“通过静态引用访问可能未定义的属性cardType”类型瓷砖。“我有类Tile扩展MovieClip,主类扩展了Sprite,但据我所知,我已经完全按照书中的说法编写了代码并且无法通过它。我想过只使用普通的int变量cardType来保存tiles [i],但是稍后你在鼠标事件上使用了cardType属性,所以我有点卡住了。
Flash中有哪些更改不再允许您以这种方式创建自定义属性?或者我只是做了一些我没有抓到的蠢事。
一如既往,非常感谢您的帮助。
答案 0 :(得分:1)
ActionScript支持dynamic classes,其中可以在运行时添加属性。如果没有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";