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;)
谢谢正是我需要的!是否总是需要将x和Y分配为数字?我认为AS3默认了。检查瑞士法郎,我自己做了这些资产! http://gabrielmeono.com/pizarra.swf –
太棒了!只有一个细节我忘了我的代码(我想我已经把它):改变第一个侦听器:'boardActiva.addEventListener(MouseEvent.MOUSE_DOWN,empezarDibujo);'否则我可以开始绘制pizarra以外,结束内部和线被绘制。只是一个小错误;)关于'Number',我总是喜欢键入变量来从IDE获得帮助,并更好地理解代码。 – danii
我刚刚测试过它,谢谢你的bugfix :) –