Форум 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=195735)

olejan1991 12.03.2013 13:41

сетка ячеек
 
Нужно создать приложение "карта", которая будет состоять из ячеек, расположенных в виде сетки с возможность их добавления или удаления, данные хранить в XML, должна быть возможность сохранения изменений. Вот я, собственно не понять как реализовать эту саму сетку.Как-то цыкл for не совсем, мне кажется, подходит. Посетив множество страниц в интернете пришла такая идея: редактируемую сетку можно сделать используя grid и mxml? Правильно ли это, учитывая задание? Удобно ли это,учитывая задание?

iflamberg 12.03.2013 14:17

Цыкл for, по-моему, очень даже =)

olejan1991 12.03.2013 14:28

Это получается один цикл for будет вложен в другой?

GBee 12.03.2013 14:41

Как сделаете :о) Можно и рекурсией, можно и одним циклом с дополнительным счетчиком. Но вам проще вложенным. А что на карте то изображено?

iflamberg 12.03.2013 14:41

Конечно.
Нет, конечно, вы можете и grid использовать, если умеете. Только програмно создавать ячейки для grid'а не чуть не легче, чем пройтись for'ом и нарисовать сетку спрайтов.
Но, если вы делаете, что-то типа редактора карты для игрушки, то в целом, с помощью flex'а удобно интерфейс редактора закодить.

olejan1991 12.03.2013 14:55

Цитата:

Сообщение от GBee (Сообщение 1124782)
Как сделаете :о) Можно и рекурсией, можно и одним циклом с дополнительным счетчиком. Но вам проще вложенным. А что на карте то изображено?

))) ячейки будут разных типов(земля,вода,песок) и на определенные типы можно будет высаживать определенные растения))) как-то так...

GBee 12.03.2013 15:28

Тогда точно во флексе не надо. При больших размерах грид будет тормозить. Лучше ужа на спрайтике отрисовать.

iflamberg 12.03.2013 15:56

Я себе редакторы карт во флексе делаю. Кидаю канвас, на него спрайт, в спрайте карта. Сверху менюха - сохранить/загрузить - все дела. Снизу, скажем, горизонтальный таб навигатор с элементиками, таскаемыми drag'n'drop-ом. Интерфейсики в флексе накидывать - удовольствие.

GBee 12.03.2013 16:01

Ну если грамотно подходить, то флекс для админок самое то. Но использовать их датагрид для больших карт - как минимум неудобно.

iflamberg 12.03.2013 16:04

а я датагрид и не использую в самой карте. Канвас, в канвасе чистый as3.

olejan1991 12.03.2013 20:09

Я человек с никаким опытом,
Цитата:

Сообщение от GBee (Сообщение 1124799)
Лучше ужа на спрайтике отрисовать.

это значит с использованием циклов?

iflamberg 12.03.2013 20:23

Мне кажется, что если вы "человек с никаким опытом" и для вас тяжеловато решить такую задачу, как отрисовать сетку из квадратных тайлов, то с такой задачей, как "ячейки будут разных типов(земля,вода,песок) и на определенные типы можно будет высаживать определенные растения)))" вы не справитесь. Все равно, что отправиться в поход по горам в шлепанцах, гавайке и пустым рюкзаком за плечами.

olejan1991 13.03.2013 00:51

Код AS3:

package
{
        import flash.display.*;
 
        public class VirtualMap extends Sprite
        {
 
        private var heightMap:uint = 2;
        private var widthMap:uint = 3;
                public function VirtualMap()
                {
                        for(var i:int = 0; i < heightMap; i++)
                        {                               
                                for(var j:int = 0; j < widthMap; j++)
                                {               
                                        var displayCell:Sprite = new Sprite();
                                        displayCell.graphics.lineStyle(1, 0x000000);
                                        displayCell.graphics.drawRect(99 * j, 99 * i, 99, 99);
                                        addChild(displayCell);                               
                                }
 
                        }
 
                }
 
 
 
 
        }
}

Добавлено через 2 минуты
Цитата:

Сообщение от iflamberg (Сообщение 1124886)
для вас тяжеловато решить такую задачу, как отрисовать сетку из квадратных тайлов.

Может мне кажется, но по-моему на старте всегда тяжеловато...

Добавлено через 2 минуты
Даже с элементарными вещами

GBee 13.03.2013 01:29

Угу - то что надо, размер клетки - тоже в константы. Ну и сама клетка может быть отдельным классом.

olejan1991 13.03.2013 01:41

Цитата:

Сообщение от GBee (Сообщение 1124989)
Ну и сама клетка может быть отдельным классом.

Вот как раз сейчас и думаю об этом. Может глупость скажу: в отдельном классе должно реализовываться то, что во внутреннем цикле for? Я правильно понимаю?

iflamberg 13.03.2013 02:32

Ну, не спорю, такая учебная задача по большому счету ничем не отличается от любой другой. Я ни в коем случае не хотел вам нагрубить. Надо было расширить свой пост. Я хотел сказать, что лучше быть последовательным, начать с изучения языка, структур данных, классических приемов.
В любом случае я рад за вас, что вы самостоятельно справились с задачей и с удовольствием помогу вам, если у вас будут конкретные вопросы или ошибки в коде.

