AS3 - 获取调用函数的实例的引用
AS3 - Get reference of instance who called a function
我有两个 class,"player" 和 "Stickman","player" 扩展 "Stickman"。
class "Stickman" 包含所有角色在游戏中都会有的功能,例如移动和处理动画(都使用相同的动画),而 "player" class 包含玩家独有的功能动作。
当我从继承自 "Stickman" 基础 class 的播放器实例调用动作时,如何正确指向(从火柴人基础 class)调用该函数的播放器实例?
例如,处理运行个动画
player.as中的触发代码:
moveType("running");
Stickman.as 中的 moveType 函数:
public function moveType(type:String):void{
this.gotoAndPlay("running");
trace("testing");
}
开始播放播放器对象内带有帧标签 "running" 的帧(这是 Stickman 的扩展)。我知道 this 不起作用,所以我想替换 this 带有指向函数调用者的东西(即播放器对象)。trace 语句仍在运行,因此(应该)链接没有问题。有没有办法不传递播放器对象的 childId 来做到这一点?
就是所谓的inheritance
。玩家 IS 实际上是 Stickman
。因此,当您调用 moveType
时,您正在调用它 ON Player
对象。如果你里面没有这个函数,它会在继承链中查找,并在 Stickman
.
中找到它
继承是单向的。这意味着 Player
知道 Stickman
的所有方法,但反之则不然 - Stickman
只能自己工作,不知道谁扩展了它,谁没有扩展它。
就是说 - 您必须使用 Player
class 作为起点并决定从那里开始做什么。
长话短说 - 您需要 覆盖 函数从 Stickman
到 Player
,然后决定做什么和不做什么。示例:
Stickman
:
public function move(type:String):void {
this.gotoAndPlay(type); // regular workflow for reach Stickman
}
Player
:
override public function move(type:String):void {
if (type == 'player_specific') {
this.gotoAndPlay('frameAvailableOnlyForPlayerClip');
// maybe something else, player specific, like play sound or smth else
} else {
super.move(type); // calls whatever is inside Stickman::move
}
}
记住 - this
始终是您为其调用函数的同一对象。但是您可以决定是想要特定的东西(玩家案例)还是想要非常平常的流程。 super.move
将调用父级 class 中的内容。
继承很重要,我为你决定使用它而欢呼!稍加练习,您就会掌握它!
我有两个 class,"player" 和 "Stickman","player" 扩展 "Stickman"。 class "Stickman" 包含所有角色在游戏中都会有的功能,例如移动和处理动画(都使用相同的动画),而 "player" class 包含玩家独有的功能动作。 当我从继承自 "Stickman" 基础 class 的播放器实例调用动作时,如何正确指向(从火柴人基础 class)调用该函数的播放器实例?
例如,处理运行个动画
player.as中的触发代码:
moveType("running");
Stickman.as 中的 moveType 函数:
public function moveType(type:String):void{
this.gotoAndPlay("running");
trace("testing");
}
开始播放播放器对象内带有帧标签 "running" 的帧(这是 Stickman 的扩展)。我知道 this 不起作用,所以我想替换 this 带有指向函数调用者的东西(即播放器对象)。trace 语句仍在运行,因此(应该)链接没有问题。有没有办法不传递播放器对象的 childId 来做到这一点?
就是所谓的inheritance
。玩家 IS 实际上是 Stickman
。因此,当您调用 moveType
时,您正在调用它 ON Player
对象。如果你里面没有这个函数,它会在继承链中查找,并在 Stickman
.
继承是单向的。这意味着 Player
知道 Stickman
的所有方法,但反之则不然 - Stickman
只能自己工作,不知道谁扩展了它,谁没有扩展它。
就是说 - 您必须使用 Player
class 作为起点并决定从那里开始做什么。
长话短说 - 您需要 覆盖 函数从 Stickman
到 Player
,然后决定做什么和不做什么。示例:
Stickman
:
public function move(type:String):void {
this.gotoAndPlay(type); // regular workflow for reach Stickman
}
Player
:
override public function move(type:String):void {
if (type == 'player_specific') {
this.gotoAndPlay('frameAvailableOnlyForPlayerClip');
// maybe something else, player specific, like play sound or smth else
} else {
super.move(type); // calls whatever is inside Stickman::move
}
}
记住 - this
始终是您为其调用函数的同一对象。但是您可以决定是想要特定的东西(玩家案例)还是想要非常平常的流程。 super.move
将调用父级 class 中的内容。
继承很重要,我为你决定使用它而欢呼!稍加练习,您就会掌握它!