的我最近發現在ActionScript 3,自定義類使用我他們在我最近的項目開始,但我覺得很難彎曲我圍繞如何大腦它一切正常。
我創建了兩個不同的類別來進行測試。
一種是所謂的「Persoon」延長的movieclip和另一種是所謂的「SpeakerBtn」延長的SimpleButton。AS3我不明白,不同的處理擴展MovieClip類VS擴展SimpleButton類
package {
import flash.display.Sprite;
public class Persoon extends Sprite {
public function Persoon(xPos:Number, yPos:Number, naam:String) {
var persoon:Sprite = new Sprite;
persoon.graphics.beginFill(0x000000,1);
persoon.graphics.drawCircle(xPos, yPos, 2);
persoon.graphics.endFill();
this.addChild(persoon);
trace ("hij heet " + naam);
}
}
}
package {
import flash.display.SimpleButton;
import flash.events.MouseEvent;
import flash.media.Sound;
import flash.media.SoundChannel;
public class SpeakerBtn extends SimpleButton {
public var snd:Sound;
public var cnl:SoundChannel = new SoundChannel();
public function SpeakerBtn(xp:Number,yp:Number,naam:String) {
var speaker:SimpleButton = new SimpleButton();
speaker.name = naam;
speaker.x = xp;
speaker.y = yp;
speaker.addEventListener(MouseEvent.CLICK, playSnd);
//this.addChild(speaker);
}
public function playSnd (event:MouseEvent) : void {
trace ("ping");
}
}
}
然後,我有我的主:
package {
import flash.display.MovieClip;
import SpeakerBtn;
import flash.display.SimpleButton;
import Persoon;
public class Main extends MovieClip {
var sp:SpeakerBtn;
var ps:Persoon;
public function Main() {
sp = new SpeakerBtn(50,50,"donna");
addChild(sp);
ps = new Persoon(300,300,"wilf");
addChild(ps);
}
}
}
Persoon維爾夫作品就像我的預期,顯示細膩,準確的痕跡。
SpeakerBtn donna不顯示並且不正確追蹤。我在SpeakerBtn包註釋掉的addChild因爲如果我打開它,我得到的錯誤1061:通過靜態類型SpeakerBtn參考
我注意到,當調用可能未定義的方法AddChild我定義了x和y和addChild在Main中,它可以工作的speakerBtn。但我不想在Main中定義所有這些,我希望我的SpeakerBtn能夠完成所有這些。
我檢查this question但它不爲我提供一個答案。能否給我有人解釋發生了什麼,或者聯繫我的理解教程(一個不techspeak過重,更像是一個解釋,這對我樣我 - 5歲)?謝謝!
更新
我忘記帶班SpeakerBtn到我的庫中添加一個按鈕,所以沒有什麼可以顯示。修正了現在,使用這段代碼,按鈕確實出現在舞臺上,只有x和y值沒有被註冊,並且它出現在0,0上。此外,事件playSnd不會觸發跟蹤,我假設不工作。
解決方案 隨着Cherniv的信息幫助下,我來到了我的SpeakerBtn以下解決方案。
主要做到這一點:
package {
import flash.display.MovieClip;
import SpeakerBtn;
import flash.display.SimpleButton;
public class Main extends MovieClip {
var sp:SpeakerBtn;
public function Main() {
sp = new SpeakerBtn("donna", 300, 50);
addChild(sp);
}
}
}
而SpeakerBtn做到這一點:
package {
import flash.display.SimpleButton;
import flash.events.MouseEvent;
import flash.media.Sound;
import flash.media.SoundChannel;
import flash.display.Sprite;
import flash.events.Event;
import flash.net.URLRequest;
public class SpeakerBtn extends SimpleButton {
private var snd:Sound;
private var cnl:SoundChannel = new SoundChannel();
private var _naam:String;
private var _x:Number;
private var _y:Number;
public function SpeakerBtn(naam:String, xp:Number, yp:Number) {
_naam = naam;
_x = xp;
_y = yp;
addEventListener(Event.ADDED_TO_STAGE, addBtn);
}
private function addBtn (event:Event) : void {
this.x = _x;
this.y = _y;
this.name = _naam;
snd = new Sound(new URLRequest("mp3/" + _naam + ".mp3"));
addEventListener(MouseEvent.CLICK, playSnd);
}
private function playSnd (event:MouseEvent) : void {
cnl = snd.play();
}
}
}
所以我所做的就是添加當按鈕被添加到舞臺上,然後一個事件監聽設置所有變量,如x位置,y位置和名稱。
文檔中還提到〜DisplayObject類支持基本功能,如對象的x和y位置〜爲什麼當我通過構造函數傳遞位置值時,它出現在位置0,0上?爲什麼eventListener不起作用? – silvith
@silvith你不需要在'SpeakerBtn'中創建'SimpleButton',因爲你的'SpeakerBtn' **是'SimpleButton',因爲它擴展了'SimpleButton'。所以你需要在'Main'構造函數中附加一個監聽器,如:'sp = new SpeakerBtn(50,50,「donna」);的addChild(SP); sp.addEventListener(MouseEvent.CLICK,sp.playSnd);' – Cherniv
@silvith另一種附加偵聽器的方法是:'this.addEventListener(MouseEvent.CLICK,playSnd);' – Cherniv