Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 11.12.2014, 12:13
60reg вне форума Посмотреть профиль Отправить личное сообщение для 60reg Найти все сообщения от 60reg
  № 1  
Ответить с цитированием
60reg
 
Аватар для 60reg

Регистрация: Aug 2014
Сообщений: 45
По умолчанию Проблема с levelBar «прогрессбар»

Доброе утро. Пытаюсь сделать прогресс бар для опыта в игре, с каждыи новым уровнем прогресс бар начинается с начало. Но у меня так не выходит прогресс бар он всегда больше чем 322px. вот сам код , подскажите....

Код AS1/AS2:
var maxBarWidth:Number =322;// максимальная длина прогресс бара
				var expAtCurLevel:int = experience - levels[curLevel];
               var expTillNextLevel:int = levels[curLevel + 1] - levels[curLevel];
			  var realWidth:Number = maxBarWidth - (expAtCurLevel / expTillNextLevel);
 
				levelBar.width = realWidth;
				//levelBar.width = 322 / (expTillNextLevel - expAtCurLevel) * (experience - expAtCurLevel);
               explvl.text = String(curLevel);

Старый 11.12.2014, 12:45
samana вне форума Посмотреть профиль Отправить личное сообщение для samana Найти все сообщения от samana
  № 2  
Ответить с цитированием
samana
 
Аватар для samana

блогер
Регистрация: Mar 2008
Адрес: Днепропетровск
Сообщений: 1,783
Записей в блоге: 3
По-идее вам не нужны все эти расчёты. Так как
Цитата:
с каждым новым уровнем прогресс бар начинается с начало
вам достаточно просто
Код AS3:
levelBar.width = experience*(maxBarWidth / "максимальное значение опыта");
ps.максимальное значение опыта - значение, которое нужно для перехода на следующий уровень.

Старый 11.12.2014, 12:55
60reg вне форума Посмотреть профиль Отправить личное сообщение для 60reg Найти все сообщения от 60reg
  № 3  
Ответить с цитированием
60reg
 
Аватар для 60reg

Регистрация: Aug 2014
Сообщений: 45
вот сам массив с опытом
Код AS1/AS2:
                const levels:Array = [10,30,100,200,400,700,1200,2000,3900,4900,6500,9100,12500,17100,25400,152000,201200];
, то есть макс.значение опыта это levels ?

Старый 11.12.2014, 15:14
samana вне форума Посмотреть профиль Отправить личное сообщение для samana Найти все сообщения от samana
  № 4  
Ответить с цитированием
samana
 
Аватар для samana

блогер
Регистрация: Mar 2008
Адрес: Днепропетровск
Сообщений: 1,783
Записей в блоге: 3
Ага, у вас вот так, значит попробуйте этот вариант
Код AS3:
// не забудьте что в начале у вас нет опыта, первый элемент должен быть = 0
var levels:Array = [0, 10, 30, 100, 200, 400, 700, 1200, 2000, 3900, 4900, 6500, 9100, 12500, 17100, 25400, 152000, 201200];
 
//текущий уровень персонажа
var exp:Number = mouseX * 5;//просто число для проверки
 
//узнать опыт для следующего уровня (100,200...4900)
var nextLevel:int;
//узнать начальный опыт текущего уровня (100,200...4900)
var currenLevel:int;
 
// этот цикл просто для того, чтобы узнать текущий и следующий уровень, если вы нигде не фиксируете это
for (var i:int = 1; i < levels.length-1; i++) 
{
	if (levels[i]>exp) 
	{
		nextLevel = levels[i];
		currenLevel = levels[i - 1];
		break;
	}
}
//разница между следующим уровнем и текущим.
//например сейчас у вас второй уровень = 10 (второй элемент в массиве),
//следующий уровень будет = 30,
//значит 30-10=20
var levelsDiff:int = nextLevel - currenLevel;
 
//вычисляем ширину левелБар
//берём текущий опыт и отнимаем от него опыт текущего уровня,
//затем умножаем это на ширину левелБар делённую на разницу между текущим и следующим уровнем.
levelBar.width = (exp-currenLevel) * (322/levelsDiff);
 
trace("-------------------------");
trace("текущий уровень", currenLevel);
trace("следующий уровень", nextLevel);
trace("текущий опыт", exp);
trace("ширина levelBar", levelBar.width);
trace("-------------------------");

Старый 12.12.2014, 19:00
60reg вне форума Посмотреть профиль Отправить личное сообщение для 60reg Найти все сообщения от 60reg
  № 5  
Ответить с цитированием
60reg
 
Аватар для 60reg