"в отдельном классе должно реализовываться то, что во внутреннем цикле for?" - да, именно так. Обычно это удобно.

olejan1991 13.03.2013 22:09

Не могу понять. Делаю вот так

class VirtualMap
Код AS3:

package
{
        import flash.display.*;
 
        import map.*;
 
        public class VirtualMap extends Sprite
        {
 
              private var heightMap:uint = 2;
              private var widthMap:uint = 3;
 
 
                public function VirtualMap2()
                {
                        // Выводим сетку ячеек
                        for(var i:int = 0; i < heightMap; i++)
                        {                               
                                for(var j:int = 0; j < widthMap; j++)
                                {               
                                        var cellMap:Sprite = new Sprite();
                                        var displayCell:CellMap = new CellMap(j, i, cellMap);
                                        addChild(displayCell);
                                }                               
                        }
 
                }       
        }
}


class CellMap

Код AS3:

package map
{
        import flash.display.*;
 
        public class CellMap extends Sprite
        {
                public function CellMap(j:uint, i:uint, cellMap:Sprite)
                {
                        cellMap.graphics.lineStyle(1, 0x000000);
                        cellMap.graphics.drawRect(99 * j, 99 * i, 99, 99);
                }
        }
}

И оно ничего не выводит...

GBee 13.03.2013 22:25

так рисуете вы на переданном спрайте, а добавляете свой. Странную вы схему придумали.

olejan1991 13.03.2013 22:32

Переделал, работает

Код AS3:

package
{
        import flash.display.*;
 
        import map.*;
 
        public class VirtualMap extends Sprite
        {
 
              private var heightMap:uint = 2;
              private var widthMap:uint = 3;
 
 
                public function VirtualMap2()
                {
                        // Выводим сетку ячеек
                        for(var i:int = 0; i < heightMap; i++)
                        {                               
                                for(var j:int = 0; j < widthMap; j++)
                                {               
                                        var cellMap:Sprite = new Sprite();
                                        new CellMap(j, i, cellMap);
                                        addChild(cellMap);
                                }                               
                        }
 
                }       
        }
}

Код AS3:

package map
{
        import flash.display.*;
 
        public class CellMap extends Sprite
        {
                public function CellMap(j:uint, i:uint, cellMap:Sprite)
                {
                        cellMap.graphics.lineStyle(1, 0x000000);
                        cellMap.graphics.drawRect(99 * j, 99 * i, 99, 99);
                }
        }
}

но кажется мне, что не так оно должно быть...

GBee 13.03.2013 22:49

Вы подумайте, что вы делаете? У вас есть варианты, я вижу как минимум 2:
1) У вас есть массив описаний клеток (х,у,тип), бегать по нему и по полученной инфе рисовать все в один спрайт.
2) У вас есть массив готовых клеток нужного типа (или подкласса от основного класса клетка). Бежим и все подряд добавляем в главный спрайт. Здесь надо какую-нить фабрику придумать.

olejan1991 13.03.2013 23:15

Кстати говоря, информация по ячейкам и объектам хранится в придуманном XML

Код:

<?xml version="1.0" encoding="UTF-8"?>
<MAP WIDTH="3" HEIGHT="2">
        <CELL ID="0" TYPE-CELL="land">
        <OBJECT TYPE-OBJECT="tree"></OBJECT>
        </CELL>       
        <CELL ID="1" TYPE-CELL="water">
        <OBJECT TYPE-OBJECT="fish"></OBJECT>
        </CELL>       
        <CELL ID="2" TYPE-CELL="water">
        <OBJECT TYPE-OBJECT="weed"></OBJECT>
        </CELL>       
        <CELL ID="3" TYPE-CELL="land">
        <OBJECT TYPE-OBJECT="tree"></OBJECT>
        </CELL>       
        <CELL ID="4" TYPE-CELL="land">
        <OBJECT TYPE-OBJECT="flower"></OBJECT>
        </CELL>       
        <CELL ID="5" TYPE-CELL="grass">
        <OBJECT TYPE-OBJECT="tree"></OBJECT>
        </CELL>       
</MAP>


Wolsh 14.03.2013 03:17

CellMap должен просто отрисовывать квадрат, в СВОИХ нулевых координатах. Он сам — Спрайт, зачем создавать еще один спрайт, потом создавать спрайт CellMap только чтобы отрисовать что-то в первом спрайте?.. Циклом создаете клетки (как отдельные объекты) и размещаете их в контейнере в координатах, соответствующих позиции цикла. То есть классу CellMap вообще никаких параметров отдавать не надо было. Это спрайт, который умеет СЕБЯ закрашивать.
Вот если хотите, можно отдавать ему Тип клетки (TYPE-CELL), и пусть закрашивает себя водой или сеном, как прикажут.
О фабрике пока рано говорить, мне кажется. С абстрактным делением задач по классам бы разобраться для начала..


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

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