在AS3中创建类和属性

时间:2010-08-28 00:38:24

标签: actionscript-3 function properties class object

我是AS3的新手。学习如何创建类。 comp = new HouseObjects是否正在创建新课程? comp是否创建了HouseObjects的实例?我意识到这是在公共类TreeHouse中。我在想HouseObjects,我如何设置它不是一个类......不确定设置类和属性的正确方法。

我还注意到,当我尝试使用相同的链接名称HouseObjects链接另一个movieclip时,它要求输入一个唯一的类。我正在尝试从名为HouseObjects的同一个类创建多个实例。

alt text

包{

 import flash.display.MovieClip;
 import flash.events.MouseEvent;
 import flash.events.Event;

 public class TreeHouse extends MovieClip

 {

private var comp:MovieClip;
var powerData:int; // stores user data (of selected data)
//var currentPower:int; // stores current power

public function TreeHouse()
{
    comp = new HouseObjects; // linkage in library
    comp.power = 2; // amount of power
    comp.name = "comp";
    comp.buttonMode = true;
        comp.bstate = 0; // button state


    //add event listeners -- listens to functions that are called       
   comp.addEventListener(MouseEvent.MOUSE_OVER, rolloverToggle);
   comp.addEventListener(MouseEvent.MOUSE_OUT, rolloutToggle);
   comp.addEventListener(MouseEvent.CLICK, toggleClick);
   comp.addEventListener(MouseEvent.CLICK, toggleClick);

  stage.addChild(comp); // add computer to stage -----------------------------------
  trace("tracing...");
  comp.x = 100;
  comp.y = 100;

} 

// function rollOver -------------------------------------------------------------- 
function rolloverToggle(e:MouseEvent) {     
    if (e.currentTarget.currentFrame == 1)
    e.currentTarget.gotoAndStop(2);
   if (e.currentTarget.currentFrame == 3)
    e.currentTarget.gotoAndStop(4);
}

// function rollOut-- --------------------------------------------------------------    
function rolloutToggle(e:MouseEvent) {
    if (e.currentTarget.currentFrame == 2)
    e.currentTarget.gotoAndStop(1);
    if (e.currentTarget.currentFrame == 4)
    e.currentTarget.gotoAndStop(3); 
}

// function toggleClick-------------------------------------------------------------
   function toggleClick(e:MouseEvent) {


  // On MouseEvent gotoAndStop(Frame Number)
  if (e.currentTarget.currentFrame == 2)
   {
    e.currentTarget.gotoAndStop(3);
    e.currentTarget.bstate = 1;
   }

   if (e.currentTarget.currentFrame == 4)
   {
    e.currentTarget.gotoAndStop(1);
    e.currentTarget.bstate = 0;
   }     

 //var powerData:int = HouseObjects[e.currentTarget.power]; // set power value  

  // Find out which object selected-------------------------------------------------
  //trace("movieClip Instance Name = " + e.currentTarget); // [object Comp]
  //trace(houseArray[e.currentTarget.name]); // comp
  trace("using currentTarget: " + e.currentTarget.name); // comp
  //trace("powerData: " + powerData); // power of user data
  //trace("houseArray: " + houseArray[0]); // the 0 index of house array
  trace(e.currentTarget.power); // currentTarget's power************ 


   }

 } //end of class

} // end of package

3 个答案:

答案 0 :(得分:0)

我不太确定我是否正确理解了你的问题。 comp = new HouseObjects创建一个类型为HouseObjects的新实例(对象)。 (对OOP基础知识的一点研究可能会让你的生活更轻松。)

关于»请输入一个唯一的类名«错误:您不能将同一个类分配给两个库符号,因为符号在内部连接到类,因此如果您创建一个新实例(var x = new HouseObjects; addChild(x);) ,链接符号的内容也会添加到显示列表中。如果有多个库符号链接到同一个类,那么Flash编译器将如何知道选择哪一个?

答案 1 :(得分:0)

你的问题非常广泛,正如klickverbot建议的那样,如果花一点时间来理解基本的OOP概念会更好。

有很多资源可以帮助您开始使用AS3,例如检查一下 http://tv.adobe.com/watch/colin-moocks-lost-actionscript-weekend/course-1-introduction

Colin Moock的教程非常容易理解,它将为您提供入门所需的大部分工具。

答案 2 :(得分:0)

如果您不熟悉AS3,特别是OOP,那么您应该查看Moock's Essential Actionscript 3,这对于AS3中的OOP中的分步教育来说是非常棒的。

HouseObjects似乎是一个类,您正在为变量comp

创建一个 new 实例

你有一个重复的定义。您似乎正在尝试使用Flash Pro为HouseObjects扩展lightbulb。它在Flash Pro中不起作用。您正在创建MovieClip符号并为其指定类定义。它必须扩展MovieClip,在这种情况下你不能改变它。您可以在AS3文件中扩展HouseObjects并在您的应用程序中使用它。

个人认为,如果你想真的通过AS3了解OOP,你应该得到这本书并退出Flash Pro。使用Flash Builder,FDT,Flash Develop或IntelliJ IDEA等IDE。当你摆脱Flash Pro IDE的对话框和其他复杂问题时,它会更容易理解:>