Пятница, 15 Ноября 2024, 05:25

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Вода
madsenДата: Понедельник, 13 Апреля 2015, 18:03 | Сообщение # 1
постоянный участник
Сейчас нет на сайте
Привет!
Есть ли такая возможность, как сделать воду которая будет растекаться?
Примерно как в игре Minecraft, только что-бы вода делалась не вечно, а когда доходила до пола растекалась на 3 кубика.

1 кубик = x32 пикселя на x32.

Нет, не думайте что я делаю копию Minecraft'a, для игры с физикой нужно такое smile

Возможно ли это вообще? Где-то видел такой пример , но там массивы.. Не люблю их.

Заранее СПАСИБО! biggrin


ScirrA ConstrucT
-------------------------
Unity 3D
-------------------------
Crytek Engine 3
-------------------------
Unreal Development Kit
Nick_RimerДата: Понедельник, 13 Апреля 2015, 22:41 | Сообщение # 2
заслуженный участник
Сейчас нет на сайте
madsen,


- Доброе утро, Агент Пи!

Сообщение отредактировал Nick_Rimer - Понедельник, 13 Апреля 2015, 22:42
madsenДата: Вторник, 14 Апреля 2015, 11:07 | Сообщение # 3
постоянный участник
Сейчас нет на сайте
Есть какие-нибудь реально дельные уроки по массивам?

ScirrA ConstrucT
-------------------------
Unity 3D
-------------------------
Crytek Engine 3
-------------------------
Unreal Development Kit
Nick_RimerДата: Вторник, 14 Апреля 2015, 18:23 | Сообщение # 4
заслуженный участник
Сейчас нет на сайте
madsen, я пытался сделать.. но потом мне стало лень smile если только очень сильно попросишь..

- Доброе утро, Агент Пи!
madsenДата: Вторник, 14 Апреля 2015, 22:39 | Сообщение # 5
постоянный участник
Сейчас нет на сайте
Хотелось бы все-таки увидеть данные уроки. smile
В целом, это особо не горит, но вот думаю без массивов я далеко не убегу.
happy


ScirrA ConstrucT
-------------------------
Unity 3D
-------------------------
Crytek Engine 3
-------------------------
Unreal Development Kit
AnthemДата: Среда, 15 Апреля 2015, 09:47 | Сообщение # 6
Д'Артаньян
Сейчас нет на сайте
madsen, надеюсь Nick_Rimer меня простит. Вот его теоретический урок, написанный для меня. Думаю, ты тоже найдешь здесь много полезного для себя
Цитата Nick_Rimer ()
Можешь себе представить комод. В комоде есть ящики, допустим, их будет 12, все они пронумерованы подряд от 1 до 12. И вот в каждом ящике лежит какой-то товар. Чтобы взять нужный товар ты должен подойти к комоду и открыть ящик с нужным номером.

Точно такой же подход используется к управлению массивами. Например, есть массив Goods, он состоит из 12-ти элементов. В каждом элементе записано название товара. Чтобы взять третий товар, мы обращаемся к нему примерно так: Goods(3). Нужен пятый? Тогда Goods(5). Нужен какой-то случайный товар? Пишем вместо числа конструкцию, которая выдаст случайное число от 1 до 12: random(12)+1. Получается, что, написав примерно такую запись: Goods(random(12)+1), мы получим один из 12-ти случайных товаров.
Почему я говорю "примерно так", потому что чисто техническая реализация процесса может немного отличаться в зависимости от синтаксиса разных языков программирования (ЯП), но это не меняет сути. Так же в некоторых ЯП нумерация массива может начинаться не с 1, а с 0. Тогда первым элементом будет элемент с номером 0, а последним - с номером 11, да и рандом тогда будет без "+1". Но это тонкости, и с этим всегда начинаются заморочки, прибавление единиц, вычитание единиц.. не думай пока об этом

