2011-03-02 62 views
0

好吧,对不起,如果这是一个很容易得到答案的问题,但我在谷歌的页面和页面上四处张望,并且找不到任何与之有关的内容。我得到了很多帮助,但我似乎仍然无法让我的ActionScript的这部分工作。我有一个程序,运行时允许我在鼠标点击时随机绘制颜色方块。我添加了一个按钮,该按钮应该能够将从矩形绘制的形状更改为圆形。我似乎无法获得该按钮的工作。这就是我的代码到目前为止的样子。在按钮上更改形状按动作脚本3.0

var color:Number; 

stage.addEventListener(MouseEvent.MOUSE_DOWN, startDrawing); 
stage.addEventListener(MouseEvent.MOUSE_UP, stopDrawing); 

function startDrawing(e:MouseEvent):void { 
    stage.addEventListener(MouseEvent.MOUSE_MOVE, makeShapes); 
    color = Math.random() * 0xFFFFFF; 
} 

function stopDrawing(e:MouseEvent):void { 
    stage.removeEventListener(MouseEvent.MOUSE_MOVE, makeShapes); 
} 

function makeShapes(e:MouseEvent):void { 
var rect:Rect = new Rect(10,10,color); 
    addChild(rect); 
    rect.x = mouseX; 
    rect.y = mouseY; 
} 

shape_btn.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler); 
function mouseDownHandler(event:MouseEvent):void { 

} 

在底部我留下了空白,它似乎是我卡住的部分。我试着简单地将VAR设置为我制作的“Ellipse”类,这会让它起作用,但只有一次单击按钮。它不会留下一个圆圈,让我用这种形状进行绘画。再次,我很抱歉,我觉得我正在接近解决方案,然后我打了一堵墙。

+0

任何响应从你会不胜感激。 – Roy 2011-03-06 07:38:43

回答

0

很难理解困难是什么,但我会尽力解决我的理解。

首先,舞台鼠标向下事件将捕捉您的按钮事件,因此您不妨将其摆脱并坚持一个鼠标事件。

stage.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown); 
private function onMouseDown(ev:Event):void 
{ 
    if (ev.target==shape_btn) 
     changeShape(); 
    else if (ev.target==stage) 
     startDrawing(); 
} 

或沿着这些线。 其次,我不知道Rect是什么。这是你有权访问的课程吗?这是我会做没有的特殊类:

private function makeShape():void 
{ 
    switch (shapeType) 
    { 
     case "rect": 
     drawRect(); 
     break; 
     case "circle": 
     drawCircle(); 
     break; 
    } 
} 

private function drawRect():void 
{ 
    var rect:Shape = new Shape(); 
    rect.graphics.beginFill(color); 
    rect.graphics.drawRect(0, 0, 10, 10); 
    rect.x = mouseX; 
    rect.y = mouseY; 
    addChild(rect); 
} 

private function drawCircle():void 
{ 
    var circle:Shape = new Shape(); 
    circle.graphics.beginFill(0xff0000); 
    circle.graphics.drawCircle(0, 0, 10); 
    circle.x = mouseX; 
    circle.y = mouseY; 
    addChild(circle); 
} 

,最后是changeShape功能:

private function changeShape():void 
{ 
    shapeType = shapeType=="rect"?"circle":"rect"; 
} 

有更好的方法去做,但是有两个形状类型打交道时只有这是可以接受的。

当然,你需要在你的代码中的函数外部有一个var shapeType:String =“rect”。

我也认为颜色随机化应该在鼠标移动处理程序而不是鼠标点击。这是故意的吗?