我是动作脚本3.0的新手,我在尝试将创建并在第1帧中设置的变量传递到第4帧中添加到舞台的动态文本框时遇到了困难。
在第1帧上,变量是根据用户输入的信息设置的: var input_dia =“”; input_dia = pdia_input.text;
并应显示在第4帧的动态文本框中: dia_alert.text = input_dia;
我收到以下错误: 1120:访问未定义的属性input_dia。
答案 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.0,The ActionScript 3.0 Quick Reference Guide,Kieth 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