Установите индикатор выполнения более 100% C # - PullRequest
2 голосов
/ 24 ноября 2011

это мой первый раз, используя ProgressBar в c #.Идея состоит в том, чтобы использовать ProgressBar в качестве индикатора здоровья в простой игре.Дело в том, что я думаю, что максимальное значение бара составляет 100%, но я хотел бы придать ему более высокое значение, например, скажем, 1000% или, не уверен, если это возможно, дать бару целочисленное значение вместо процента.

    progressBar1.Increment(100);

Здесь я инициализирую здоровье до 100 очков.Даже если я использую этот синтаксис:

    progressBar1.Increment(1000);

И вычитаю:

    progressBar1.Increment(-25);

Игрок теряет 1/4 жизни, как если бы у него было только 100 очков здоровья.Есть идеи, как я могу изменить максимальное значение бара?Заранее спасибо.

Ответы [ 8 ]

5 голосов
/ 24 ноября 2011

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

Вы можете сделать следующее:

progressBar1.Value = Math.min(100, actualHealth);

Затем вы обновляете переменную actualHealth, которая может превышать максимальный диапазон управления, равный 100. Затем вы можете изменить стиль элемента управления или другой визуальный элемент, чтобы показать, что игрок "накачан".

3 голосов
/ 24 ноября 2011

Вы еще не сказали, используете ли вы Windows Forms, WPF или что-то еще, но большинство индикаторов выполнения позволяют вам указать максимальное и минимальное значение. Звучит так, будто вы не хотите 1000 процентов , просто максимальное значение 1000.

См. ProgressBar.Maximum для примера Windows Forms.

Однако , я бы лично не использовал ProgressBar для этого в первую очередь. Это не прогресс как таковой - если вам просто нужен элемент управления, который рисует панель, найдите или напишите ее. Если пользователи увидят то, что выглядит как индикатор выполнения , но на самом деле это просто отслеживающий индикатор, показывающий текущее состояние и т. Д., Они вполне могут запутаться.

(Как заметил Тим, я бы также не использовал элемент управления в качестве источника правды о состоянии проигрывателя. Я, вероятно, не поместил бы код display в тот же класс, что и проигрыватель Код "модели" тоже есть, но это отдельное дело.)

2 голосов
/ 24 ноября 2011

Вы можете сделать это, например:

progressBar1.Maximum = 700;

И когда вы сделаете это:

progressBar1.Increment(-25);

, вы собираетесь сделать это

700-25

Но если вы хотите вычесть 25%, вы можете сделать это просто;

int a = 700;

prograssBar1.Maximum = a;

//When you'd like to subtract the 25% insert this:
progressBar1.Increment(-a/(100/25));
2 голосов
/ 24 ноября 2011

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

progressBar1.maximum = 7331;
1 голос
/ 07 апреля 2013

Слишком поздно для ответа, но, возможно, этот ответ кому-то пригодится. Этот код для неизвестных максимальных значений. Я имею в виду, что это может помочь вам, когда вы не знаете, сколько стоят ценности.

int percent = (int)(Convert.ToDouble(MaximumValue) > 0 ? (100 - (float)(Convert.ToDouble(Value) / Convert.ToDouble(MaximumValue)) * 100d) : 100);

Этот код предназначен для некоторых операций, таких как перетаскивание большого количества файлов в объект списка и т. Д. *

Надеюсь, это будет полезно и полезно для вас. Удачи:)

0 голосов
/ 24 ноября 2011

Сначала вы должны установить:

progressBar1.Maximum = 1000;
progressBar1.Minimum = 0;

Затем вы можете установить шаг или вручную определить его значение:

1) progressBar1.Step = 500;
2) progressBar1.Value = 500;

Если вы наберете 1), вам следует позвонить.PerformStep ()

private void button1_Click(object sender, EventArgs e)
{
    progressBar1.PerformStep();
}
0 голосов
/ 24 ноября 2011

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

Затем вы можете перевести дополнения / подстановки в процентные значения.

0 голосов
/ 24 ноября 2011

Я предполагаю, что вы хотите, чтобы здоровье было больше 100%, когда игрок получает какое-то повышение мощности, но это бонусное здоровье не отображается в строке здоровья, которая просто колеблется от 0 до 100%.

Не используйте свойство положения индикатора выполнения в качестве источника данных о здоровье игрока. Он ограничен диапазоном индикатора выполнения и поэтому просто не подходит для задачи.

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

Самое важное сообщение, и это действительно важно, это то, что вам нужно избавиться от привычки использовать визуальные элементы управления для сохранения состояния. Сохраните состояние в объекте модели и обновите представление на основе состояния в модели.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...