完成Mario的跳跃功能
思考1:如何判断当前Mario是否可以跳跃?
分析:如果处在某个障碍物的上面,Mario是可以跳跃的。但如果已经在空中的话,Mario就不能继续跳跃了。
// 如果符合下述条件,表示当前处在一个障碍物的上面
if (ob.getY() == this.y + 60 && (ob.getX() - 60 < this.x && ob.getX() + 60 > this.) {
onLand=true;//onLand是boolean类型的标志位,默认为false
}
思考2:如何实现按空格键进行跳跃
分析:如果可以跳跃,每按一次空格键就会进行跳跃,当上升到一定程度就会有一个下落的过程。
1.在MainFrame的keyPressed方法中增加对空格键的处理//当按下空格键时,Mario开始跳跃
if(e.getKeyCode()==32){
this.mario.jump();
}
2.完成Mario中的jump方法
public void jump() {
// 如果当前处于静止状态,表示可以进行跳跃
if (this.status.indexOf("jumping") == -1){
if (this.status.indexOf("left") != -1) {
this.status = "left--jumping";
} else {
this.status = "right--jumping";
}
ymove=-5;
}
}
而跳跃应该分成两个阶段,之前是上升的阶段,之后是下落的过程。上升时纵坐标不断减小,下落时纵坐标增大。
3.在Mario中增加down方法。注意Mario下落时,不仅跳跃会下落,当移动到障碍物边界继续移动时也会下落。
//加入下落的方法
public void down(){
if (this.status.indexOf("left") != -1) {
this.status = "left--jumping";
} else {
this.status = "right--jumping";
}
ymove=5;
}