Войти
ПрограммированиеФорумОбщее

Детские вопросы по Unity ( TextMeshPro считывает из txt кракозябры ) (9 стр)

Страницы: 16 7 8 9 10 11 Следующая »
#120
2:57, 5 янв. 2019

endeavour_pr
> каждый кодер был взаимозаменяемым элементом системы
так это правильно, это уровень качества программы , если такое можно добится .. увы кодеры пишут только гавнокод, причем недокументируемый .. поэтому корпорациям все же правильнее работать с программистами


#121
3:11, 5 янв. 2019

Jeaniro
> сначала делаем для каждой комнаты структуру со ссылками на соседние комнаты
dayllenger описал как это делается по взрослому .. вообще, это классика хранения графа .. разве что не нужно сейчас использовать struct, все используем class .. пишите кодтаким оброзом, и тогда не появится у вас таких классов как room1, room2 .. всегда будет room, но инициализировать граф надо будет из структуры .. например, скачайте себе yEd Editor сделайте там граф , запишите в формате tgf и попробуйте написать функцию, которая создает объекты Room по этому графу .. появится реальный код , а не игрушечный который обсуждали до этого

#122
3:20, 5 янв. 2019

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

#123
3:22, 5 янв. 2019

как только из кода уйдут данные о комнатах, сразу код станет реальным

#124
(Правка: 3:24) 3:24, 5 янв. 2019
+ Показать
+ Показать
#125
(Правка: 12:16) 12:05, 5 янв. 2019

endeavour_pr
> Чет не врубаюсь если опыта нет в кодинге что можно прокачать на консольной
> игре.Типа все неизвестно делай что хочешь и как хочешь.

На практическом примере гораздо легче осваивать что-то новое. А то что неизвестно - это ж крутой челлендж) Вот не знаю я пока как эти долбаные комнаты нормально реализовать, но я помучаюсь и узнаю. А заодно и много чего другого.


endeavour_pr
> Мне бы было скучно и я бы забил, шизофрения какая то писать консоль которая с
> тобой общается текстом ))) и представлять там целый мир который визуализируется
> только текстом.

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

endeavour_pr
> Мож лучше юнити возьмешь ?

Я понемногу и его ковыряю, мне он как минимум для FMOD\Wwise нужен. Но там многое иначе, чем в обычном шарпе. Лучше сперва базу освоить.

А вообще вот мой идеал :

+ Показать

Понятно что для этого мне уже потребуется юнити.

#126
12:13, 5 янв. 2019

tac
> dayllenger описал как это делается по взрослому ..

Так я и пытаюсь узнать, правильно ли я понял его описание.

tac
> вообще, это классика хранения графа .. разве что не нужно сейчас использовать
> struct, все используем class .. пишите кодтаким оброзом, и тогда не появится у
> вас таких классов как room1, room2 .. всегда будет room, но инициализировать
> граф надо будет из структуры ..

Я почитаю\посмотрю про графы.
Но вообще мне же нужны не только комната-переход. Почти в каждой сцене по задумке должны быть какие-то уникальные взаимодействия. Поиск предметов, применение, кузнец\торговец, ловушка, потайной ход, сундук, диалог и.т.д.

#127
12:51, 5 янв. 2019
Понятно что для этого мне уже потребуется юнити.

Учитывая, что ты работаешь в "обычном шарпе", лучше посмотреть в сторону MonoGame. Это будет проще и ближе.
#128
13:32, 5 янв. 2019

Jeaniro
> Но вообще мне же нужны не только комната-переход. Почти в каждой сцене по
> задумке должны быть какие-то уникальные взаимодействия. Поиск предметов
вообще то ты знаешь где меня найти :)

#129
13:33, 5 янв. 2019

endeavour_pr
все давно знают, что в архитектуре я бог, не завидуй

#130
18:01, 5 янв. 2019

Jeaniro
> Но вообще мне же нужны не только комната-переход.
Ты сам придумал эти сущности и тебе самому с этим жить.
В движках подобный базовый функционал либо реализован либо есть мануалы или туторы какими способами его реализовать.
Сохраняй данные о комнате в формате INI файла к примеру, можно будет написать также генератор комнат который сам сгенерит кучу инишек рандомизируя нужные параметры.
типа
[room]
name=first
connect=second,third

[door]
name=door1
room=first
to_room=second

;и прочую фигню в таком формате, а потом загружаешь все сразу или частями перед переходом

#131
(Правка: 20:31) 20:30, 5 янв. 2019

