PDA

Просмотр полной версии : помещение объекта в контейнер


svgreshnik2694
15.05.2015, 10:27
Проблема состоит в том, что при помещение контейнера r1 в контейнер r, контейнер r1 начинает двигаться вместе с r, но на некотором расстоянии. Как сделать так, чтобы при помещение r1 в r, квадрат оставался на том месте куда мы с помощью мыши помещаем квадрат.
Имеется код:
package
{
import flash.display.*;
import flash.events.*;
import flash.events.MouseEvent;
import flash.text.*;
import flash.geom.Point;



public class pr extends Sprite
{
private var r:Sprite;
private var r1:Sprite;
private var offsetX:Number;
private var offsetY:Number;

public function pr () {



r = new Sprite();
r.graphics.beginFill(0xff0000);
r.graphics.lineStyle(3);
r.graphics.drawRect(0,0,60,100);
r.x=200;
r.y=200;
addChild(r);

r1 = new Sprite();
r1.graphics.beginFill(0x0000ff);
r1.graphics.lineStyle(3);
r1.graphics.drawRect(0,0,20,20);
r1.x=100;
r1.y=200;



addChild(r1);

r1. addEventListener(MouseEvent.MOUSE_DOWN, downH);
r1.addEventListener(MouseEvent.MOUSE_UP, upH);
addEventListener(Event.ENTER_FRAME, moveLine);

}


public function downH (e:MouseEvent):void {

r1.startDrag();
trace("кнопка мыши нажата");


}


public function upH (e:MouseEvent):void {
r1.stopDrag();
trace("кнопка мыши отпущена");


if (r1.x>=r.x && r1.x<=r.x+r.width && r1.y>=r.y && r1.y<=r.y+r.height ) {
trace("совпадают");

r.addChild(r1);


}
}


public function moveLine(e:Event):void{

r.x +=1;
}



}
}

callme
15.05.2015, 11:17
Код не проверял, но мне кажется как-то так надо делать.

var point1:Point = r1.localToGlobal(0, 0);
var point2:Point = r.globalToLocal(point1.x, point1.y);
r1.x = point2.x;
r1.y = point2.y;

http://help.adobe.com/ru_RU/FlashPlatform/reference/actionscript/3/flash/display/DisplayObject.html#localToGlobal%28%29

http://help.adobe.com/ru_RU/FlashPlatform/reference/actionscript/3/flash/display/DisplayObject.html#globalToLocal%28%29