Суть в том что BoolSpeed = true только когда вы нажали на кнопку, как только срабатывает событие "кнопка была отпущена" BoolSpeed становится равен false. Следовательно условие if ( BoolSpeed ) не выполнится и персонаж перестанет двигаться. Но он будет двигаться все время пока кнопка была нажата, но еще не поступило событие что ее отпустили. Очень важно вызывать ваши методы Walk/Idle на правильных событиях. Вы меняете значение переключателя, а то за что он отвечает срабатывает автоматически, вы лишь включаете и выключаете его (что уже готово).
WalloutDay: Кнопка может вызывать этот скрипт (что выше указан), и например вызывать ваш открытый метод (который вы напишите), он будет переводить флаг в _canMove = true когда кнопка нажата, и в _canMove = false когда кнопка была отжата (другой метод). Тема самым вы имитируете состояние зажатой кнопки, хотя на самом деле это не так.
В FixedUpdate нужно только
if ( this._canMove )
{
move = InputAxis;
this._rigigBody2d.velocity = new Vector2 (move * this.maxSpeed, this._rigigBody2d.velocity.y);
// логика повотора
}
_rigigBody2d - ваш GetComponent() который нужно получить в методе
Awaike()
{
this._rigigBody2d = GetComponent();
}
private bool _canMove; - это закрытое поле класса.
private Rigidbody2D _rigigBody2d;
От коллег слышал, что когда заказчик хочет чего то не стандартного, то возникают проблемы.
Но если вы разберетесь в SharePoint, а это почти все у кого Windows инфраструктура, то вам цены не будет в России.
Имел дело с SharePoint 2010, 2013 почти год, на позиции юниора.
1) Шарик не катит по интерфейсу, все будет однотипно. Сайт коллекция, веб, список, элемент списка с кучей полей, лукапами на другие списки. В базе будет храниться занимая несколько строчек по своей методике, т.к. количество ограничено. Все ID == GUID.
2) Много готового.
3) В интернет шарик не выставляют обычно, хотя гуглятся не сервер эдишен часто. (это те который бесплатно с Windows Server достаются).
4) Все уже вшито.
5) Шарик - это целая отдельная наука, очень тяжелый и сложный в деталях. Беретесь за него, значит нужно прочитать хотя бы одну книгу по SharePoint.
Да, наследовать нечего. Так пишут в книгах и на форумах. Но недавно Александр Шевчук на канале ITVDN сказал что интерфейсы в первую очередь наследуются а затем реализуются.
В C# нет множественного наследования, но если учесть предложение выше, то получается что есть :)
Книга Хейлсберг А., Торгерсен М., Вилтамут С., Голд П "Язык программирования C#. Классика Computers Science. 4-е изд".
Цитата "Интерфейс может не наследоваться ни от одного или наследоваться от одного или
более интерфейсов, именуемых его явными базовыми интерфейсами."
Цитата "ЭРИК ЛИППЕРТ
«Наследование» — неудачно выбранное слово для интерфейсов. Обычно под насле-
дованием от базового объекта подразумевают совместное использование реализации,
что для интерфейсов, очевидно, неверно."
Цитата "13.4.5. Наследование реализаций интерфейсов
Класс наследует все реализации интерфейсов, предоставляемые его базовыми
классами."
И массивы не индексируются.
Цитата "ЭРИК ЛИППЕРТ
... В языке C, когда используется myArray[x], это означает «начать с начала массива и обратиться к элементу, смещенному на x шагов. Таким образом, myArray[1] ссылается на второй элемент, потому что это то, что вы получили, когда начали с первого элемента и сделали один шаг.
На самом деле эти ссылки следовало бы называть сдвигами, а не индексами. Но поскольку поколения программистов во всем мире считают, что массивы «индексируются», начиная с нуля, мы придерживаемся этой терминологии."
Считаю это придирками, знать стоит, но заморачиваться нет.
Oxoron: Я тоже не сталкивался, но в книге читал, верю на слово :)
Но пример можно написать самому и смотреть на профайлеры VS.
Книга - "Оптимизация приложений на платформе .Net" www.ozon.ru/context/detail/id/23816449
Василий Захарчук: Чем быстрее вы попадаете в реальную команду и займетесь крупным проектом, тем лучше. Самопальные подделки это конечно хорошо, но на работе вас все равно будут переучиться под свою предметную область.
Толку не много, потоки будут конкурировать на запись в один массив. Кэш CPU будет постоянное не актуальным и промахи заставят постоянно обращаться к RAM,
Если вот они будут писать в свои массивы, а потому уже склеятся то лучше.
Или используйте ThreadPool, потоки для таких простых задач имеют превышающие расходы.
В делегате плохо то что все равно нужна ссылка на экземпляр Window, а если метод паблик, то и делегат ни к чему. Статический метод не нуждается в делегате.
e_danilchenko: А что тут думать, человек запоминает ответ "ключ подошел" и выдает ее вашей программе сразу без выхода в internet. Ключи больше не потребуются.
Самоудаление файла есть несколько способов, но они бесполезны когда пользователь знает об этом и делает копию или снимок виртуальной машины.
Код выше тестовый думаю, если нет то я бы разделил эту задачу на 3 этапа:
1) Чтение XML. Формирование ее отражения в памяти, для анализа уровней вложенности и т.д.
2) Формирование очереди команд на выполнение.
3) Выполнение команд, с логированием ошибок.
Так будет точно известно на каком этапе возникли ошибки, или быстро внести изменения, принять решение об остановке в случае определенных условий, добавить новые хотелки заказчика.
Выполнять можно поштучно (если нужен результат работы или возвращаемое значение) или выполнять пачками по 100 штук например.
Погуглил, XmlReader действительно все что советуют. Его достаточно что бы прочитать, но дальше ограничений ведь нет, сделайте удобную для вас структуру в памяти.
void FixedUpdate
{
if ( BoolSpeed )
{
move = InputAxis;
this._rigigBody2d.velocity = new Vector2 (move * this.maxSpeed, this._rigigBody2d.velocity.y);
// логика поворота Flip()
}
}
Суть в том что BoolSpeed = true только когда вы нажали на кнопку, как только срабатывает событие "кнопка была отпущена" BoolSpeed становится равен false. Следовательно условие if ( BoolSpeed ) не выполнится и персонаж перестанет двигаться. Но он будет двигаться все время пока кнопка была нажата, но еще не поступило событие что ее отпустили. Очень важно вызывать ваши методы Walk/Idle на правильных событиях. Вы меняете значение переключателя, а то за что он отвечает срабатывает автоматически, вы лишь включаете и выключаете его (что уже готово).