PDA

Просмотр полной версии : Привязка события


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

}
}
}

И ещё подскажите как лучше делать в такой ситуации создавать интерфейс динамически или всё таки с помощью стандартных компонентов?За ранее спасибо

yasha005
08.03.2013, 22:35
Если вы слушаете сцену на предмет клика, то нет смысла слушать дочерние объекты DisplayObject на сиё, добавленные в список отображения

public function GameView ()
{
_width = _columns * CELL_WIDTH;
_height = _rows * CELL_WIDTH;
init ();
stage.addEventListener(MouseEvent.CLICK,MouseClicked);//работает
}


private function MouseClicked (e:MouseEvent):void
{
trace (Math.floor(e.currentTarget.localY/CELL_WIDTH)+":"+Math.floor(e.currentTarget.localX/CELL_WIDTH));
}

Wolsh
09.03.2013, 00:03
private var mainShape : Shape = new Shape();
private var menu : Shape = new Shape();
mainShape.addEventListener(MouseEvent.CLICK,MouseClicked);//не работает
menu.addEventListener(MouseEvent.CLICK,MouseClicked);//не работаетShape не является наследником InteractiveObject — проще говоря, не реагирует на мышь (в отличие от спрайта, например).