使用actionscript 3在帧之间传递变量

时间:2010-10-26 21:39:31

标签: actionscript-3 global-variables flash-cs3

我是动作脚本3.0的新手,我在尝试将创建并在第1帧中设置的变量传递到第4帧中添加到舞台的动态文本框时遇到了困难。

在第1帧上,变量是根据用户输入的信息设置的: var input_dia =“”; input_dia = pdia_input.text;

并应显示在第4帧的动态文本框中: dia_alert.text = input_dia;

我收到以下错误: 1120:访问未定义的属性input_dia。

4 个答案:

答案 0 :(得分:11)

你必须想象 - 不同的场景很像单独的电影,闪光灯在它们之间分享有困难。

正确的方法 - 开始使用AS3的OOP(面向对象编程)。 您需要创建一个称为文档类的东西。这是有效的代码,永远存在于幕后(没有双关语)。您可以在此课程中存储内容,并在以后随时阅读。

它比听起来更容易并且一旦设置 - 它将允许您开始从时间线上移开代码。


首先创建一个名为“DocumentClass.as”的文件。这实际上可以被称为任何东西,但是调用它是非常好的做法。

将此文件保存在与您正在使用的FLA相同的位置 - 相同的文件夹。


在CS3中 - 在屏幕底部的属性面板中 - 当您选择了舞台时,会有一个小框允许您在其中键入文档类的名称。键入刚刚创建的文档的名称“DocumentClass”*,不带“.as”扩展名 - 如果您不确定需要输入的位置,请单击该链接。

http://curtismorley.com/wp-content/uploads/2007/07/documentclasspath_bad.JPG

请注意资本化 - 这是一种很好的做法


在Flash中打开此文件并编写以下代码。正如我写的那样

DocumentClass.as

package {

  //Call this class the SAME NAME as the file - VERY IMPORTANT
  class DocumentClass extends MovieClip
  {

    //This is an example of a variable - a container
    //of information of which is public - and can be 
    //seen by all the scenes in your flash movie.
    public var myName:String = "Jay Jagpal";

    //This is called a construct - this function automatically
    //runs when this class is seen by flash.
    public function DocumentClass()
    {
      //nothing needs to go here for you today...
    }
  }

}

你可以看到我为你写的所有guff里面有一个名为myName的变量 - 你可以创建你想要的东西 - myAge ... textToBeInAllScenes ... girlfriendsWeightToday ...然后调用任何东西。


进一步探索

类是在需要时在内存中创建的代码块。 DocumentClass就是这样 - 但它一直存在于应用程序的整个生命周期中。

一个 - 只是花哨的as3代表'把这些东西放在一个盒子里' - 它可以变得更先进,但这就是一个小说。

类DocumentClass扩展了MovieClip - 你告诉flash“我的类被称为DocumentClass” - 这个扩展称为MovieClip的东西。

MovieClip是一个类,与你的完全一样 - 但是为你而生,并且生活在flash中。这包含许多使动画工作的代码。你的Flash场景本身只是这个MovieClip的可见版本。

你必须扩展这个类,因为你非常希望 [以假的方式] 复制粘贴所有已完成的代码并在DocumentClass中使用它。您现在正在扩展MovieClip,通过这样做,您的代码将堆积在已有的东西之上。

公共函数DocumentClass() - 是的,这是一个函数。但它被称为“构造”。它是一种特殊类型的功能,存在于一个类中。首先它具有相同的名称。这使Flash可以很容易地找到它。它的特殊工作是在flash中创建这个类时立即自动运行它的代码。全自动看......


对你而言,重要的部分是我添加的public var。这是一个可以存储信息的存储桶。

public 部分告诉flash,任何东西都可以看到它,如果他们想要,场景,其他类......街上的人 - 任何东西!

:string 在您的变量(或桶)名称之后,它告诉flash将在var中存储哪种类型的信息。这不是重要的应用程序 - 但对于良好的OOP代码 - 这样做。 (谷歌AS3变量铸造)

有很多var类型, String Number int Boolean 等等......约7基本。


我认为这足以解决StackOverflow的问题 - 它会起作用 -

被警告大多数错误都是您的拼写错误... Flash不喜欢拼写错误。


享受!

答案 1 :(得分:1)

在我看来,框架脚本是贫民窟,应该避免使用。

话虽如此,你的问题可以通过几种方式解决。首先,您创建一个“动作”图层,只要您的时间轴拉伸图层,所有帧都可以访问该图层,但所有动作脚本都在第一帧上。第二,将文本字段放在单独的图层上,可以在第一帧中访问,但只能在第4帧中显示(假设您不希望它出现在第4帧)。

然而,OOP和甘油的下降设计模式显然是最佳选择,特别是如果你是新手,并计划进一步投资闪存平台。

一些图书建议:Colin Moock's Essential ActionScript 3.0The ActionScript 3.0 Quick Reference GuideKieth Peter's Foundation Actionscript 3.0 Animation: Making Things Move!AdvancED ActionScript 3.0 Animation。这些书肯定会为你在flash平台的正确开发方面提供一些坚实的基础。如果你读它们就不会后悔。

答案 2 :(得分:1)

两个答案都很好(我赞成他们),但从你的代码判断,你看起来像是在创建一个简单的表单,也许不想投入太多的时间。最快的解决方案是仍然在时间轴上编码,但将所有内容放在第一帧上。您将更改visible属性以隐藏和显示不同的MovieClip,而不是转到不同的帧。

因此,您的对话框错误框将始终存在但在启动时隐藏,当用户输入数据并且我假设提交按钮时,您的警报MovieClip可以显示。因为所有内容都在第一帧中,所以您可以轻松地将值分配给文本字段。

答案 3 :(得分:1)

一个简单的修复方法是创建全局变量而不是本地变量。

var myVar = "hi" ;

this.myVar = "hi" ;

如果您在Action Layer第1帧中进行了修改,则可以进一步访问其他框架中的 this.myVar