Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 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);
 
    }
  }

Старый 03.07.2009, 23:14
udaaff вне форума Посмотреть профиль Отправить личное сообщение для udaaff Найти все сообщения от udaaff
  № 2  
Ответить с цитированием
udaaff
...

модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
Код AS3:
for (var i:int = 0; i < matrixX; i++){
	matrixArray[i] = row;
	matrixArray[i] = [];
	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]);
	}
 
}

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

Регистрация: Sep 2005
Сообщений: 33
Спасибо!!

Старый 21.10.2009, 20:38
Trains вне форума Посмотреть профиль Отправить личное сообщение для Trains Найти все сообщения от Trains
  № 4  
Ответить с цитированием
Trains

Регистрация: Jun 2005
Сообщений: 40
Отправить сообщение для Trains с помощью ICQ
Странно а у меня при таком же раскладе:
Код AS3:
			var cubes:Array = [];
			for (var y:int = 0; y<myXML.attribute("my"); y++) {
				cubes[y] = [];
				for (var x:int = 0; x<myXML.attribute("mx"); x++) {
					cubes[x][y] = new PoleMc();
					trace(cubes[x][y]);
					cubes[x][y].x = x*50;
					cubes[x][y].y = y*50;
					addChild(cubes[x][y]);
				}
			}
создается один экземпляр и выводит ошибку:
Цитата:
[object PoleMc]
TypeError: Error #1010: A term is undefined and has no properties.
at as3::Main/buildPole()
at flash.events::EventDispatcher/dispatchEventFunction()
at flash.events::EventDispatcher/dispatchEvent()
at as3::Connect/xmlLoaded()
at flash.events::EventDispatcher/dispatchEventFunction()
at flash.events::EventDispatcher/dispatchEvent()
at flash.net::URLLoader/onComplete()
Че за фигня то?

Старый 21.10.2009, 22:32
Felicast вне форума Посмотреть профиль Отправить личное сообщение для Felicast Найти все сообщения от Felicast
  № 5  
Ответить с цитированием
Felicast
 
Аватар для Felicast

Регистрация: Feb 2008
Адрес: Череповец
Сообщений: 623
Отправить сообщение для Felicast с помощью ICQ
мне кажется ошибка вот тут:
Код AS3:
y<myXML.attribute("my")
надо сначала к числу привести
__________________
я могу стать всем, если только захочу

Старый 22.10.2009, 02:24
Trains вне форума Посмотреть профиль Отправить личное сообщение для Trains Найти все сообщения от Trains
  № 6  
Ответить с цитированием
Trains

Регистрация: Jun 2005
Сообщений: 40
Отправить сообщение для Trains с помощью ICQ
да не:
Код AS3:
				for (var x:int = 0; x<myXML.attribute("mx"); x++) {
					trace(x);
					cubes[x][y] = new PoleMc();
					trace(cubes[x][y]);
trace:
Цитата:
0
[object PoleMc]
1
TypeError: Error #1010: A term is undefined and has no properties.
а двумерный масив нормально размещает..

Старый 22.10.2009, 02:39
udaaff вне форума Посмотреть профиль Отправить личное сообщение для udaaff Найти все сообщения от udaaff
  № 7  
Ответить с цитированием
udaaff
...

модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
cubes[y][x] ?

Старый 22.10.2009, 14:37
Trains вне форума Посмотреть профиль Отправить личное сообщение для Trains Найти все сообщения от Trains
  № 8  
Ответить с цитированием
Trains

Регистрация: Jun 2005
Сообщений: 40
Отправить сообщение для Trains с помощью ICQ
точна х и у местами поменять


Последний раз редактировалось Trains; 23.10.2009 в 02:20.
Создать новую тему Ответ Часовой пояс GMT +4, время: 06:58.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 06:58.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.