Warning: file_put_contents(/datas/wwwroot/jiajiahui/core/caches/caches_template/2/default/show.php): failed to open stream: Permission denied in /datas/wwwroot/jiajiahui/core/libraries/classes/template_cache.class.php on line 55

Warning: chmod(): Operation not permitted in /datas/wwwroot/jiajiahui/core/libraries/classes/template_cache.class.php on line 56
AS3:限制函数的舞台空间? - 源码之家

AS3:限制函数的舞台空间?

问题描述:

我想知道如何防止用户从我的学校董事会外面画画。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); 

     }  

} 

}

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

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 :) –