Доброго времени суток.
Реализую скроллинг карты (которая представляет собой Sprite куда добавляется графические элементы, из которых она состоит) посредством захвата мышью. Фактическое её перемещение таким способом я реализовал, но затем захотел сделать ограничение для перемещения, чтобы нельзя было отвести карту в сторону показав пустую сцену. После добавления нескольких условных операторов её вообще не получается сдвинуть. Ошибок в условиях не нашел. Вот проблемный участок кода:

Код AS3:
//три функции отвечающие за скроллинг карты
private function startScroll(e:MouseEvent):void{
lastPozMouseX = mouseX;
lastPozMouseY = mouseY;
timer.start();
}
private function stopScroll(e:MouseEvent):void{
timer.stop();
}
private var moveX:int;
private var moveY:int;
private function scrollMap(e:TimerEvent):void{
moveX = mouseX - lastPozMouseX;//на сколько изменилось положение курсора мыши относительно предыдущего по оси Х
moveY = mouseY - lastPozMouseY;//на сколько изменилось положение курсора мыши относительно предыдущего по оси Y
if(moveX > lastPozMouseX){
if(this.x + moveX < this.width/2){
this.x += moveX;
}
}else{
if(this.x + moveX > -this.width/2 + stageWidth){
this.x += moveX;
}
}
if(moveY > lastPozMouseY){
if(this.y + moveY < this.height/2){
this.y += moveY;
}
}else{
if(this.y + moveY > -this.height/2 + stageHeight){
this.y += moveY;
}
}
lastPozMouseX = mouseX;
lastPozMouseY = mouseY;
}
Если этого недостаточно, то вот код всего класса:

Код AS3:
package {
import flash.display.Sprite;
import flash.events.MouseEvent;
import flash.utils.Timer;
import flash.events.TimerEvent;
internal class Map extends Sprite{
private var arraySquare:Array = new Array();
private var timer:Timer;//с помощью этого таймера реализуем скроллинг карты
private var stageWidth:int;
private var stageHeight:int;
//переменные связанные с скроллингом карты
private var lastPozMouseX:int = 0;//предыдущее положение мыши по оси Х
private var lastPozMouseY:int = 0;//предыдущее положение мыши по оси Y
public function Map(stageWidth_:int, stageHeight_:int, sizeCell:int){
stageWidth = stageWidth_;
stageHeight = stageHeight_;
var xPoz:int = -sizeCell/2;
var yPoz:int = -sizeCell/2;
var width_:int= stageWidth_ / sizeCell;;
var height_:int = stageHeight_ / sizeCell;;
for(var i:int = 1; i <= height_; i++){
yPoz += sizeCell;
xPoz = -sizeCell/2;//заполнять каждую новую линию нужно с левого края сцены
for(var j:int = 1; j <= width_; j++){
xPoz += sizeCell;
addSquare(xPoz, yPoz);
}
}
/*регистрация приемников отвечающих за скроллинг карты, а также создадим объект класса Timer с помощью которого будем двигать карту.*/
timer = new Timer(50);
timer.addEventListener(TimerEvent.TIMER, scrollMap);
this.addEventListener(MouseEvent.MOUSE_DOWN, startScroll);
this.addEventListener(MouseEvent.MOUSE_UP, stopScroll);
}
private function addSquare(xPoz, yPoz):void{
switch(Math.floor(Math.random() * 11 / 5)){
case 0:
arraySquare[arraySquare.length] = new Square1;
arraySquare[arraySquare.length - 1].x = xPoz;
arraySquare[arraySquare.length - 1].y = yPoz;
this.addChild(arraySquare[arraySquare.length - 1]);
break;
case 1:
arraySquare[arraySquare.length] = new Square2;
arraySquare[arraySquare.length - 1].x = xPoz;
arraySquare[arraySquare.length - 1].y = yPoz;
this.addChild(arraySquare[arraySquare.length - 1]);
break;
case 2:
arraySquare[arraySquare.length] = new Square3;
arraySquare[arraySquare.length - 1].x = xPoz;
arraySquare[arraySquare.length - 1].y = yPoz;
this.addChild(arraySquare[arraySquare.length - 1]);
break;
}
}
//три функции отвечающие за скроллинг карты
private function startScroll(e:MouseEvent):void{
lastPozMouseX = mouseX;
lastPozMouseY = mouseY;
timer.start();
}
private function stopScroll(e:MouseEvent):void{
timer.stop();
}
private var moveX:int;
private var moveY:int;
private function scrollMap(e:TimerEvent):void{
moveX = mouseX - lastPozMouseX;/*на сколько изменилось положение курсора мыши относительно предыдущего по оси Х*/
moveY = mouseY - lastPozMouseY;/*на сколько изменилось положение курсора мыши относительно предыдущего по оси Y*/
if(moveX > lastPozMouseX){
if(this.x + moveX < this.width/2){
this.x += moveX;
}
}else{
if(this.x + moveX > -this.width/2 + stageWidth){
this.x += moveX;
}
}
if(moveY > lastPozMouseY){
if(this.y + moveY < this.height/2){
this.y += moveY;
}
}else{
if(this.y + moveY > -this.height/2 + stageHeight){
this.y += moveY;
}
}
lastPozMouseX = mouseX;
lastPozMouseY = mouseY;
}
}
}