【发布时间】:2018-03-22 03:11:48
【问题描述】:
我正在努力研究我想要开发的游戏的机制,但是我在这方面的编程方面没有太多经验。我已经使用 requestAnimationFrame() 用 A 键和 D 键使圆圈左右平滑移动,但是我完全不知道让圆圈“跳跃”的最佳方法是什么。
我希望球能够在按下W时向上移动,直到达到一定的高度,然后开始以一定的速度落到地上。我还想保留球在跳跃时左右移动的能力。我不完全确定如何解决这个问题,因为我对请求动画帧()几乎没有经验,我尝试取消当前动画帧并在跳转函数中调用一个新帧,但这似乎不起作用全部。
到目前为止,这是我的代码:
var canvas,
ctx,
westX = 300,
westY = 400,
velX = 0,
velY = 0,
speed = 3,
jumpSpeed = 2,
friction = 0.98,
keys = [],
jumping = false;
window.onload = function(){
canvas = document.getElementById("gameCanvas");
ctx = canvas.getContext("2d");
drawLevel(); //intial level draw
}
function drawLevel() {
move();
ctx.clearRect(0,0,canvas.width, canvas.height);
ctx.fillStyle = "#c3c3d5";
ctx.fillRect(0,0,canvas.width,canvas.height);
ctx.fillStyle = "black";
ctx.beginPath();
ctx.arc(westX,westY,8,0,Math.PI*2,true);
ctx.fill();
if (!keys[87] && !keys[32])
requestAnimationFrame(drawLevel);
if (keys[87] || keys[32])
{
jump();
}
}
角色移动:
//moves character
function move()
{
//requestAnimationFrame(move);
if (keys[65]) { //if a is pressed
if (velX > -speed) {
velX--;
}
}
if (keys[68]) { //if d is pressed
if (velX < speed) {
velX++;
}
}
velX*= friction;
westX += velX;
//checks if character is at the edge
if (westX >= canvas.width-8)
{
westX = canvas.width-8;
} else if (westX <= 8)
{
westX = 8;
}
}
尝试跳转功能:
function jump()
{
requestAnimationFrame(jump)
if (velY > -jumpSpeed) {
velY--;
}
velY*= friction;
westY += velY;
}
document.addEventListener("keydown", function(e) {
keys[e.keyCode] = true;
});
document.addEventListener("keyup", function(e) {
keys[e.keyCode] = false;
});
另外,这里有一个 codepen 链接来展示我到目前为止所做的工作: https://codepen.io/shanetorres/pen/OvRdjq?editors=1010
任何帮助或建议将不胜感激!
【问题讨论】:
标签: javascript html game-physics