Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Как создать сетку в as3 (http://www.flasher.ru/forum/showthread.php?t=182287)

Snopka 18.07.2012 14:49

Как создать сетку в as3
 
Здравствуйте уважаемые флэшеры, у меня к вам есть небольшой вопрос. Можно ли на ас3 создать сетку из линий + найти координаты всех пересечений? если у кого-то есть похожий алгоритм, напишите суть его действия, буду очень благодарен.

Tails 18.07.2012 15:05

Что значит сетка? Для чего?

Snopka 18.07.2012 15:06

Для игры, сетка из квадратов АхB

Tails 18.07.2012 15:21

Самого понятия "сетка" не существует, её нужно моделировать самому. Например вот так:
Код AS3:

var step = 50;
for(var i=0; i<10; i++){
        for(var j=0; j<10; j++){
                trace("Ячейка ["+i+","+j+"] координаты x,y: ["+i*step+","+j*step+"]" );
        }
}

С помощью этого кода можно расставить квадраты как-бы "по сетке", если хотите чтоб сетка визуально отображалась, значит её нужно рисовать.

Snopka 18.07.2012 16:59

То есть поверх "виртуальных" квадратов рисованные наложить?

Deimos747 18.07.2012 17:12

Цитата:

Сообщение от Snopka (Сообщение 1089052)
То есть поверх "виртуальных" квадратов рисованные наложить?

Что ты вы подразумеваете под "виртуальными"?
Можете показать скриншот, а ещё лучше, фрагмент кода?

Snopka 18.07.2012 18:19

trace только выполняет трассировку координатов а не рисует её. так вот я хочу поверх этих координатов наложить сетку

abzhapparovmaxa 18.07.2012 18:25

Цитата:

Можно ли на ас3 создать сетку из линий
Да, можно
Цитата:

найти координаты всех пересечений
Это не as3, это геометрия,
В сетке 5х5, пересечениями будут координаты:
1,1 1,2 1,3 1,4 1,5
2,1 2,2 2,3 2,4 2,5
3,1 3,2 3,3 3,4 3,5
4,1 4,2 4,3 4,4 4,5
5,1 5,2 5,3 5,4 5,5

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

Snopka 18.07.2012 18:31

я то сам найду пересечения) вот программно человек мне объяснил всё хорошим алгоритмом с трассировкой. осталось только поверх ячеек наложить так же программно сетку, размер которой я бы менял с помощью ввода чисел в текстовые поля.

Deimos747 18.07.2012 18:41

Код AS3:

package strokes.view
{
    import flash.display.Sprite;
 
    /**
    * @author Maxim
    */

    public class GameView extends Sprite
    {
        public static const CELL_WIDTH: int = 10;
 
        private var _rows: int;
        private var _columns: int;
        private var _width: int;
        private var _height: int;
 
        public function GameView(rows: int, columns: int)
        {
            super();
 
            _rows = rows;
            _columns = columns;
 
            _width = _columns * CELL_WIDTH;
            _height = _rows * CELL_WIDTH;
 
            init();
        }
 
        private function init(): void
        {
            graphics.beginFill(0xEEEEEE);
            graphics.lineStyle(2.0);
            graphics.drawRect(0, 0, _height, _width);
            graphics.lineStyle(1.0, 0x999999);
 
 
            for (var i: int = 1; i < _columns; i++) {
                graphics.moveTo(i * CELL_WIDTH, 0);
                graphics.lineTo(i * CELL_WIDTH, _height);
            }
 
            for (i = 1; i < _rows; i++) {
                graphics.moveTo(0, i * CELL_WIDTH);
                graphics.lineTo(_width, i * CELL_WIDTH);
            }
        }
    }
}


Snopka 18.07.2012 18:51

Пытался сделать таким способом:
Код AS3:

var step = 40;
var sp:Sprite = new Sprite()
addChild(sp);
var g:Graphics = sp.graphics; 
var x_prev:int = 0;
var y_prev:int = 0;
for(var i=0; i<10; i++){
        for(var j=0; j<10; j++){
                trace("Ячейка ["+i+","+j+"] координаты x,y: ["+i*step+","+j*step+"]" );
                g.lineStyle(3, 0x1c2fba);
                g.moveTo(x_prev, y_prev)
                g.lineTo(i*step, j*step)
                x_prev = i*step;
                y_prev = j*step;
        }
}

получилась не совсем сетка)

http://www.fotolink.su/pic_s/1b676e5...cb8c7f0d95.jpg
1366x768(208.94 kB)
Загрузить фото

strangedk 18.07.2012 18:56

Вам же сообщением раньше пример дали

Snopka 18.07.2012 18:56

Deimons747, спасибо, сейчас попробую

Добавлено через 3 минуты
Подскажите пожалуйста как бороться с package cannot be nested, я еще в учебнике не дошел
Добавлено
Пошел читать книгу)

Добавлено через 1 час 7 минут
Люди добрые, я не могу вызвать метод GameView() помогите пожалуйста
Код AS1/AS2:

var func:GameView = new GameView();
GameView();


strangedk 18.07.2012 20:09

Это не метод. Это конструктор. И если вам нужно создать экземпляр класса GameView, то нужно писать так:

Код AS3:

var gameView:GameView = new GameView();

Добавлено через 2 минуты
не досмотрел. Там в конструкторе параметры. Значит создавать так:

Код AS3:

var gameView:GameView = new GameView(10, 10);

и так как этот объект визуальный, и если это не главный класс программы - то не забудьте его добавить:

Код AS3:

addChild(gameView);


Deimos747 18.07.2012 22:19

Цитата:

Подскажите пожалуйста как бороться с package cannot be nested, я еще в учебнике не дошел
Строчку
Код AS3:

package strokes.view

замените в соответствии с расположением файла

Snopka 19.07.2012 14:02

спасибо всем за ответы, тему можно закрыть


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

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