我正在尝试加载背景图片,但我收到错误消息“错误:访问未定义的属性assetLoader”。这是怎么回事?
import flash.display.Loader;
import flash.net.URLRequest;
class Inventory {
private var assetLoader:Loader = new Loader();
assetLoader.load(new URLRequest("image.png")); //error on this line
addChild(assetLoader);
}
答案 0 :(得分:3)
如果您使用addChild()
方法,则必须继承DisplayObjectContainer
的功能。如果您将Inventory
课程用作document
课程,则必须延长Sprite
或MovieClip
。
文档类必须由公共访问说明符定义。
只允许全局(类属性定义)声明的变量使用private
和public
。您不能在本地使用它(在函数内)。时间轴也不允许您使用访问说明符。
package
{
import flash.display.Loader;
import flash.net.URLRequest;
import flash.display.MovieClip;
public class Inventory extends MovieClip
{
private var assetLoader:Loader;
public function Inventory()
{
// constructor code
assetLoader= new Loader();
assetLoader.load(new URLRequest("image.png")); //error on this line
addChild(assetLoader);
}
}
}
答案 1 :(得分:2)
您需要将这两行放在构造函数代码中,如下所示:
import flash.display.Loader;
import flash.net.URLRequest;
class Inventory {
private var assetLoader:Loader = new Loader();
public function Inventory() {
assetLoader.load(new URLRequest("image.png")); //error on this line
addChild(assetLoader);
}
}
答案 2 :(得分:1)
正确的答案是,即使很难,您也可以在声明时将实例化实例化,如下所示:
private var assetLoader:Loader = new Loader();
在类实例存在之前,不允许使用这些对象。在创建Inventory实例之前访问assetLoader属性和方法的任何尝试都将失败。构造函数是Inventory的一个实例将运行的第一段代码,因此它是类代码中的第一个可以开始使用类实例对象的位置,因为此时Inventory实例存在。 Vesper代码示例正确显示它。
理论上这个:
private var assetLoader:Loader;
public function Inventory()
{
assetLoader = new Loader();
}
相当于:
class urlencodeSerializer(Serializer):
formats = ['json', 'jsonp', 'xml', 'yaml', 'html', 'plist', 'urlencode']
content_types = {
'json': 'application/json',
'jsonp': 'text/javascript',
'xml': 'application/xml',
'yaml': 'text/yaml',
'html': 'text/html',
'plist': 'application/x-plist',
'urlencode': 'application/x-www-form-urlencoded',
}
def from_urlencode(self, data,options=None):
""" handles basic formencoded url posts """
qs = dict((k, v if len(v)>1 else v[0] )
for k, v in urlparse.parse_qs(data).iteritems())
return qs
def to_urlencode(self,content):
pass
但实际上assetLoader创建的时间略有不同。在构造函数中创建这些成员实例总是更好。
To Benny:所有类都有一个默认为internal的访问修饰符。 PO类被定义为内部,因此具有正确的访问修饰符(内部默认值,因为没有指定)。成员变量的访问修饰符已正确定义,与PO问题无关。