-2

これは、アプレット アニメーションを初めて使用した経験です。私は、アプレットの上部でブロックの列が動き続けなければならない小さなゲームを作成し、d の下部の derz で、d の移動する列の d ブロックの 1 つに弾丸を当てる必要があるブロックを作成しました。上方向キーを押すたびに、弾丸が上がり始めますが、列車は止まります(なぜそうなったのかはわかっています)。 :

//<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() {}
}

私が必要としているのは、同じアプレットに 2 つの別個の paint() を使用するか、同じアプレットに 2 つの別個の 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 に答える