Construct Community

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Construct Community » Примеры, исходники » Редактор карт(очень упрощенный вариант)


Редактор карт(очень упрощенный вариант)

Сообщений 21 страница 25 из 25

21

GeorgeThreeD написал(а):

Да, очень просто. Создаешь папку Maps и после этого, в коде вместо (Set INI file to apppath+EditBox.Text+".nm") делаешь следующее: Set INI file to apppath+"Maps\"+EditBox.Text+".nm"
P.S. чтобы это сработало, необходимо самостоятельно создать заранее папку Maps в каталоге проекта.

Спасибо дружище, лови+...

22

Слушай, а вот такой вопрос, можно сделать так. что бы после того как в MapReader вписываешь имя карты и жмёшь кнопку LOAD, все эти элементы пропадают и MapReader показывает только то, что было построено в MapEditor, то есть зелёные кубики и не более... Вот такой вот вопросец))) Есть идеи? Ну или после ввода имени и нажатия кнопки появлялся новый слой с отображением построенного в MapEditor без EditBox и кнопки. И ещё как бы сделать так чтобы после установки зелёного кубика в MapEditor, к примеру правой кнопкой мыши можно было бы двигать, и чтобы MapReader загружал карту с позиционированием кубика таким, каким я его подвигал в MapEditor... Жду в нетерпением, если не понятно отпиши, я разжую..))) Behavior 'Drag&Drop' работает, но MapReader бросает кубики в произвольных позициях...

Отредактировано makco134 (2010-01-31 01:37:51)

23

Да, я похоже тебя понял, и у меня есть идеи и на этот счет. Я недавно разрабатывал один проект(сейчас он заморожен, времени нет), так вот там все по клеточкам. И сохранение происходит по другому алгоритму. Примерно так выглядит алгоритм:

Задаем 5 переменных:
1. XScale = количество клеток по X( или количество пикселей, если редактирование не по клеткам).
2. YScale = количество клеток по Y( или количество пикселей, если редактирование не по клеткам).
3. CurentX = 0 (будет использоваться как счетчик по X)
4. CurentY = 0 (будет использоваться как счетчик по Y)
5. n = 0 (уникальная переменная для искомого объекта, для каждого вида объекта создается своя переменная)

Далее создается довольно прикольная трехэтажная штука:

>При нажатии клавиши сохранить
>Повторить действие (XScale) количество раз
   - Прибавляем к значению переменной (CurentX) значение = 1
   - Меняем значение переменной (CurentY) на 0
   >>Повторить действие (YScale) количество раз
        -- Прибавляем к значению переменной (CurentY) значение = 1 
        >>> Если X координата позиции исходного объекта совпадает со значением переменной (CurentX) 
        >>> Если Y координата позиции исходного объекта совпадает со значением переменной (CurentY)
                --- Записываем X координату исходного объекта, в файл INI, в Группу("Исходный объект"+ конвертированное в текстовое, значение переменной (n)), в строку("X"). 
                --- Записываем Y координату исходного объекта, в файл INI, в Группу("Исходный объект"+ конвертированное в текстовое, значение переменной (n)), в строку("Y").
                --- Прибавляем к значению переменной (n) значение = 1

Вот и все. Таким образом можно спокойно изменять позицию объекта в любое время и после нажатия клавиши, будет сохранена новая позиция.
Ну а исчезновение всяких элементов GUI после загрузки зоны, это вообще легко. Просто к условию нажатия кнопки, добавляй действия уничтожения нужных объектов. Ничего сложного.

P.S. увеличением количества значков ">" и "-" я пытался показать уровень под событий и их действий.

24

+ System: Repeat global('GridY') times
    -> System: Add 1 to global variable 'ScanY'
    -> System: Set global variable 'ScanX' to -1
++ System: Repeat global('GridX') times
      -> System: Add 1 to global variable 'ScanX'
+++ Block2: X Equal to global('ScanX')*32
+++ Block2: Y Equal to global('ScanY')*32
        -> INI: Write value Block2.X to item "X" in group "2Block"+str(global('ScanNumB2'))
        -> INI: Write value Block2.Y to item "Y" in group "2Block"+str(global('ScanNumB2'))
        -> System: Add 1 to global variable 'ScanNumB2'

Вот так выглядит этот кусок кода в моем редакторе... Но он оптимизирован под поле разделенное на клетки размером 32х32 пикселя.

25

GeorgeThreeD написал(а):

Да, я похоже тебя понял, и у меня есть идеи и на этот счет. Я недавно разрабатывал один проект(сейчас он заморожен, времени нет), так вот там все по клеточкам. И сохранение происходит по другому алгоритму. Примерно так выглядит алгоритм:
Задаем 5 переменных:
1. XScale = количество клеток по X( или количество пикселей, если редактирование не по клеткам).
2. YScale = количество клеток по Y( или количество пикселей, если редактирование не по клеткам).
3. CurentX = 0 (будет использоваться как счетчик по X)
4. CurentY = 0 (будет использоваться как счетчик по Y)
5. n = 0 (уникальная переменная для искомого объекта, для каждого вида объекта создается своя переменная)
Далее создается довольно прикольная трехэтажная штука:
>При нажатии клавиши сохранить
>Повторить действие (XScale) количество раз
   - Прибавляем к значению переменной (CurentX) значение = 1
   - Меняем значение переменной (CurentY) на 0
   >>Повторить действие (YScale) количество раз
        -- Прибавляем к значению переменной (CurentY) значение = 1 
        >>> Если X координата позиции исходного объекта совпадает со значением переменной (CurentX) 
        >>> Если Y координата позиции исходного объекта совпадает со значением переменной (CurentY)
                --- Записываем X координату исходного объекта, в файл INI, в Группу("Исходный объект"+ конвертированное в текстовое, значение переменной (n)), в строку("X"). 
                --- Записываем Y координату исходного объекта, в файл INI, в Группу("Исходный объект"+ конвертированное в текстовое, значение переменной (n)), в строку("Y").
                --- Прибавляем к значению переменной (n) значение = 1
Вот и все. Таким образом можно спокойно изменять позицию объекта в любое время и после нажатия клавиши, будет сохранена новая позиция.
Ну а исчезновение всяких элементов GUI после загрузки зоны, это вообще легко. Просто к условию нажатия кнопки, добавляй действия уничтожения нужных объектов. Ничего сложного.
P.S. увеличением количества значков ">" и "-" я пытался показать уровень под событий и их действий.

GeorgeThreeD написал(а):

+ System: Repeat global('GridY') times
    -> System: Add 1 to global variable 'ScanY'
    -> System: Set global variable 'ScanX' to -1
++ System: Repeat global('GridX') times
      -> System: Add 1 to global variable 'ScanX'
+++ Block2: X Equal to global('ScanX')*32
+++ Block2: Y Equal to global('ScanY')*32
        -> INI: Write value Block2.X to item "X" in group "2Block"+str(global('ScanNumB2'))
        -> INI: Write value Block2.Y to item "Y" in group "2Block"+str(global('ScanNumB2'))
        -> System: Add 1 to global variable 'ScanNumB2'
Вот так выглядит этот кусок кода в моем редакторе... Но он оптимизирован под поле разделенное на клетки размером 32х32 пикселя.

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


Вы здесь » Construct Community » Примеры, исходники » Редактор карт(очень упрощенный вариант)


создать свой форум бесплатно