目前即将制作HTML5 Canvas太空飞船游戏。但我有一个很大的问题: 我为我的宇宙飞船创建了一个类,我想用箭头键移动它。但出于某种原因它不会动。
Chrome Inspector不会显示任何错误,但Spaceship仍然无法移动。
我不完全确定但是这个类中的对象会出现问题吗?
您可以在我的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中,它应该移动Object:
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;
}
};
答案 0 :(得分:1)
你的问题是你(重新)在游戏的主循环中创建你的英雄。 因此,每当你的游戏进入循环时,它就会在开始坐标处形成一个新的英雄。因此出现不动。
这是解决问题的快速而肮脏的方法。 在你的main.js里面改变'loop'函数,所以就是这个
function loop(){
clearCanvas();
level();
if(!held1)
held1 = new Held();
held1.draw();
feinde_zeichnen();
// snd.play();
}
你应该在启动循环之前的其他地方创建你的英雄,只有一次,这样你才能确定它总是某个对象。
编辑:
在我忘记之前:你应该重置你在'o_stop_paddle'功能中保存的rechtsTaste,linksTaste,hochTaste和runterTaste变量,否则一旦你松开键它就会继续移动,并且一旦你按下它就会停止一起移动所有方向,因为它会试图向各个方向移动,这相当于没有任何移动。