作者silase0201 (kk)
看板Flash
标题Re: [问题] ActionScript的物件传址问题
时间Sun Dec 9 16:26:01 2012
※ 引述《sohumi (皮老板)》之铭言:
: Flash CS6 AS3
: 在AS里物件都是以传址的方式,
: 我把class a一个_sprite送到class b去New它
: 但是trace(_sprite) = NULL.
: 如果是传址,是不是应该要_sprite = Object Sprite ?
: class a extends MovieClip
: {
: var _sprite:Sprite;
: funciton a()
: {
: b.NewSprite(_sprite);
: trace(_sprite);//NULL
: }
: }
: ///
: class b extends Sprite
: {
: function b(){}
: public static NewSprite(pSprite:Sprite):void
: {
: pSprite = new Sprite();
: }
: }
我不知道你为什麽要那样子做
不过我知道 我这样是可以的
class a extends MovieClip
{
var _sprite:Sprite;
funciton a()
{
_sprite = b.NewSprite();
trace(_sprite);
}
}
///
class b extends Sprite
{
function b(){}
public static NewSprite():Sprite
{
var sp = new Sprite();
return sp;
}
}
////////////////////////////////
var a:Sprite = new Sprite()
a.name = "a"
var b:Sprite = a
var c:Sprite = a
trace(a.name,b.name,c.name) // a,a,a
b = new Sprite()
b.name = "b"
trace(a.name,b.name,c.name) // a,b,a
c.name = "s"
trace(a.name,b.name,c.name) // s,a,s
一开始 a 被付予一个记忆体位址
b,c 被指向 a 的记忆体位址
所以 trace(a,b,c)会得到同值
後来 b = new Sprite() 的时候
b 被付予一个新记忆体位址
a,c 的记忆体位址不变
所以trace的时候 就会得到不同的结果
同理 你的 pSprite 跟 _Sprite
就形同 a 跟 b 一样
是不同变数被指向同一块位址
pSprite = new Sprite() 的时候 被付予了新的记忆体
并不是把原本的记忆体位址修改
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 118.160.227.253