2014-11-08 65 views
0

我对Java和编程一般都很陌生,所以我试着编写一个简单的程序,其唯一的工作是用箭头键移动球并用空格键跳跃。程序编译但球不动。当我按下一个按钮时,为什么我的小程序中球没有移动?

我可能没有完全理解Applet的原则,你能向我解释我犯的错误吗?

小程序:

package test_game; 

import java.applet.Applet; 
import java.awt.Graphics; 
import java.awt.event.KeyEvent; 
import java.awt.event.KeyListener; 

public class Starting_Point extends Applet implements Runnable, KeyListener { 

    private static final long serialVersionUID = 1L; 
    private static final int WIDTH = 700; 
    private static final int HEIGHT = 300; 
    Character Phil; 
    Thread thread; 

    @Override 
    public void init() { 
     setSize(WIDTH,HEIGHT); 
     Phil = new Character(50, 200); 
    } 

    @Override 
    public void start() { 
     thread = new Thread(this); 
     thread.start(); 
    } 

    public void run() { 
     while (true) { 
      repaint(); 
     } 
    } 

    @Override 
    public void paint(Graphics arg0) { 
     Phil.paint(arg0); 
    } 

    @Override 
    public void keyPressed(KeyEvent arg0) { 
     switch (arg0.getKeyCode()) { 
      case (KeyEvent.VK_LEFT): Phil.setX(Phil.getX() - Phil.getDx()); 
       break; 
      case (KeyEvent.VK_RIGHT): Phil.setX(Phil.getX() + Phil.getDx()); 
       break; 
      case (KeyEvent.VK_SPACE): Phil.setDy(Character.gravity * Character.dt); 
       Phil.setY(Phil.getY() + .5*Character.gravity*Character.dt*Character.dt + Phil.getDy()*Character.dt + Character.jump); 
       break; 
     } 
    } 

    @Override 
    public void keyReleased(KeyEvent arg0) { 
     // TODO Auto-generated method stub 
    } 

    @Override 
    public void keyTyped(KeyEvent arg0) { 
     // TODO Auto-generated method stub 
    } 
} 

字符类别:

package test_game; 

import java.awt.Color; 
import java.awt.Graphics; 

public class Character { 

    private int x; 
    private int y; 
    private int radius = 10; 
    Graphics g; 
    public static final int gravity = 15; 
    private static final double dx = 4; 
    public double dy; 
    public static final double dt = .2; 
    public static final int jump = 30; 

    public Character(int x, int y) { 
     this.x = x; 
     this.y = y; 
    } 

    public void setX(double d) { 
     this.x = (int) d; 
    } 

    public void setY(double d) { 
     this.y = (int) d; 
    } 

    public double getDx() { 
     return dx; 
    } 

    public int getX() { 
     return x; 
    } 

    public int getY() { 
     return y; 
    } 

    public void setDy(double dy) { 
     this.dy = dy; 
    } 

    public double getDy() { 
     return dy; 
    } 

    public void paint(Graphics g) { 
     g.setColor(Color.black); 
     g.fillOval(x, y, radius, radius); 
    } 
} 
+1

*“我试图写一个简单的程序..”*小程序从来不简单。先制作相框。 1)为什么要编写一个小程序?如果是由于老师指定它,请将它们转介给[为什么CS教师应该**停止**教Java applets](http://programmers.blogoverflow.com/2013/05/why-cs-teachers-should -stop教学-java的小应用程序/)。 2)为什么使用AWT?看到[这个答案](http://stackoverflow.com/questions/6255106/java-gui-listeners-without-awt/6255978#6255978)有很多很好的理由放弃AWT使用组件有利于Swing。 – 2014-11-09 03:23:42

回答

1

您已经定义了一个KeyListener你代码中。但是,您忘记将此事件监听器注册到某个组件,因此它从未被调用过。

如何注册您的KeyListener:

将下面的代码里面你start()

this.addKeyListener(this); 

这与角色移动到左或右,但跳跃ISN解决问题固定跳跃需要更多代码来计算所需的正确y +,当您按空格键时,当前代码始终将0(使用您使用的(int)四舍五入为0)添加到y坐标。

相关问题