Jeaniro
> почему ActionResult структура, а не класс? я слышал что там есть тонкости с
> работой с памятью - это продиктовано только этим?
а я потом бросал код, где ActionResult это класс. По-сути да, продиковтано только токностями работы с паматью. Наример, в то время кода ActionResult был структурой, его нужно было передавать как "ref".(без ref, при вызове, C# сделает копию ActionResult, и все изменения, которые комната будет вносить в Result, будут сделаны в эту копию). А после смены на класс, этого уже делать не нужно будет.

Jeaniro
> опять же - вижу массив string[] action, но не понимаю откуда он берет значения,
> из чего он состоит?
> В коде вроде нигде ничего в массив не добавляется. Зато он сразу идет на
> свитчкейс - значит по индексу [0] уже что-то лежит?
вот от сюда:

 string action = Console.ReadLine(); // запрос
 action = action.ToLower();
 act = action.Split(' ');
1) читаем строку с клавиатуры
2) переводим всё в нижний регистр
3) делим строку на слова, разделённые пробелом. И записываем всё в массив.
например "take sword"
станет массивом: ["take","sword"]
такой разбор на слова нужен... почти любой команде (кроме "help" и "quit")
по-этому, чтобы не дублировать один и тот же код внутри каждого Action(), он делается до вызова Action()
а в сам метод передаётся уже распарсенный массив.

это упрощает код Action-а, он может смело переходить в switch...case() ! (сразу к делу!)

Jeaniro

 public override bool Action(string[] action, GameState state, ref ActionResult result)
> - вроде и понимаю - override метода асбтрактного класса, и что принимает
> понимаю, но общая картинка ускользает)
тебе нужно посмотреть в тело основого метода.
ты видишь, что он оперрирует объектом типа "Scene"
он НЕ оперирует типом Scene1 , Scene2 ... SceneX  - нет. Он только оперрирует
  Scene current
(конкретными типами Scene1 , Scene2 ... SceneX оперирует только метод LoadScene, но игрой он не заведует).

Но при этом, то что основной код оперирует всего одним классом, не мешает использовать методы и реализации других классов. Благодаря наследованию и абстракции )
Архитектура очень простая:
есть Сцена, в ней можно
- Action() - делать некие действия
- Look() - оглядеться
- PrintHelp() - получить справку об особых действия в неё
Всё. основываясь только этими вещами написано основной код. И о конкрекетной реализации, отдельно взятой сцены он не заботится.
Не побоюсь этого слова - полное абстрагирование от деталей реализии сцен.

Ну а с точки зрения языка, конкретные реализации, организованы с помощью наследования (Scene1 :Scene, Scene2: Scene... SceneX .. Scene)
где каждый класс реализует свой Action(). ("override" - указывает компилятору, что этот Action в Scene1, нужно вызывать в том случае, если Scene1 используется не на прямую, а через предка, как класс Scene)

#132
(Правка: 3:06) 0:47, 6 янв. 2019

skalogryz
Большое спасибо за разбор, несколько раз прошагал код, теперь понятно почти все. И самое главное - я вроде понял принцип. Попробую на его основе сделать что-то свое.

#133
(Правка: 19 янв. 2019, 2:26) 23:56, 18 янв. 2019

Делаю сейв\лоад.
Раньше все писалось просто в txt - работало нормально, но громоздко - каждый массив приходилось разбивать на элементы, записывать в один стринг, потом обратно.

Короче решил я переделать, теперь уже с сериализацией в xml.

И вот в чем проблема - весь Player без проблем сериализуется ( там одни свойства и нестатический
список инвентаря ), но мне нужно еще сохранить статические словари из общего класса Scene
( например isItemAvailable, isDoorOpened - в них хранятся данные о предметах в комнате чтоб не обнулялись при повторном заходе ) - а их ведь просто так не сериализуешь, насколько я понимаю.

Сейчас вот смотрю на ISerializable - с помощью него можно как-то сериализовать статический член?


UPD : хм, попробовал словари сделать нестатическими и запихнул их в класс-сигнлтон, чтоб никто не добрался. Теперь мне пишут что Dictionary реализует интерфейс IDictionary и поэтому ни хрена не сериализуется.

Ну дык, вроде все словари реализуют его, это что - вообще словари нельзя сохранить через XmlSerialiazer?

Q: Why can't I serialize hashtables?

A: The XmlSerializer cannot process classes implementing the IDictionary interface. This was partly due to schedule constraints and partly due to the fact that a hashtable does not have a counterpart in the XSD type system. The only solution is to implement a custom hashtable that does not implement the IDictionary interface.

Придется, что-ли, отдельно их в текст записывать. Тупо конечно - один xml для игрока и txt для состояния комнат.

#134
5:08, 19 янв. 2019

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

Страницы: 16 7 8 9 10 11 Следующая »
ПрограммированиеФорумОбщее