7

我已经开始在 Flash Professional 中构建一个粗略的游戏引擎框架,我很好奇如何在 Flash 库中创建能够拖动到舞台上并分配可从 AS3 访问的属性的对象。

示例:
我想创建一个开关对象(例如电灯开关),以便当玩家与其交互时,它会触发代码中的特定内容,例如房间里的灯打开。

我知道 Flash 内置了 UI 组件,您可以在 Flash Professional 环境中定义属性(见下图),我想知道是否有一种方法可以创建我自己的自定义样式组件,以便我基本上可以拥有我的关卡文件在 flash (.fla) 中打开,然后从我的库中拖出一个开关组件,然后输入一些信息,例如它控制的灯光以及我想要的任何其他信息。

闪存组件参数

(上面是我正在寻找的参数控制类型的示例)

我已经阅读了一些关于扩展 flash UIComponent 类的内容,但我觉得这不是正确的方法,因为它对我想要的东西来说太过分了。我想要的只是将一些基本参数从库阶段实例传递到 AS3。我不想通过实例名称传递数据,因为如果我想要进行更复杂的交互,这看起来很混乱。

谢谢!

4

4 回答 4

0

I think what people are trying to say is that you can have the whole thing is data driven, and so you can combine the IDE with the data to come up with your final game.

But consider this ... it might be what you want.

If you have, for instance, a BaseSwitch Class:

public Class BaseSwitch extends MovieClip {
   private var _lightName:String;
   private var _light:Light;
   public function get lightName():String {
      return lightName;
   }
   public function set lightName(value:String):void {
      if (value != _lightName) {
        _lightnName = value;
        //Note I don't advocate having children reach into their parents like this,
        //but you sound like you don't want the parent involved in the process, so
        //this is one way you could do it.
        if (parent.hasOwnProperty(lightName) && parent[lightName] is Light) {
           _light = parent[lightName];
        } else {
           trace('Could not find light', _lightName);
        }

      }
   }
   //other code to listen for gestures and operate the light
}

Now, when you want a switch to operate a specific light name, create a library instance and set its base class to BaseSwitch. When you close the dialog where you set the base Class, you'll notice that it gives you a dialogue that it couldn't find the Class in the Class path and one will be generated. You're going to replace it with a Class that sets the lightName. Create a new AS3 Class in the root directory with the same name as your library instance. It should look something like this:

public class SpecificSwitch {
   public function SpecificSwitch() {
      super();
      lightName = 'theSwitch';
   }
}

Other possible choices involve having the parent Class match up instances of switch with instances of light based on name, so if it finds a light1 and a light1Switch, it either gives a reference to the light to the switch or it simply sets up a mapping in its own event listening system.

于 2012-06-16T14:05:17.323 回答
0

我会创建一个“切换”影片剪辑并将其导出到动作脚本,与“轻”影片剪辑相同。在主类 .as 文件中,我会将它们插入舞台,使用 addChild(剪辑),然后将点击侦听器添加到“切换”影片剪辑以控制“灯光”。

于 2014-04-14T23:19:40.720 回答
0

这很容易做到。

在我看来,组件是错误的方法。

首先,您需要设置 Actionscript 链接/标记您的库项目。在库面板中。- 右键单击​​“你的MC”>>单击“属性”。- 在属性对话框中勾选“导出动作脚本” - 然后命名你的类,例如“yourMC_Class”

现在 MC 已准备好在您的代码中被引用。

接下来,您需要将您的“yourMC”从库动态添加到舞台。可以这样做。

// 第一个引用库项

var yourMC_ref:yourMC_Class = new yourMC_Class();

// 然后将动态 mc 项加载到 var 中

var your_MC_OBJ = yourMC_ref;

// 然后将你的 MC 添加到舞台。

this.addChild(your_MC_OBJ);
your_MC_OBJ.x = 200;
your_MC_OBJ.y = 100;

简而言之,这就是我将图书馆项目添加到舞台的方式。

显然那是基本的功能/代码。

在一个项目中,我会将所有代码都放在一个外部类中,在这种情况下,您只需将 vars 设置为 public vars

public var yourMC_ref:yourMC_Class = new yourMC_Class();
public var your_MC_OBJ = yourMC_ref;

并将最后 3 行代码放入公共函数中

public function ADD_First_MC()
{
       this.addChild(your_MC_OBJ);
       your_MC_OBJ.x = 200;
       your_MC_OBJ.y = 100;
}

现在“your_MC_OBJ”可以以更复杂的方式使用。

例如。要创建电灯开关,有很多选项取决于您需要如何接近功能。例如。将不同的 MC 库项目应用于“your_MC_OBJ”播放 MC 中的特定帧。

但是,如果是我,我只会使用鼠标功能使用 addChild removeChild 来打开或关闭灯。例如。

public var LightON = 0;
public var yourMC_ref:yourMC_Class = new yourMC_Class();
public var your_MC_OBJ = yourMC_ref;

然后创建一个处理开/关事件的公共函数

public function LightON_OFF()
     {
         if(LightON == 1)
            {
               this.addChild(your_MC_OBJ);
               your_MC_OBJ.x = 200;
               your_MC_OBJ.y = 100;
            }
         if(LightON == 0)
            {
               this.removeChild(your_MC_OBJ);
            }
     }

希望这可以帮助。

于 2016-05-02T18:27:04.730 回答
0

所以,对于你想要的,虽然它可能不是做你想做的最好的方式,但我知道这是你正在构建的经验。

使用组件,是的……按以下方式(最简单的一种):

  • 创建影片剪辑
  • 在库中右键单击它
  • 点击“组件定义”
  • 添加一个属性,设置一个名称,一个变量名(var test,对于这个问题)和一个默认值
  • 点击确定

  • 打开您的影片剪辑

  • 打开第一帧的代码并声明没有初始值的变量 (var test:String;)
  • 追踪它的价值 (trace(test);)

  • 回到舞台根目录

  • 将项目从库拖放到舞台
  • 测试它(Cmd/Ctrl + Enter)(也许它会打印空,不知道为什么,它有时会忽略默认值)

  • 在舞台上选择您的组件

  • 打开属性面板(Windows > 属性)
  • 转到此面板上的组件参数并更改属性值

  • 您应该在控制台上看到跟踪的值

而且,我认为,像这样,您可以使用组件中的属性来满足您的需求,例如使用字符串并通过其名称获取受控 mc。

祝你好运

于 2016-05-12T15:35:40.310 回答