-2

这是我对小程序动画的第一手经验。我创建了一个小游戏,其中在小程序的上部,一列块必须保持移动,而在底部 derz 上,块 dat 必须将子弹击中 d 块移动的火车中的一个。问题是 dat每当我按下向上方向键时,子弹开始向上但火车停止(虽然我知道它为什么会发生)。但我需要子弹和火车移动(根据他们自己的速度).....赫兹代码:

//<applet code=abyss.java width=500 height=500></applet>
import java.awt.*;
import java.applet.Applet;
import java.awt.event.*;

public class abyss extends Applet implements Runnable,KeyListener{
int l,i=0,n,c,ct=450,cl=225,y,f,bl,bw,fr;
Thread v=null;
public void init() {
setBackground(Color.black);
addKeyListener(this);
                      }
public void start() {
       v=new Thread(this);
       v.start();
                         }
public void run() {
try{
while(true) {
if(y==1) {
bl=cl+25;
bw=4;
f=446;
while(f>41)
 {
repaint(bl,f,bw,bw);
f--;
v.sleep(5);
    }
y=0;
bw=0;
          }
System.out.println("in thread");
repaint(); 
v.sleep(1000);
i=i+40; 
c=1; 
System.out.println("after sleep");
n=i/40;              

 } 

  }
catch(Exception e){}

                      }


public void paint(Graphics g) {
g.setColor(Color.darkGray);
g.fillRect(0,200,30,300);
g.fillRect(470,200,30,300);
g.fillRect(0,470,500,30);
g.setColor(Color.blue);
g.fillRect(cl,ct,50,20);
setBackground(Color.black);
System.out.println("in paint()");
for(int j=n;j>=0;j--)
{  l=j*40;
if((c%2)==0)
{g.setColor(Color.orange);
g.fillRect(l,0,50,40);}
else
{g.setColor(Color.cyan);
g.fillRect(l,0,50,40);}
c++;
System.out.println("in for"); 
}

g.setColor(Color.yellow);
g.fillOval(bl,f,bw,bw);                            
                                           }

public void keyPressed(KeyEvent e) {
if(e.getKeyCode()==KeyEvent.VK_LEFT){
cl=cl-10;}
if(e.getKeyCode()==KeyEvent.VK_RIGHT){
cl=cl+10;}
if(e.getKeyCode()==KeyEvent.VK_UP){
y= 1;}
}
public void keyReleased(KeyEvent e) {}
public void keyTyped(KeyEvent e) {}
public void stop() {
try{wait();}
catch(Exception e) {}
}
public void destroy() {}
}

我需要的是为同一个小程序使用两个单独的paint()或为同一个小程序使用两个单独的run()........但我找不到两者的实现。PLz尽快帮助

4

1 回答 1

1

修改你的run方法:

public void run() {
    try {
        int trainDelay = 0;

        while (true) {
            if (y == 1) {
                if (f > 41 == false) {
                    bl = cl + 25;
                    bw = 4;
                    f = 446;
                }
                if (f > 41) {
                    repaint(bl, f, bw, bw + 1);
                    if (--f > 41 == false) {
                        y = 0;
                        bw = 0;
                    }
                }
            }
            if (trainDelay <= 0) {
                repaint();
                i = i + 40;
                c = 1;
                n = i / 40;
                trainDelay = 200;
            }
            Thread.sleep(5);
            trainDelay--;
        }
    } catch (Exception e) {
    }
}
于 2013-04-21T07:47:56.873 回答