qwerty1599
08.03.2013, 21:46
Добрый день,не так давно начал изучать as3 и пока что проблем как таковых не возникало,но вот недавно я попытался нарисовать прямоугольник(динамически) и повесить на него слушатель событий,код компилируется и выполняется ,но вот само событие не происходит,подскажите пожалуйста
package
{
import flash.display.Sprite;
import flash.events.MouseEvent;
import flash.display.Shape;
/**
* @author Maxim
*/
public class GameView extends Sprite
{
public static const CELL_WIDTH:int = 30;
private var _rows:int = 20;
private var _columns:int = 20;
private var _width:int;
private var _height:int;
private var mainShape : Shape = new Shape();
private var rest : Shape = new Shape();
private var menu : Shape = new Shape();
public function GameView ()
{
_width = _columns * CELL_WIDTH;
_height = _rows * CELL_WIDTH;
init ();
stage.addEventListener(MouseEvent.CLICK,MouseClicked);//работает
mainShape.addEventListener(MouseEvent.CLICK,MouseClicked);//не работает
//была задумка что проблема в глубине т.к у mainshape глубина = 0,но
menu.addEventListener(MouseEvent.CLICK,MouseClicked);//не работает
//хотя находиться и на 3 уровне глубины(самый верхний)
}
private function MouseClicked (e:MouseEvent):void
{
trace (Math.floor(e.localY/CELL_WIDTH)+":"+Math.floor(e.localX/CELL_WIDTH));
}
private function init ():void
{
Init_MainShape ();
Init_rest ();
}
private function Init_MainShape ():void
{
mainShape.graphics.beginFill (0xEEEEEE);
mainShape.graphics.lineStyle (2.0);
mainShape.graphics.drawRect (0, 0, _height, _width);
mainShape.graphics.endFill ();
addChild (mainShape);
}
private function Init_rest ():void
{
menu.graphics.beginFill (0xEEEEEE);
menu.graphics.lineStyle (2.0);
menu.graphics.drawRect (_columns*CELL_WIDTH+20,0,157,362);
rest.graphics.lineStyle (1.0, 0x999999);
for (var i: int = 1; i < _columns; i++)
{
rest.graphics.moveTo (i * CELL_WIDTH, 0);
rest.graphics.lineTo (i * CELL_WIDTH, _height);
}
for (i = 1; i < _rows; i++)
{
rest.graphics.moveTo (0, i * CELL_WIDTH);
rest.graphics.lineTo (_width, i * CELL_WIDTH);
}
rest.graphics.endFill ();
addChild (rest);
addChild(menu);
}
}
}
И ещё подскажите как лучше делать в такой ситуации создавать интерфейс динамически или всё таки с помощью стандартных компонентов?За ранее спасибо
package
{
import flash.display.Sprite;
import flash.events.MouseEvent;
import flash.display.Shape;
/**
* @author Maxim
*/
public class GameView extends Sprite
{
public static const CELL_WIDTH:int = 30;
private var _rows:int = 20;
private var _columns:int = 20;
private var _width:int;
private var _height:int;
private var mainShape : Shape = new Shape();
private var rest : Shape = new Shape();
private var menu : Shape = new Shape();
public function GameView ()
{
_width = _columns * CELL_WIDTH;
_height = _rows * CELL_WIDTH;
init ();
stage.addEventListener(MouseEvent.CLICK,MouseClicked);//работает
mainShape.addEventListener(MouseEvent.CLICK,MouseClicked);//не работает
//была задумка что проблема в глубине т.к у mainshape глубина = 0,но
menu.addEventListener(MouseEvent.CLICK,MouseClicked);//не работает
//хотя находиться и на 3 уровне глубины(самый верхний)
}
private function MouseClicked (e:MouseEvent):void
{
trace (Math.floor(e.localY/CELL_WIDTH)+":"+Math.floor(e.localX/CELL_WIDTH));
}
private function init ():void
{
Init_MainShape ();
Init_rest ();
}
private function Init_MainShape ():void
{
mainShape.graphics.beginFill (0xEEEEEE);
mainShape.graphics.lineStyle (2.0);
mainShape.graphics.drawRect (0, 0, _height, _width);
mainShape.graphics.endFill ();
addChild (mainShape);
}
private function Init_rest ():void
{
menu.graphics.beginFill (0xEEEEEE);
menu.graphics.lineStyle (2.0);
menu.graphics.drawRect (_columns*CELL_WIDTH+20,0,157,362);
rest.graphics.lineStyle (1.0, 0x999999);
for (var i: int = 1; i < _columns; i++)
{
rest.graphics.moveTo (i * CELL_WIDTH, 0);
rest.graphics.lineTo (i * CELL_WIDTH, _height);
}
for (i = 1; i < _rows; i++)
{
rest.graphics.moveTo (0, i * CELL_WIDTH);
rest.graphics.lineTo (_width, i * CELL_WIDTH);
}
rest.graphics.endFill ();
addChild (rest);
addChild(menu);
}
}
}
И ещё подскажите как лучше делать в такой ситуации создавать интерфейс динамически или всё таки с помощью стандартных компонентов?За ранее спасибо