PDA

Просмотр полной версии : Квадратная область


act
18.09.2012, 09:07
Всем доброго времени!
Уважаемые знатоки пожалуйста помогите решить задачу.

Есть код:

package {
import flash.display.Sprite;
import flash.display.MovieClip;
import flash.display.DisplayObject;
import flash.display.Shape;
import flash.events.*;

public class Main extends Sprite {

private var offsetX:int,
offsetY:int,
displayObject:DisplayObject;

public function Main():void {
this.init();
}

private function init():void {

var rectDrag:Sprite = new Sprite();

rectDrag.graphics.beginFill(0x000000);
rectDrag.graphics.drawRect(0, 0, 45, 45);
rectDrag.graphics.endFill();

var rect:Sprite = new Sprite();

rect.graphics.lineStyle(1, 0x006600);
rect.graphics.drawRect(0, 0, 400, 400);
rect.graphics.endFill();

var sprite:Sprite = new Sprite();

sprite.y = 300;
sprite.x = 50;

sprite.rotationY = -43;
sprite.rotationX = -43;
sprite.rotationZ = -36;

rect.addChild(rectDrag);

rectDrag.addEventListener(MouseEvent.MOUSE_DOWN, this.startd);
rectDrag.addEventListener(MouseEvent.MOUSE_UP, this.stopd);

sprite.addChild(rect);
super.addChild(sprite);
}

private function startd(event:MouseEvent):void {
this.displayObject = DisplayObject(event.target);

this.offsetX = event.stageX - this.displayObject.x;
this.offsetY = event.stageY - this.displayObject.y;

super.stage.addEventListener(MouseEvent.MOUSE_MOVE, dragg);
}

private function stopd(event:MouseEvent):void {
super.stage.removeEventListener(MouseEvent.MOUSE_MOVE, this.dragg);
}

private function dragg(event:MouseEvent):void {
this.displayObject.x = event.stageX - this.offsetX;
this.displayObject.y = event.stageY - this.offsetY;

event.updateAfterEvent();
}
}
}

Неправильно работает перемещение по области...
Помогите в чем проблема?

Если убрать:

sprite.rotationY = -43;
sprite.rotationX = -43;
sprite.rotationZ = -36;

То все нормально двигается.

Уже какой день не могу решить проблему.
Как вообще правильно нужно сделать?
Будьте так любезны подскажите, ка правильно нужно сделать.

Hauts
18.09.2012, 13:12
import flash.display.Sprite;
import flash.display.MovieClip;
import flash.display.DisplayObject;
import flash.display.Shape;
import flash.events.*;


var offsetX:int,offsetY:int,displayObject:DisplayObject;

var rectDrag:Sprite = new Sprite();

rectDrag.graphics.beginFill(0x000000);
rectDrag.graphics.drawRect(0, 0, 45, 45);
rectDrag.graphics.endFill();

var rect:Sprite = new Sprite();

rect.graphics.lineStyle(1, 0x006600);
rect.graphics.drawRect(0, 0, 400, 400);
rect.graphics.endFill();

var sprite:Sprite = new Sprite();

sprite.y = 300;
sprite.x = 50;

sprite.rotationY = -43;
sprite.rotationX = -43;
sprite.rotationZ = -36;

rect.addChild(rectDrag);

rectDrag.addEventListener(MouseEvent.MOUSE_DOWN, this.startd);
addEventListener(MouseEvent.MOUSE_UP, this.stopd);

sprite.addChild(rect);
super.addChild(sprite);


function startd(event:MouseEvent):void {
this.displayObject = DisplayObject(event.target);
this.offsetX = rectDrag.mouseX;
this.offsetY = rectDrag.mouseY;
super.stage.addEventListener(MouseEvent.MOUSE_MOVE, dragg);
}

function stopd(event:MouseEvent):void {
super.stage.removeEventListener(MouseEvent.MOUSE_MOVE, this.dragg);
}

function dragg(event:MouseEvent):void {
rectDrag.x = sprite.mouseX - offsetX;
rectDrag.y = sprite.mouseY - offsetY;
event.updateAfterEvent();
}

Для ФД подправите сами :)

act
18.09.2012, 18:27
Красава все работает =)

package {
import flash.display.Sprite;
import flash.display.MovieClip;
import flash.display.DisplayObject;
import flash.display.Shape;
import flash.events.*;

public class Main extends Sprite {
private var sprite:Sprite = new Sprite(),
rectDrag:Sprite = new Sprite(),
rect:Sprite = new Sprite();
private var displayObject:DisplayObject;

public function Main():void {
this.init();
}

private function init():void {

this.rectDrag.graphics.beginFill(0x000000);
this.rectDrag.graphics.drawRect(0, 0, 45, 45);
this.rectDrag.graphics.endFill();

this.rect.graphics.lineStyle(1, 0x006600);
this.rect.graphics.drawRect(0, 0, 400, 400);
this.rect.graphics.endFill();

this.sprite.y = 300;
this.sprite.x = 50;

this.sprite.rotationY = -43;
this.sprite.rotationX = -43;
this.sprite.rotationZ = -36;

this.rect.addChild(this.rectDrag);

this.rectDrag.addEventListener(MouseEvent.MOUSE_DOWN, this.startd);
this.rectDrag.addEventListener(MouseEvent.MOUSE_UP, this.stopd);

this.sprite.addChild(this.rect);
super.addChild(this.sprite);
}

private function startd(event:MouseEvent):void {
this.displayObject = DisplayObject(event.target);
super.stage.addEventListener(MouseEvent.MOUSE_MOVE, this.dragg);
}

private function stopd(event:MouseEvent):void {
super.stage.removeEventListener(MouseEvent.MOUSE_MOVE, this.dragg);
}

private function dragg(event:MouseEvent):void {
this.displayObject.x = this.sprite.mouseX - 20;
this.displayObject.y = this.sprite.mouseY - 20;
if (displayObject.x < 0) {
displayObject.x = 0;
}
if (displayObject.y < 0) {
displayObject.y = 0;
}
if (displayObject.x > 355) {
displayObject.x = 355;
}
if (displayObject.y > 355) {
displayObject.y = 355;
}
event.updateAfterEvent();
}
}
}

Чтобы было =)

http://www.cyberforum.ru/actionscript/thread653118.html#post3463174