2015-12-22 3 views
0

Я работаю над текстовой RPG, и я просто закручивался, проверяя, как бы я сделал систему XP. Я пытался это сделать, когда XP игрока больше или равен требуемому XP, затем он вычитает их и выравнивает игрока. Я не могу понять, что я сделал неправильно. (Проблема у меня в том, что PlayerXP идет прямо мимо нужной XP)Почему логика не меняет мою ценность?

HTML

<!DOCTYPE html> 
<html> 
<head> 
    <link rel='stylesheet' href='style.css'/> 
    <script src='script.js'></script> 
</head> 
<body> 
    <script> 
    setInterval(function() { 
     Player.Stats.XP++; 
     document.getElementById('PlayerLevel').innerHTML = Player.Stats.Level; 
     document.getElementById('PlayerXP').innerHTML = Player.Stats.XP 
     document.getElementById('PlayerNeededXP').innerHTML = Player.Stats.NeededXP; 
    }, 1000); 
    </script> 
    <p>Level: <span id='PlayerLevel'></span></p> 
    <p>Experience: <span id='PlayerXP'></span> - <span id='PlayerNeededXP'></span></p> 
</body> 
</html> 

Javascript

NeededEXP = [ 
    /**/, 
    25, //1 
    50, //2 
    100, //3 
    200, //4 
    500, //5 
    1000, //6 
    1750, //7 
    3000, //8 
    5000, //9 
    10000 //10 

]; 

var Player = new Object(); 

Player.Stats = new Object(); 
Player.Stats.Level = 1; 
Player.Stats.XP = 0; 
Player.Stats.NeededXP = NeededEXP[Player.Stats.Level]; 

if(Player.Stats.XP >= Player.Stats.NeededXP) { 
    Player.Stats.XP = Player.Stats.NeededXP - Player.Stats.XP; 
    Player.Stats.Level++; 
} 
+7

Где в интервале является ли утверждение проверяется? – AtheistP3ace

+0

Вам нужно отредактировать этот заголовок (сколько людей начнет с этого пути) плюс я бы рекомендовал размещать «Нет фреймворков» в нижней части вашего вопроса, поэтому не пытайтесь захватить его с помощью несвязанного кода. – John

+3

Как указано в предыдущем комментарии, вы делаете 'if (Player.Stats.XP> = Player.Stats.NeededXP)' ровно один раз, а затем никогда больше не делаете этого. Вы должны запускать эту логику каждый раз, когда вы меняете XP. – apsillers

ответ

0

Вы должны проверить текущее XP значение на каждой итерации Тайм-аут:

NeededEXP = [ 
 
    25, //1 
 
    50, //2 
 
    100, //3 
 
    200, //4 
 
    500, //5 
 
    1000, //6 
 
    1750, //7 
 
    3000, //8 
 
    5000, //9 
 
    10000 //10 
 
]; 
 

 
var Player = {}; 
 
Player.Stats = {}; 
 
Player.Stats.Level = 1; 
 
Player.Stats.XP = 0; 
 
Player.Stats.NeededXP = NeededEXP[Player.Stats.Level]; 
 

 
setInterval(function() { 
 
    Player.Stats.XP++; 
 

 
    if (Player.Stats.XP >= Player.Stats.NeededXP) { 
 
    Player.Stats.XP -= Player.Stats.NeededXP; 
 
    Player.Stats.Level++; 
 
    Player.Stats.NeededXP = NeededEXP[Player.Stats.Level]; 
 
    } 
 

 
    document.getElementById('PlayerLevel').innerHTML = Player.Stats.Level; 
 
    document.getElementById('PlayerXP').innerHTML = Player.Stats.XP 
 
    document.getElementById('PlayerNeededXP').innerHTML = Player.Stats.NeededXP; 
 
}, 1000);
<p>Level: <span id='PlayerLevel'></span> 
 
</p> 
 
<p>Experience: <span id='PlayerXP'></span> - <span id='PlayerNeededXP'></span> 
 
</p>

+0

О, я не самый лучший в этом, но большое вам спасибо: D –

0

Вы вмешиваетесь и проверить паста сниппет в setInterval функциональный блок, как этот

setInterval(function() { 
    Player.Stats.XP++; 

    if(Player.Stats.XP >= Player.Stats.NeededXP) { 
    Player.Stats.XP = Player.Stats.NeededXP - Player.Stats.XP; 
    Player.Stats.Level++; 
    } 

    document.getElementById('PlayerLevel').innerHTML = Player.Stats.Level; 
    document.getElementById('PlayerXP').innerHTML = Player.Stats.XP 
    document.getElementById('PlayerNeededXP').innerHTML = Player.Stats.NeededXP; 
}, 1000);