Чем это удобно?
+ Не нужно создавать отдельную переменную под каждый товар. Это ладно 12. А если их 100? 1000? Переменных не напасёшься, устанешь их создавать. А в случае с массивом останется только просто поправить число входящих в него элементов (число ящиков в комоде).
+ Лёгкие операции с индексами - цифрами, которым применяются разные математические операции (в том числе и выбор случайного индекса) - это невероятно удобно при организации цикла, т.к. такой оптимизации на обычных переменных не достичь!
Минус, пожалуй, может заключаться лишь в том, что главное - это не запутаться в этой самой индексации, в циферках, т.е. не обращаться случайно не к тем элементам или вообще к несуществующему элементу.

Это мы с тобой разобрали одномерный массив. Я надеюсь, что объяснил понятно.

На практике же наравне с одномерными массивами ничуть не реже используются двумерные массивы. Их легко представить в виде матрицы, таблички, содержащей N строк и M столбцов. Ну или представить себе комод с ящиками, только каждый ящик содержит в себе ещё несколько ящиков. Таким образом, чтобы взять какой-то элемент из двумерного массива, мы должны обратиться сначала к определённой строке, а потом к номеру столбца в этой строке (или же наоборот, кому как нравится, кому как в конкретной ситуации удобнее). К двумерному массиву обращение идёт примерно такое: Goods(M,N) - элемент по M-тому столбцу и N-той строке.
Двумерный массив предлагает нам уже в некотором роде "табличку", которую мы можем использовать по своему усмотрению. Например, нам важен не только товар, как он называется, но так же и: его 1) цена, 2) количество товара на складе, 3,4,5...) любое другое количество параметров. Так поступим же вот так:

Пусть 1 столбец - название товара.
2 столбец - его цена
3 столбец - количество товара на складе

И наш массив будет заполнен примерно так:
Конфеты | 50 | 1000
Стулья | 300 | 12
Лопаты | 95 | 210
...

и так далее. А теперь вот что удобно. Нужна нам информация о конфетах? Читаем массив. Goods(1,1) - название, Goods(2,1) - цена, Goods(3,1) - остаток. А самое прелестное, что любые ЯП умеют организовывать циклы для совершения однотипных последовательных операций, которые уменьшают количество строк кода для обработки одних и тех же данных (нифига себе, если бы пришлось писать столько кода для каждого товара! а если бы, опять же, 1000???)
Но про циклы песня отдельная.. хотя они идут так тесно с массивами, что, изучая массивы, нельзя не изучить и циклы, чтобы жить было легче

Достоинства всё те же. Неудобства, пожалуй, тоже. Главное, не перепутать строки со столбцами и внимательно следить за индексами.

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

P.S. С массивами, как и с переменными, остаётся открытым вопрос, как данные туда попадут. Если в массиве должна быть какая-то сохранённая конкретная информация, надо её где-то хранить. Откуда-то читать, куда-то записывать. Можно, конечно, и в программе прописать, чтобы каждый раз создавалась конкретная информация, но обычно это "не комильфо".


Текстовый контент для вашей игры (бесплатно)
Сценарист, геймдизайнер для Вашей игры
Nick_RimerДата: Среда, 15 Апреля 2015, 22:02 | Сообщение # 7
заслуженный участник
Сейчас нет на сайте
Anthem, да.. припоминаю что-то такое smile конечно, я писал здесь весьма упрощённо.. уроком это назвать тяжело.
К тому же я писал для случая, когда нумерация массива начинается с единицы.
С2, например, юзает индексы с 0-базисом, т.е. 1й элемент имеет номер 0, 2й - номер 1 и т.д.

madsen, постараюсь как-нибудь найти время и сделать что-то подобное, раз прошло столько времени, а людям это всё ещё надо, не пропадать же зря моим знаниям.. а писать одно и тоже по сто раз на форуме я устал smile


- Доброе утро, Агент Пи!
madsenДата: Пятница, 17 Апреля 2015, 09:40 | Сообщение # 8
постоянный участник
Сейчас нет на сайте
Я представление о массивах имею, но вообще не знаю как их юзать в самой програмке.

ScirrA ConstrucT
-------------------------
Unity 3D
-------------------------
Crytek Engine 3
-------------------------
Unreal Development Kit
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг