我是AS3的新手,我有一个愚蠢的小问题,我无法过去。
我有一个场景,当我点击舞台时,我会生成一个MovieClip框并以网格方式放在舞台上。我想再次点击它删除它,但这部分不起作用。我想我把它缩小到removeChild()
脚本本身,因为在AS3中,我得到DisplayObject
错误......但是,这就是我发现的,我可能错了。在大多数情况下,我正在使用'WonderFL'网站进行测试。
package {
import flash.display.AVM1Movie;
import flash.display.Shape;
import flash.geom.Rectangle;
import flash.events.MouseEvent;
import flash.display.MovieClip;
import flash.display.Sprite;
public class FlashTest extends Sprite {
public function FlashTest() {
//Begin Code
//Event Listeners
stage.addEventListener(MouseEvent.MOUSE_DOWN, stageClick);
//Variables
var squareSize:Number = 120;
var xGridPos:Number = 0;
var yGridPos:Number = 0;
var tallyContainer:MovieClip = new MovieClip();
//Clicking on the stage
function stageClick(me:MouseEvent):void {
xGridPos = Math.floor(stage.mouseX/squareSize) * squareSize;
yGridPos = Math.floor(stage.mouseY/squareSize) * squareSize;
createTally();
}
//Clicking on a tally
function tallyDown(me:MouseEvent):void {
removeChild(tally);
var visibleTrace:MovieClip = new MovieClip();
visibleTrace.graphics.beginFill (0x000000, 1) ;
visibleTrace.graphics.drawRect (0, 0, 20, 20);
visibleTrace.graphics.endFill();
addChild(visibleTrace);
}
//Creating a tally
function createTally():void {
var tally:MovieClip = new MovieClip();
tally.graphics.beginFill(0xDD1111, 1) ;
tally.graphics.drawRect(xGridPos, yGridPos, squareSize, squareSize) ;
tally.graphics.endFill() ;
tally.addEventListener(MouseEvent.MOUSE_DOWN, tallyDown);
addChild(tally);
}
//End Code
}
}
}
我尝试查找解决方案(Stack Overflow上有关于苹果和熊的其他帖子),但我无法成功实现它们。我还查找了Arrays和Loops(特别是关于code.tutsplus的'Basix'教程)。再一次,我无法成功实施它们。
删除计数器时我做错了什么?
答案 0 :(得分:1)
除了DisplayObject
错误之外,您的代码中存在一些小问题,让我们看看它们。
首先,您不能将所有代码放在类的构造函数中,因此您的类可以是这样的:
package {
// imports
public class FlashTest extends Sprite
{
// properties and constants declaration part
// constructor
public function FlashTest()
{
// class's initialization instructions and other stuff
}
// other methods
}
}
然后,在tally
函数(createTally()
)内创建的var tally:MovieClip = new MovieClip();
对象是它自己的本地对象,它在它之外是不可访问的(当然undefined
),所以其他功能无法使用它。
但在您的情况下,您甚至不需要访问该对象,因为要获取当前单击的对象,您可以使用target
实例的MouseEvent
属性:
function tallyDown(me:MouseEvent):void
{
var tally:MovieClip = MovieClip(me.target);
// then to remove that "tally" :
tally.parent.removeChild(tally);
// ...
}
...
顺便说一句,您可以使用免费的FlashDevelop来测试您的代码...
希望可以提供帮助。