Показать сообщение отдельно
Старый 03.07.2009, 22:59
hrimz вне форума Посмотреть профиль Отправить личное сообщение для hrimz Найти все сообщения от hrimz
  № 1  
Ответить с цитированием
hrimz
 
Аватар для hrimz

Регистрация: Sep 2005
Сообщений: 33
По умолчанию Координаты игровой сетки

Добрый вечер.

Генерирую игровое поле из xml-данных, используя вложенные массивы. Для создания поля использую отдельный класс GameMatrix:

Код AS3:
package netgame {
  import flash.display.*;
  import flash.geom.*;
 
	public class GameMatrix extends Sprite{
 
		//ширина ячейки
		public var cellSize:int = 40;
 
		//Размер поля в ячейках, передается в конструктор
		private var matrixX:int;
		private var matrixY:int;
 
                //контейнер для отображения игрового поля
		private var container:Sprite;
 
                //Основной массив матрицы
		public var matrixArray:Array = new Array();
 
                //Вложенный массив для матрицы
		public var row:Array = new Array(matrixY);
 
                //Конструктор
		public function GameMatrix (newMX:int, newMY:int, targetContainer:Sprite){
 
			matrixX = newMX;
			matrixY = newMY;
			container = targetContainer;
 
			//trace("Game x-matrix size: " + matrixX);
			//trace("Game y-matrix size: " + matrixY);
 
                        //циклы создания поля
			for (var i:int = 0; i < matrixX; i++){
			matrixArray[i] = row;
				for (var k:int = 0; k < matrixY; k++){
					matrixArray[i][k] = new Sprite();
					matrixArray[i][k].graphics.lineStyle(1);
					matrixArray[i][k].graphics.beginFill(0xFFFEEE, 1);
					matrixArray[i][k].graphics.drawRect(0, 0, cellSize, cellSize);
					matrixArray[i][k].x = i*40 + 50;
					matrixArray[i][k].y = k*40 + 50;
					container.addChild(matrixArray[i][k]);
				}
 
			}
			trace("GameMatrix x: " + matrixArray[0][1].x);
			trace("GameMatrix y: " + matrixArray[0][1].y);
		}
	}
}
Поле отлично рисуется, для размещения игрока в нужной месте требуется обращение к координатам (x y) текущей ячейки (объекту Sprite), но x координата всегда равна 390! с y никаких проблем. Намекните если возможно на решение, буду благодарен - очень замучился уже. И не понимаю почему же тогда поле строится??

Конструктор основного класса:
Код AS3:
   public function GameClass () {
 
		function xmlLoaded(e:Event):void
		{
			remoteXml = new XML(xmlLoader.data);
			//trace (getRoot(remoteXml))
			//trace (remoteXml.attributes()[0]);
			addChild(place);
			currentUserXpos = remoteXml.children()[0].attributes()[0];
			currentUserYpos = remoteXml.children()[0].attributes()[1];
			trace(currentUserXpos);
			trace(currentUserYpos);
			//currentUserYpos;
 
    		matrix = new GameMatrix(remoteXml.attributes()[0], remoteXml.attributes()[1], place);
 
 
			userPlayer = new Sprite();
			userPlayer.graphics.lineStyle(1);
			userPlayer.graphics.beginFill(0x000000, 1);
			userPlayer.graphics.drawCircle(0, 0, 10);
			userPlayer.x = matrix.matrixArray[currentUserXpos][currentUserYpos].x + matrix.cellSize/2;
			userPlayer.y = matrix.matrixArray[currentUserXpos][currentUserYpos].y + matrix.cellSize/2;
 
			trace("UserPlayer x: " + userPlayer.x);
			trace("UserPlayer y: " + userPlayer.y);
 
 
			place.addChild(userPlayer);
			//trace (currentUserXpos);
			//trace (matrix.matrixArray[3][5].y);
		}
 
		xmlLoader.load(xmlReq);
		xmlLoader.addEventListener(Event.COMPLETE, xmlLoaded);
 
    }
  }