【发布时间】:2009-07-20 19:11:57
【问题描述】:
不完全确定我以最好的方式提出了这个问题,但这里是......
我一直在使用 HTML5 画布 API,并且已经在画布中绘制了一个形状并让它用箭头键移动。
然后我尝试将我的各种变量和函数移动到一个模板中,这样我就可以生成多个形状(最终将由不同的键控制)。
这就是我所拥有的:
function player(x, y, z, colour, speed){
this.lx = x;
this.ly = y;
this.speed = 10;
this.playerSize = z;
this.colour = colour;
}
playerOne = new player(100, 100, 10, "#F0F");
function persona(z, colour){
zone.fillStyle = colour;
offset = 0 - (z / 2);
zone.fillRect(offset, offset, z, z);
}
function move(x, y){
playerOne.lx = playerOne.lx + x;
playerOne.ly = playerOne.ly + y;
zone.clearRect(0, 0, 500, 500);
zone.save();
zone.translate(playerOne.lx, playerOne.ly);
persona(playerOne.playerSize, playerOne.colour);
zone.restore();
}
window.onkeydown = function() {
var direction = this.event.keyCode;
var s = playerOne.speed;
// Arrow Keys
if( direction == 38 && playerOne.ly >= 10){ // Up
move(0,-s);
}
if( direction == 40 && playerOne.ly <= 490){ // Down
move(0,s);
}
if( direction == 37 && playerOne.lx >= 10){ // Left
move(-s,0);
}
if( direction == 39 && playerOne.lx <= 490){ // Right
move(s,0);
}
};
window.onload = function() {
zone = document.getElementById('canvas').getContext('2d');
zone.save();
zone.translate(playerOne.lx, playerOne.ly);
persona(playerOne.playerSize, playerOne.colour);
zone.restore();
};
所以我尝试将角色功能移动到播放器模板中,如下所示:
function player(x, y, z, colour, speed){
this.lx = x;
this.ly = y;
this.speed = 10;
function persona(){
zone.fillStyle = colour;
var offset = 0 - (z / 2);
zone.fillRect(offset, offset, z, z);
}
}
然后在它之前说的地方
persona(playerOne.playerSize, playerOne.colour);
现在只是说
playerOne.persona();
但这只是完全失败并且不起作用,我不知道为什么。
我可能走错了路,我认为问题在于我试图从对象/模板中操作 canvas.context(我的脚本中的调用区域)。
也许这根本与我无关,我只是没有在模板的上下文中正确声明我的角色功能。
canvas API 的文档非常薄弱,任何正确方向的提示都将不胜感激。
【问题讨论】:
-
HTML 5 规范在未来几年仍然很容易发生很多变化(包括画布)
-
是的,但是 API 变得越来越稳定,所以它完全可以按原样使用。
标签: javascript oop templates canvas