Как стать автором
Обновить

Комментарии 28

НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
Так получилось, что статья писалась на скорую руку, проверить толком не успел. Буду рад, если в личку напишите «те самых» опечатки.

Насчет Update и Draw — расскажу в других статьях, уверен, эта не последняя. Хотелось бы их отдельно рассмотреть.
НЛО прилетело и опубликовало эту надпись здесь
Но если у Вас у самого неплохой опыт, почему не делитесь? :)
Главное статья интересная. Всем свойственно очепятывацца, ничего страшного в этом нет.
НЛО прилетело и опубликовало эту надпись здесь
Статья хорошая и довольно понятная, но, имхо, большие куски кода читать не очень комфортно — приходится проматывать, чтобы прочитать сначала весь остальной текст, вникнуть в него, а потом уже разобраться с примерами.

Возможно, удобнее было бы просто вставлять ссылки на git, например.
Самый оптимальный вариант — кидать маленькие кусочки кода, где требуется объяснение, но уходит больше времени. Как я писал ранее, на статью было мало времени, поэтому привел много кода. Больше так, конечно, делать не буду :-)
Да-да, я что-то в этом духе и имел в виду.
Можно даже по кусочкам не весь код выкладывать, а только ключевые моменты — все остальное просто выложить в архиве.

В любом случае, продолжайте писать. Это актуально :).
Ай-ай-ай...!
if ((dx * dx) + (dy * dy) < radii * radii)
{
return true;
}
else
{
return false;
}
Ну простите уж :-)
Что вы хотели от приложения, написанного за один вечер? Откровений с подвесельной коллизией? :-)
Ну ладно, это еще детская ошибка. С кем не бывает?
Но это что?

public float Distance(float x1, float y1, float x2, float y2)
{
return (float)Math.Sqrt((float)Math.Pow(x2 - x1, 2) + (float)Math.Pow(y2 - y1, 2));
}


И используется только тут:

float Lenght = (float)(5000f * power) / (float)Math.Pow((float)Distance(body1X, body1Y, body2X, body2Y), 2.0f);

Т.е. Вы сначала берете корень из числа, а потом еще и в квадрат его возводите…
Код вобще нужно с самого начала стараться писать правильно;)
Поясни, в чем минус?
Более красивый код:
return ((Math.Pow(dx, 2)) + (Math.Pow(dy, 2)) < Math.Pow(radii, 2));
Никогда так не делайте. Math.Pow вычисляет сумму ряда, тогда как dx*dx — это самое простое умножение. Разница в скорости выполнения может достигать двух порядков.
Так что нужно просто
return dx * dx + dy * dy < radii * radii;
И да, если кто будет вопрошать — я специально проверял сборку с оптимизацией и отключенным отладчиком — разница в скорости примерно в 50 раз.
Имелось в виду совсем не это.
Заменять надо на
return (dx * dx) + (dy * dy) < radii * radii;
Русская VS — это вынос мозга ))).
P.S.: Визуализация весьма красивая, outter glow у текстур можно принять за шейдерный эффект )
И не говорите, сколько не пытался сменить язык, ничего не получилось (или просто было лень).
Это лечится только переустановкой студии
Можно установить втроую студию, на другом языке (на самом деле поставится не вторая студия, а только язык), и потом в настройках студии можно будет переключать язык.
Прикольно, не знал.
Очень грязная статья. Много проблем со стилем кода, программирования и языка. Есдинственное, что оправдывает статью и программу — тот факт, что, по-видимому, «это» работает.

В именах переменных используется то подчёркивание, то слитное написание, то вообще одни заглавные буквами.
Catcher — это тот, кто ловит, а не тот, кого ловят.
Explosion пишется через одну s.
accumulator пишется через U.

Очень неправильно делать обноления в Update основываясь только на самом факте его вызова. Я не знал, что кто-то до сих пор совершает такие ошибки и, как раньше, пишет игры, в которые невозможно играть на современных компьютерах из-за большой скорости. Обязательно надо использовать время.

Тип ноты должен быть Enum'ом

Вместо Distance надо использовать Vector2.Distance(), Vector2.DistanceSquared(), Vector2.Length(), Vector2.LengthSquared()

>// выполняем всякие условия, которые возникают при коллизии
наверное, всё-таки, выполняем не условия, а что-то ещё?

>MediaLibrary mediaLibrary; // Грубо говоря «проигрыватель»
И где мы его использует?

>public class Constanst
Буэээ…

>Mouse.GetState().
Как-то некрасиво дёргать метод получения состояния мышки по нескольку раз за строчку.

>((int)StartColor.R)
Зачему приводить?

>else if (random.Next(10000) > 9950)
Зачем в каждом условии генерировать новое случайное число? Тем более, это сильно меняет вероятности выпадения типов.

>public int type;
Открытые поля в классе? Ну-ну…

P.S. Искренне удивлён, что автор использовал углы в радианах, а не в грудусах. Хоть что-то сделано правильно =)
Посему предлагаю вам, написать свою статью, о том, какую правильно выбрать стилистику кода, как правильно программировать, как правильно называть переменные и как правильно заваривать бутерброд. Если честно, то комментарий ваш провокационного характера, ничего информативного он не несет. Куда правильнее указать мне на ошибки и их решения, чем тыкать в то, что статья «грязная».
>Если честно, то комментарий ваш провокационного характера, ничего информативного он не несет. Куда правильнее указать мне на ошибки и их решения

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

Или, может, я не понял Вашей великой идеи, и на самом деле Вы хотели, чтобы на разных компьютерах игра шла с разной скоростью? А когда Вы писали, «random.Next(10000) > 9950», Вы, наверное, вовсе и не задумывали вероятность 0.5%, как мне, дураку показалось? А Enum'ы, наверное, порождение дьявола и использовать их неправославно, как и и встроенные методы класса Vector2?
Давайте посмотрим более объективно.

Привожу вашу же цитату:

В именах переменных используется то подчёркивание, то слитное написание, то вообще одни заглавные буквами.
Catcher — это тот, кто ловит, а не тот, кого ловят.
Explosion пишется через одну s.
accumulator пишется через U.


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

Если бы вы были более внимательнее, то нашли бы то, что тут используются контроллеры, заместо нужного и правильного GameComponent. Для реализации частиц нужно использовать пулы, а музыкальный спектр состоит из 256 составляющих, а не из 128, как я привел в статье.

Что-то скудный набор «минусов» вы выбрали.
Удачи Вам в жизни =)
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории