【发布时间】:2015-04-28 05:58:49
【问题描述】:
好的,所以我有一个图像,我正在使用按键 (WASD) 在画布上移动。
问题在于,如果您查看动画(如果您想查看,可以在我的网站 maddogathecanadianunicorn.batcave.net/project5.html 上查看),它移动得太快了。不是动画本身,而是动作太快了。
有什么方法可以降低每秒移动的速度或其他什么?也许它与FPS有关?
我的代码在下面。
function initCanvas(){
var canvas = document.getElementById('my_canvas')
var ctx = canvas.getContext('2d');
//Variables
var cw = canvas.width;
var ch = canvas.height;
var x = 20;
var y = 20;
var width = 40;
var height = 40;
var srcx = 0;
var srcy = 0;
//----------------
//Char (Spritesheet soon)
//----------------
var char = new Image();
char.src = "spritesheet.png";
//
draw(); //Executes the Draw Function
//
//-------------
//WASD Controls
//-------------
document.addEventListener("keydown", move, false);
function move(event){
//---
//W
//---
if(event.keyCode == 87){ //w
//ANIMATOR
srcy = 0;
srcx+=33;
if(srcx === 66){
srcx = 0;
}
//CHAR MOVER
if(y >= 20){
y-=20;
}
/* This loops it back around.
else if(y < 20){
y = 460;
}
*/
}
//---
//A
//---
if(event.keyCode == 65){ //a
//Animator
srcy = 66;
srcx+=33;
if(srcx === 66){
srcx = 0;
}
//CHAR MOVER
if(x >= 20){
x-=20;
}
/*Loops it back around
else if(x < 20){
x = 460;
}
*/
}
//---
//S
//---
if(event.keyCode == 83){ //s
//Animator
srcy = 33;
srcx+=33;
if(srcx === 66){
srcx = 0;
}
//CHAR MOVER
if(y+height <= 490){
y+=20;
}
/*Loops Char back...
else if(y+height > 460){
y = 0;
}
*/
}
//---
//D
//---
if(event.keyCode == 68){ //d
//Animator
srcy = 100;
srcx+=33;
if(srcx === 66){
srcx = 0;
}
//Mover
if(x+width <= 490){
x+=20;
}
/*Loops Char Back
else if(x+width > 490){
x = 0;
}
*/
}
draw();
//Idea for sprite: If press right it goes right and loads a gif while going right...
//And when "keyup" or keyrelease or whatever, it stops the animation
//Or loads a neutral one facing the same direction.
}
//--------------
//Draw Function
//--------------
function draw(){
//Clears rect for animation purposes
ctx.clearRect(0, 0, cw, ch);
ctx.fillStyle = "green";
//ctx.fillRect(x, y, 20, 20);
ctx.drawImage(char, srcx, srcy, 32, 32, x, y, width, height);
}
}
//------------
//Game Loop
//------------
window.addEventListener('load', function(event){
initCanvas();
});
【问题讨论】:
-
嗨!欢迎来到 StackOverflow! :) 你能具体说明你所指的代码行吗?您不必发布所有内容。 ://
-
您好,谢谢!问题是我不确定它是什么。如果它与运动本身有关,则在 //WASD CONTROLS 下。问题是我不确定我是否可以降低那里的移动速度,或者我是否必须添加某种 FPS 之类的东西。
-
在您的
move函数中,您将x/y更改为 20。只需降低该值即可。 -
到达那里...虽然这会降低方块的移动速度,但不会减慢动画的速度。幸运的是,这将其归结为一种可能性,即 srcx+=33;线。我需要想办法让那件事变得更慢或其他什么。
标签: javascript html animation canvas