如何在 JavaScript 中按箭头键来阻止移动角色时屏幕闪烁
How do I stop the screen flickering when moving my character by pressing the arrow keys in JavaScript?
有人可以帮助我解决问题吗?在重绘游戏角色之前,我已经设法清除了画布,但想知道如何阻止屏幕在 JavaScript 中角色移动时闪烁。谢谢你的帮助。非常感谢帮助。这是我的代码。
var avatarX = 0;
var avatarY = 267;
var avatarImage;
var counter = 1;
var XWIDTH = 0;
var WIDTH = 400;
var dx = 5;
var tt;
window.addEventListener('keydown', KeyDown);
function setUpGame() { //This is the function that is called from the html document.
var gameCanvas = document.getElementById("gameCanvas"); //Declare a new variable & assigns it the id of the CANVAS from the html document.
avatarImage = new Image(); //Declaring a new variable. This is so that we can store the image at a later date.
avatarImage.src = "img/avatar.png"; //Ditto from above.
gameCanvas.getContext("2d").drawImage(avatarImage, Math.random() * 100, avatarY);
var tt = setInterval(function(){counTer()},1000);
setInterval(handleTick, 25);
}
function KeyDown(evt) {
switch (evt.keyCode) {
case 39: /*Arrow to the right*/
if(avatarX + dx <WIDTH && avatarX + dx >XWIDTH) {
avatarX += dx;
gameCanvas.width = gameCanvas.width;
}
break;
case 37: /*Arrow to the left*/
if(avatarX - dx >XWIDTH) {
avatarX -= dx;
gameCanvas.width = gameCanvas.width;
}
break;
}
}
function counTer() {
if(counter == 60) {
clearInterval(tt);
} else {
counter++;
gameCanvas.width = 400;
gameCanvas.getContext("2d").font = "18px Iceland";
gameCanvas.getContext("2d").textBaseline = "top";
gameCanvas.getContext("2d").fillText("Seconds: " + counter, 5, 5);
}
}
function handleTick() {
gameCanvas.getContext("2d").drawImage(avatarImage, avatarX, avatarY);
}
一些观察:
-
在代码顶部创建一次上下文,而不是每次使用它时。
-
在代码顶部设置一次字体和 textBaseline,而不是每次使用它时。
-
仅在需要时清除画布(仅在handleTick中)。
在绘制 头像的同时绘制时钟计时器(节省 1 个画布清理)。
将加载函数附加到头像图像,以便您知道图像已准备好绘制图像
这是修改后的代码 - 它未经测试,因此您需要查看它;)
祝你的项目好运!
var avatarX = 0;
var avatarY = 267;
var avatarImage;
var counter = 1;
var XWIDTH = 0;
var WIDTH = 400;
var dx = 5;
var tt;
var gameCanvas;
var context;
window.addEventListener('keydown', KeyDown);
function setUpGame() { //This is the function that is called from the html document.
gameCanvas = document.getElementById("gameCanvas"); //Declare a new variable & assigns it the id of the CANVAS from the html document.
context=gameCanvas.getContext("2d");
context.font = "18px Iceland";
context.textBaseline = "top";
avatarImage = new Image(); //Declaring a new variable. This is so that we can store the image at a later date.
avatarImage.onload=function(){
// avatarImage is now fully loaded and ready to drawImage
context.drawImage(avatarImage, Math.random() * 100, avatarY);
// start the timer
tt = setInterval(function(){counTer()},1000);
setInterval(handleTick, 25);
}
avatarImage.src = "img/avatar.png"; //Ditto from above.
}
function KeyDown(evt) {
switch (evt.keyCode) {
case 39: /*Arrow to the right*/
if(avatarX + dx <WIDTH && avatarX + dx >XWIDTH) {
avatarX += dx;
}
break;
case 37: /*Arrow to the left*/
if(avatarX - dx >XWIDTH) {
avatarX -= dx;
}
break;
}
}
function counTer() {
if(counter == 60) {
clearInterval(tt);
} else {
counter++;
}
}
function handleTick() {
context.clearRect(0,0,canvas.width,canvas.height);
context.drawImage(avatarImage, avatarX, avatarY);
context.fillText("Seconds: " + counter, 5, 5);
}
相关文章:
- Canvas Html5绘图应用程序,移动画布会导致重大问题
- 正在SharePoint 2013母版页中添加JQuery移动文件
- 如何在android中使用phonegap将文件从一个文件夹移动/复制到另一个文件夹
- 如何使用phaser使html5游戏在移动设备浏览器上运行
- FabricJs-限制主对象内添加对象的移动区域
- 如何从画布上的某个移动事件中获取X和Y
- 触摸移动时切换到新元素
- 如何在 JavaScript 中按箭头键来阻止移动角色时屏幕闪烁
- 如何摆脱角色移动时绘制的图像痕迹
- 使用巴比伦.js的角色移动
- jQuery 移动 数据角色按钮已禁用
- jQuery Mobile - 如何在从一个数据角色页面移动到另一个数据角色页面时传递参数
- 统一移动带有触摸按钮的角色
- 如何暂时禁用角色移动MelonJS
- 按下按钮时移动角色/相机的功能
- 在等距地图上平滑的角色移动
- EaselJS(0.8.2.min及以上)-当角色移动时,移动JSON生成的精灵贴图XY
- 在画布游戏中使用键盘控制平滑的角色移动
- Enchant.js中的角色帧移动
- 如何让我的角色沿对角线移动