Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Координаты игровой сетки (http://www.flasher.ru/forum/showthread.php?t=127059)

hrimz 03.07.2009 22:59

Координаты игровой сетки
 
Добрый вечер.

Генерирую игровое поле из 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);
 
    }
  }


udaaff 03.07.2009 23:14

Код 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]);
        }
 
}


hrimz 03.07.2009 23:24

Спасибо!!

Trains 21.10.2009 20:38

Странно а у меня при таком же раскладе:
Код 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()
Че за фигня то? :)

Felicast 21.10.2009 22:32

мне кажется ошибка вот тут:
Код AS3:

y<myXML.attribute("my")

надо сначала к числу привести

Trains 22.10.2009 02:24

да не:
Код 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.
а двумерный масив нормально размещает..

udaaff 22.10.2009 02:39

cubes[y][x] ?

Trains 22.10.2009 14:37

точна х и у местами поменять :)


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

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