不能在画布上移动正方形,现在正方形也不会画
Can't make square on canvas move, and now the square won't draw either
我正在尝试使用 WASD 键进行已经绘制的方形移动。
我不知道该怎么做,所以我查找了一些代码,大约 2 小时后想出了我自己的非工作代码。它不起作用,但至少它正在绘制我的正方形......或者曾经。
现在不是,我不知道为什么,这是我的JavaScript:
function initCanvas(){
var ctx = document.getElementById('my_canvas').getContext('2d');
ctx.addEventListener("keydown", move, true);
function move(event){
//W
if(event.keyCode == 87){
y = y + 20;
}
//A
else if(event.keyCode == 65){
x = x - 20;
}
//S
else if(event.keyCode == 83){
y = y + 20;
}
//D
else if(event.keyCode == 68){
x = x + 20;
}
}
var x = 0;
var y = 0;
ctx.fillStyle = "green";
ctx.fillRect(x + 20, y + 20, 20, 20);
}
window.addEventListener('load', function(event){
initCanvas();
});
和 HTML/CSS(整个页面):http://pastebin.com/wjXv5tdK它可能与事件侦听器有关,因为它似乎在没有它的情况下工作。
博士
所以我基本上希望在画布上绘制一个正方形,并让用户使用 WASD 键控制它。
侦听文档上的键盘事件,而不是上下文。
document.addEventListener("keydown",move,false);
以下是一些带注释的代码,可帮助您重新开始:
// create canvas related variables
var canvas=document.getElementById("canvas");
var ctx=canvas.getContext("2d");
var cw=canvas.width;
var ch=canvas.height;
// set canvas to be a tab stop (necessary to give it focus)
canvas.setAttribute('tabindex','0');
// set focus to the canvas
canvas.focus();
// create an x & y indicating where to draw the rect
var x=150;
var y=150;
// draw the rect for the first time
draw();
// listen for keydown events on the document
// the canvas does not trigger key events
document.addEventListener("keydown",handleKeydown,false);
// handle key events
function handleKeydown(e){
// if the canvas isn't focused,
// let some other element handle this key event
if(e.target.id!=='canvas'){return;}
// change x,y based on which key was down
switch(e.keyCode){
case 87: x+=20; break; // W
case 65: x-=20; break; // A
case 83: y+=20; break; // S
case 68: y-=20; break; // D
}
// redraw the canvas
draw();
}
// clear the canvas and redraw the rect in its new x,y position
function draw(){
ctx.clearRect(0,0,cw,ch);
ctx.fillRect(x,y,20,20);
}
body{ background-color: ivory; padding:10px; }
#canvas{border:1px solid red;}
<h4>Click in the canvas to have it respond to keys</h4>
<canvas id="canvas" width=300 height=300></canvas>
正方形不再绘制的原因是您尝试将事件侦听器附加到画布上下文,并且只能将侦听器附加到 DOM 对象(画布)。 因此,如果将语句更改为(例如):
var canvas = document.getElementById('my_canvas');
canvas.addEventListener("keydown", move, true);
并保留 ctx 语句,因为它们是画布将再次绘制的。 除非你真的需要一个画布,否则你最好使用 svg img。
相关文章:
- Canvas Html5绘图应用程序,移动画布会导致重大问题
- 正在SharePoint 2013母版页中添加JQuery移动文件
- 如何在android中使用phonegap将文件从一个文件夹移动/复制到另一个文件夹
- 如何使用phaser使html5游戏在移动设备浏览器上运行
- FabricJs-限制主对象内添加对象的移动区域
- 如何从画布上的某个移动事件中获取X和Y
- 触摸移动时切换到新元素
- 每当您在选择器内移动鼠标时,悬停功能就会重复
- 停止jQuery UI滑块移动超过给定值
- 谷歌地图API v3不适用于移动浏览器或PhoneGap
- 如何将chrome扩展功能移植到移动设备(特别是jquery和trello)
- JQuery移动动态分区页面
- XMLHttpRequest在移动设备上的chrome上不起作用
- 如何使bxslider仅在移动视图中处于活动状态
- css停止图像在滚动中移动
- 使用jquery在正方形中移动文本
- 代码将不会运行.clearInterval在正方形中移动标题
- 不能在画布上移动正方形,现在正方形也不会画
- 有没有办法用圆圈代替正方形来移动
- 如何使文本跟随这个正方形,因为它是被移动