2015-11-08 2 views
2

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

var playerOneMass = 36; 
var player1X = (canvas.width/2) + 50; 
var player = new Player({ 
    x: player1X, 
    y: canvas.height/2, 
    radius: playerOneMass, 
    speed: { 
     x: 5, 
     y: 5 
    }, 
    name: "player 1", 
    dir: null 
}); 
var playerTwoMass = 36; 
var player2X = (canvas.width/2) - 50; 
var player2 = new Player({ 
    x: player2X, 
    y: canvas.height/2, 
    radius: playerTwoMass, 
    speed: { 
     x: 5, 
     y: 5 
    }, 
    name: "player 2", 
    dir: null 
}); 
+0

"Я пытался несколько различных способов, но ничего не работает." - Что вы пробовали и каким образом это не сработало? – Amadan

ответ

4

Приведем некоторые математические, чтобы помочь нам немного. Когда вы хотите, чтобы что-то уменьшилось по мере роста другого, лучшим вариантом, который я нашел, является использование отношения inversely proportional. Это позволит вам по-разному смотреть поменьше и меньше.

new_speed = scalar * start_speed/current_mass 

Когда придумывают скаляра, я обнаружил, что лучше всего методом проб и ошибок, пока он не выглядит так, как вы хотите.


Ниже приведен пример уравнения в действии с использованием Two.js.

var two = new Two({width:320, height:180}).appendTo(document.getElementById("mytwo")), 
 
    rect = two.makeRectangle(100, 100, 10, 10), 
 
    circ = two.makeCircle(5, 100, 5), 
 
    mass = 10, 
 
    rspeed = Math.PI/10, 
 
    mspeed = 14, 
 
    scalar = 10; 
 
// Make it look pretty! 
 
rect.fill = "rgb(100,255,100)"; 
 
circ.fill = "rgb(100,100,255)"; 
 
// Looping... 
 
two.bind('update', function(fc) { 
 
    // Prevents from growing indefinetely 
 
    if(mass > 150) return; 
 
    mass += 1.5; 
 
    rect.scale += .1; 
 
    circ.scale += .1; 
 
    rect.rotation += scalar * rspeed/mass; 
 
    circ.translation.addSelf(new Two.Vector(
 
     scalar * mspeed/mass, 0)); 
 
}).play();
<script src="https://rawgit.com/jonobr1/two.js/master/build/two.min.js"></script> 
 

 
<div id="mytwo"><div></div></div>

+0

Э-э, я не понимаю. Как я могу реализовать это для своей игры? – Raiden

+0

Когда вы добавляете скорость в текущую позицию объекта в своей функции обновления, примените формулу :) – tkellehe

+0

А, вот идем. Благодарю. Скаляр 50 работает очень хорошо. – Raiden

Смежные вопросы