2011-10-13 65 views
0

我想知道如何防止用戶從我的學校董事會外面畫畫。AS3:限制函數的舞臺空間?

我的主板圖像尺寸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); 

     }  

} 

}

回答

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;)

+0

謝謝正是我需要的!是否總是需要將x和Y分配爲數字?我認爲AS3默認了。檢查瑞士法郎,我自己做了這些資產! http://gabrielmeono.com/pizarra.swf –

+0

太棒了!只有一個細節我忘了我的代碼(我想我已經把它):改變第一個偵聽器:'boardActiva.addEventListener(MouseEvent.MOUSE_DOWN,empezarDibujo);'否則我可以開始繪製pizarra以外,結束內部和線被繪製。只是一個小錯誤;)關於'Number',我總是喜歡鍵入變量來從IDE獲得幫助,並更好地理解代碼。 – danii

+0

我剛剛測試過它,謝謝你的bugfix :) –