【问题标题】:AS3: Limiting the stage space of a function?AS3:限制函数的舞台空间?
【发布时间】:2011-10-13 05:58:03
【问题描述】:

我想知道如何防止用户在学校董事会外画画。

我的棋盘图像尺寸为 709.15 X 499.5。 所以我想到了这样的事情......

if(stage.stageWidth <= 709)

但如果我的棋盘图像在舞台 boardActiva 上被称为变量,那应该会更容易。

这是绘制的函数:

        private function dibujar(e:MouseEvent){         
        trace(e.localY);            
        tizaActiva.x = e.stageX;
        tizaActiva.y = e.stageY;
        if(dibujando){
        tabla.graphics.lineTo(e.stageX,e.stageY);
        }

这是完整的代码:

package  {  
import flash.display.MovieClip;
import flash.events.Event;
import flash.events.*;
import flash.trace.Trace;
import flash.ui.Mouse;
import flash.display.Shape;
import fl.controls.ColorPicker;
import fl.motion.Color;
import fl.events.ColorPickerEvent;
public class pizarra extends MovieClip {        
private var colores:ColorPicker = new ColorPicker;      
private var boardActiva:board = new board;
private var tizaActiva:tiza = new tiza();
private var tabla:Shape = new Shape;
private var dibujando:Boolean;
    public function pizarra() {
        Mouse.hide();
        tabla.graphics.lineStyle(5,0xFFFFFF);
            // constructor code         
        boardActiva.x = 45;
        boardActiva.y = 40;
        addChild(boardActiva);
        addChild(tabla);
        addChild(colores);
        addChild(tizaActiva);
        dibujando = false;          
        stage.addEventListener(MouseEvent.MOUSE_DOWN, empezarDibujo);
        stage.addEventListener(MouseEvent.MOUSE_MOVE, dibujar);
        stage.addEventListener(MouseEvent.MOUSE_UP, detenerDibujo);
        colores.addEventListener(ColorPickerEvent.CHANGE,cambiar);
    }

    private function empezarDibujo(e:MouseEvent):void{          
        trace(e.localY);
        tabla.graphics.moveTo(e.stageX,e.stageY);
        dibujando = true;           
    }       
    private function dibujar(e:MouseEvent){         
        trace(e.localY);

        tizaActiva.x = e.stageX;
        tizaActiva.y = e.stageY;
        if(dibujando){
        tabla.graphics.lineTo(e.stageX,e.stageY);
        }
    }       
    private function detenerDibujo(e:MouseEvent){           
        trace(e.localY);
        dibujando = false;

    }           
    private function cambiar(e:ColorPickerEvent){
            tabla.graphics.lineStyle(5,e.color);

        }       

}

}

【问题讨论】:

    标签: actionscript-3 stage


    【解决方案1】:

    如果我正确理解了您的问题,应该这样做:

    private function dibujar(e:MouseEvent)
    {
    
        //trace(e.localY);
    
        tizaActiva.x = e.stageX;
        tizaActiva.y = e.stageY;
    
        if(dibujando && insideBoard(e.stageX,e.stageY) )
        {
            tabla.graphics.lineTo(e.stageX,e.stageY);
    
        }
    
    }
    
      private function insideBoard(x:Number,y:Number):Boolean
      {
        return ( (x>= boardActiva.x) 
               && (x <= boardActiva.x + boardActiva.width )
               && (y >= boardActiva.y) 
               && (y <= boardActiva.y + boardActiva.height ) );
      }
    

    希望对你有所帮助,祝你的 pizarra 好运;)

    【讨论】:

    • 感谢我所需要的!是否总是需要将 x 和 Y 分配为数字?我认为 AS3 默认理解这一点。查看 swf,我自己制作了资产! gabrielmeono.com/pizarra.swf
    • 太棒了!我在我的代码中只忘记了一个细节(我以为我已经放了它):将第一个侦听器更改为:boardActiva.addEventListener(MouseEvent.MOUSE_DOWN, empezarDibujo); 否则我可以在 pizarra 外部开始绘制并在内部结束并绘制线。只是一个小错误 ;) 关于Number,我总是更喜欢键入变量以从 IDE 获得帮助并更好地理解代码。
    猜你喜欢
    • 1970-01-01
    • 2021-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多