2012-07-15 138 views
0

当前正在制作HTML5 Canvas Spaceship游戏。但我有一个巨大的问题: 我为我的飞船创建了一个类,我想用箭头键移动它。但由于某种原因,它不会移动。在画布上移动对象

Chrome Inspector不会显示任何错误,但飞船仍然不会移动。

我不完全确定,但是在类中的对象中可能存在问题吗?

你可以找到我的Git项目数据:https://github.com/nemoxdelight/First_Game/

此外,对不起我的英语不好,我只是一个德国谁需要帮助;)

而且这里是我认为部分这个问题可能是:(在main.js)

function o_move_paddle(p_event) { 
    if(p_event.keyCode == KEY_RIGHT) { 
     held1.rechtsTaste = true; 
     p_event.preventDefault(); 
    } 
    if(p_event.keyCode == KEY_LEFT) { 
     held1.linksTaste = true; 
     p_event.preventDefault(); 
    } 
    if(p_event.keyCode == KEY_UP) { 
     held1.hochTaste = true; 
     p_event.preventDefault(); 
    } 
    if(p_event.keyCode == KEY_DOWN) { 
     held1.runterTaste = true; 
     p_event.preventDefault(); 
    } 
} 

而且在我的Heroclass创建held.js,它应该移动对象:

Held.prototype.tasteCheck = function() { 
    if(this.hochTaste) { 
     this.held_y -= this.speed; 
    } 
    if(this.rechtsTaste) { 
     this.held_x += this.speed; 
    } 
    if(this.linksTaste) { 
     this.held_x -= this.speed; 
    } 
    if(this.runterTaste) { 
     this.held_y += this.speed; 
    } 
}; 

回答

1

你的问题是你(重新)在游戏的主循环内创建你的英雄。因此,每当游戏进入循环时,它就会在开始坐标处形成一个新的英雄。因此出现不动。

这是一个快速和肮脏的解决方案,以解决您的问题。 您main.js里面改变“循环”功能,所以它是这个

function loop(){ 
    clearCanvas(); 
    level(); 
    if(!held1) 
    held1 = new Held(); 
    held1.draw(); 
    feinde_zeichnen(); 
    // snd.play(); 
} 

你应该在其他地方创建你的英雄,在循环开始之前,只有一次,所以你可以确保它始终是一些物体。

编辑:

之前,我忘了:你应该重新在“o_stop_paddle”功能举行的rechtsTaste,linksTaste,hochTaste和你的runterTaste变量或将继续前进,一旦你放手的关键,以及一旦你按下所有方向,就停止移动,因为它会尝试向所有方向移动,这相当于根本没有移动。

+0

谢谢@Pirokiko真的帮了我很多。但是我改变代码后问题仍然存在。我可以用'held1.held_x + = 20;'通过控制台移动我的飞船;'有什么我失踪?我也更新了我的Git。 – user1478242 2012-07-15 14:01:22

+0

你的控制台还应该说一些关于无法找到Held类的内容 在constant.js里面,你现在使用'Held()'它还不知道,所以在你的index.html中包含constant.js之前的held.js 同样在'move_held'的main.js中,你移动了保持而不是将rechtsTaste设置为'true' – Pirokiko 2012-07-15 14:20:53

+0

非常感谢,它终于为我效劳了!我现在有一个值来检查循环是否已经运行,如果是,它不会再绘制它。难道我更喜欢解决方案:) – user1478242 2012-07-15 14:27:05