![]() |
|
||||||||||
|
|
|
|||||
|
Регистрация: Aug 2014
Сообщений: 45
|
Доброе утро. Пытаюсь сделать прогресс бар для опыта в игре, с каждыи новым уровнем прогресс бар начинается с начало. Но у меня так не выходит прогресс бар он всегда больше чем 322px. вот сам код , подскажите....
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); |
|
|||||
|
По-идее вам не нужны все эти расчёты. Так как
Цитата:
ps.максимальное значение опыта - значение, которое нужно для перехода на следующий уровень. |
|
|||||
|
Регистрация: Aug 2014
Сообщений: 45
|
вот сам массив с опытом
, то есть макс.значение опыта это levels ? |
|
|||||
|
Ага, у вас вот так, значит попробуйте этот вариант
// не забудьте что в начале у вас нет опыта, первый элемент должен быть = 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("-------------------------"); |
|
|||||
|
Регистрация: Aug 2014
Сообщений: 45
|
что-то я так и не понял.... вот мой код, можно пример на нем?
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); } |
|
|||||
|
Как-то так (копипастил)
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. |
|
|||||
|
Регистрация: Aug 2014
Сообщений: 45
|
Цитата:
Подскажите пожалуйста |
|
|||||
|
Регистрация: Aug 2014
Сообщений: 45
|
он у меня почему-то съезжает,
.и текущий уровень не показывает currenLevel |
|
|||||
|
Почему съезжает, даже не знаю, ведь я не манипулировал координатами левелБар-а, а лишь его шириной.
А что значит "текущий уровень не показывает"? Он ведь не показывается, это просто число. В моём посту №4, вариант кода, который работает. Просто для его проверки, я назначил этот код на mouseMove, координаты мыши по "х" служили в роли набранного опыта. И водя мышкой я проверял работоспособность этого кода. Вы можете тоже отдельно протестировать тот код. |
![]() |
![]() |
Часовой пояс GMT +4, время: 20:26. |
|
|
« Предыдущая тема | Следующая тема » |
|
|