我制作了一个名为“SwordHolder”的影片剪辑符号,然后完成了我的所有动画,并将剑架放在另一个动画片段的正确位置(把我带走了)。我想我可以改变SwordHolder movieclip符号中的图像,所以我做了所有这些。
好了,我发现我很难弄清楚如何用剑柄影片剪辑符号更改/添加/删除图像,而不创建它的新实例(显然这不是我想要的)。
如何在不创建新实例的情况下直接访问动画片段(在我的库中)?我想我可以像[var refSwordHolder:SwordHolder; refSwordHolder.addChild(剑);]但它似乎不允许我这样做。
帮助越快越好......我需要在几个小时内解决这个问题:(
谢谢!
答案 0 :(得分:0)
MovieClip符号是MovieClip的子类。您需要为此类以及可能的公共静态方法定义公共静态变量,以便能够操作类本身,而不是其实例。
您不能对类进行addChild(),因为该类只是一个蓝图。它在您的显示列表中不存在。
据我所知,您需要完全在AS3中编写该类以允许此类行为。
希望这有帮助。
答案 1 :(得分:0)
如果您使用的是Flash CS3(因为您必须使用MovieClip),为什么不在编辑器中编辑符号?如果您查看Flash库,您将看到名为“SwordHolder”的Symbol,您可以双击它来编辑它。这是最简单的选择。
如果右键单击库中的符号,请转到“属性”,然后可以选中“为ActionScript导出”框。下面的字段之一是Class字段,您可以在其中指定要与Symbol关联的类。因此,您可以创建一个名为SwordHolder的类(将其放在文件的类路径中),并将其与符号相关联,并为构造函数中的每个实例执行所需的任何代码。默认情况下,类名与符号名称相同。
e.g。
package
{
import flash.display.MovieClip;
public class SwordHolder extends MovieClip
{
public function SwordHolder()
{
super();
// do what needs to be done
}
}
}
答案 2 :(得分:0)
如何让SwordHolder类成为Singleton ...这听起来像个好人。
Singleton可能是最简单的设计模式。我们的想法是,通过遵循这种模式,您可以确保在整个应用程序中只创建一个类的实例。
SharedObject就是一个例子。您不使用新的SharedObject创建和实例,而是使用SharedObject.getLocal()或getRemote()。
这是一个粗略的想法:
package yourcoolgame.assets{
import flash.display.MovieClip;
public class SwordHolder extends MovieClip{
private static var instance:SwordHolder;
public static function getInstance():SwordHolder {
if (instance == null) {
instance = new SwordHolder(new SingletonLock());
}
return instance;
}
public function SwordHolder(lock:SingletonLock):void {
if (lock == null) {
throw new Error("Error: Instantiation failed: Use SwordHolder.getInstance() instead of new.");
}
}
}
}
internal class SingletonLock {}
当您尝试使用 new 创建和实例时,该类应该抛出并出错。 您可以使用SwordHolder.getInstance()在应用程序中的任何位置创建和实例 它始终是对同一个实例的引用。你可以添加孩子等等
如果这可能比您需要的更多,并且您正在寻找简单的东西,因为您正在使用IDE ...您可以在该剪辑的不同帧中添加符号(其他剑)并使用标签。 ..你会有像
这样的东西public function setSword(swordID:String):void{
this.gotoAndStop(swordID);
}
希望它有所帮助。
答案 3 :(得分:0)
你没有引用这个角色吗?那么你应该能够通过hieraki获得剑的参考。
如果没有,您可以创建一个SwordHolder类,将实例的引用保存在静态变量中。像这样:
package MyGame
{
import flash.display.MovieClip;
public class SwordHolder extends MovieClip
{
private static var _Instance:SwordHolder = null;
public function SwordHolder()
{
if(_Instance == null)
_Instance = this;
else
throw new Error("Only one SwordHolder instance allowed");
}
public static function get Instance():SwordHolder
{
return _Instance;
}
}
}
答案 4 :(得分:-1)
因此,如果我理解正确,您将SwordHolder movieclip的实例放在IDE中,现在您想要更改SwordHolder movieclip实例显示的图像/精灵吗?
您可以执行Singleton操作(其他一些人也建议),然后在SwordHolder动画片段中加载并显示不同的图像/精灵。因此,您需要在SwordHolder类中使用一种方法来更改它显示的图像。