Регистрация: Aug 2014
Сообщений: 45
что-то я так и не понял.... вот мой код, можно пример на нем?
Код AS1/AS2:
function onComplete(e:Event):void {
				var xml:XML = new XML(loader.data);
				exp.text = String(xml.user.experience);
 
				xml = new XML(e.target.data);
                const levels:Array = [10,30,100,200,400,700,1200,2000,3900,4900,6500,9100,12500,17100,25400,152000,201200];
				var experience:int = xml.user.experience;
				var curLevel:int = 1;
				var getRealLevel:Function = function() : int
				{
				  for (var i:int = 0; i < levels.length; ++i)
				  {
				    var data:int = levels[i];
				    if (data > experience) return i;
				  }
				  return levels.length
 
				};
				var realLevel:int = getRealLevel();
				if (curLevel != realLevel) curLevel = realLevel; // меняем уровень
								explvl.text = String(xml.user.experience);
 
				//trace(curLevel);
 
 
 
			}

Старый 12.12.2014, 19:11
samana вне форума Посмотреть профиль Отправить личное сообщение для samana Найти все сообщения от samana
  № 6  
Ответить с цитированием
samana
 
Аватар для samana

блогер
Регистрация: Mar 2008
Адрес: Днепропетровск
Сообщений: 1,783
Записей в блоге: 3
Как-то так (копипастил)
Код AS3:
function onComplete(e:Event):void
{
	var xml:XML = new XML(loader.data);
	exp.text = String(xml.user.experience);
 
	xml = new XML(e.target.data);
	// [0, ... . . 
	const levels:Array = [0,10, 30, 100, 200, 400, 700, 1200, 2000, 3900, 4900, 6500, 9100, 12500, 17100, 25400, 152000, 201200];
	var experience:int = xml.user.experience;
 
	var nextLevel:int;
	var currenLevel:int;
 
	for (var i:int = 1; i < levels.length-1; i++) 
	{
		if (levels[i]>experience) 
		{
			nextLevel = levels[i];
			currenLevel = levels[i - 1];
			break;
		}
	}
	var levelsDiff:int = nextLevel - currenLevel;
	// изменение ширины в зависимости от текущего набранного опыта и уровня
	levelBar.width = (experience-currenLevel) * (322/levelsDiff);
 
	explvl.text = String(xml.user.experience);
 
}


Последний раз редактировалось samana; 12.12.2014 в 19:30.
Старый 12.12.2014, 19:25
60reg вне форума Посмотреть профиль Отправить личное сообщение для 60reg Найти все сообщения от 60reg
  № 7  
Ответить с цитированием
60reg
 
Аватар для 60reg

Регистрация: Aug 2014
Сообщений: 45
он у меня почему-то съезжает, .
и текущий уровень не показывает currenLevel

Старый 12.12.2014, 19:35
samana вне форума Посмотреть профиль Отправить личное сообщение для samana Найти все сообщения от samana
  № 8  
Ответить с цитированием
samana
 
Аватар для samana

блогер
Регистрация: Mar 2008
Адрес: Днепропетровск
Сообщений: 1,783
Записей в блоге: 3
Почему съезжает, даже не знаю, ведь я не манипулировал координатами левелБар-а, а лишь его шириной.
А что значит "текущий уровень не показывает"? Он ведь не показывается, это просто число.
В моём посту №4, вариант кода, который работает. Просто для его проверки, я назначил этот код на mouseMove, координаты мыши по "х" служили в роли набранного опыта. И водя мышкой я проверял работоспособность этого кода. Вы можете тоже отдельно протестировать тот код.

Старый 27.01.2015, 21:43
60reg вне форума Посмотреть профиль Отправить личное сообщение для 60reg Найти все сообщения от 60reg
  № 9  
Ответить с цитированием
60reg
 
Аватар для 60reg

Регистрация: Aug 2014
Сообщений: 45
Цитата:
Сообщение от samana Посмотреть сообщение
Как-то так (копипастил)
Код AS3:
function onComplete(e:Event):void
{
	var xml:XML = new XML(loader.data);
	exp.text = String(xml.user.experience);
 
	xml = new XML(e.target.data);
	// [0, ... . . 
	const levels:Array = [0,10, 30, 100, 200, 400, 700, 1200, 2000, 3900, 4900, 6500, 9100, 12500, 17100, 25400, 152000, 201200];
	var experience:int = xml.user.experience;
 
	var nextLevel:int;
	var currenLevel:int;
 
	for (var i:int = 1; i < levels.length-1; i++) 
	{
		if (levels[i]>experience) 
		{
			nextLevel = levels[i];
			currenLevel = levels[i - 1];
			break;
		}
	}
	var levelsDiff:int = nextLevel - currenLevel;
	// изменение ширины в зависимости от текущего набранного опыта и уровня
	levelBar.width = (experience-currenLevel) * (322/levelsDiff);
 
	explvl.text = String(xml.user.experience);
 
}
что-то я никак не могу понять.... как вывести уровень с этого кода...
Подскажите пожалуйста

Создать новую тему Ответ Часовой пояс GMT +4, время: 01:16.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 01:16.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.