Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法在小程序中实现并发动画_Java_Multithreading_Applet - Fatal编程技术网

Java 无法在小程序中实现并发动画

Java 无法在小程序中实现并发动画,java,multithreading,applet,Java,Multithreading,Applet,这是我对applet动画的第一手体验。我创建了一个小游戏,在小程序的上半部分,一列积木必须继续移动,在d底部,一个积木dat必须击中d移动积木d中的一个积木。问题是dat每当我按下方向向上键时,子弹开始向上移动,但火车停止了(尽管我知道为什么会发生).但我需要子弹和火车一起移动(根据他们自己的速度)…herz d代码: //<applet code=abyss.java width=500 height=500></applet> import java.awt.*; i

这是我对applet动画的第一手体验。我创建了一个小游戏,在小程序的上半部分,一列积木必须继续移动,在d底部,一个积木dat必须击中d移动积木d中的一个积木。问题是dat每当我按下方向向上键时,子弹开始向上移动,但火车停止了(尽管我知道为什么会发生).但我需要子弹和火车一起移动(根据他们自己的速度)…herz d代码:

//<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() {}
}
//
导入java.awt.*;
导入java.applet.applet;
导入java.awt.event.*;
公共类abyss extends小程序实现可运行的KeyListener{
整数l,i=0,n,c,ct=450,cl=225,y,f,bl,bw,fr;
线程v=null;
公共void init(){
挫折背景(颜色:黑色);
addKeyListener(此);
}
公开作废开始(){
v=新螺纹(该螺纹);
v、 start();
}
公开募捐{
试一试{
while(true){
如果(y==1){
bl=cl+25;
bw=4;
f=446;
而(f>41)
{
重新喷漆(bl、f、bw、bw);
f--;
v、 睡眠(5);
}
y=0;
bw=0;
}
System.out.println(“线程内”);
重新油漆();
v、 睡眠(1000);
i=i+40;
c=1;
System.out.println(“睡眠后”);
n=i/40;
} 
}
捕获(例外e){}
}
公共空间涂料(图g){
g、 setColor(Color.darkGray);
g、 fillRect(0200,30300);
g、 fillRect(470200,30300);
g、 fillRect(0470500,30);
g、 setColor(Color.blue);
g、 fillRect(cl,ct,50,20);
挫折背景(颜色:黑色);
System.out.println(“in paint()”);
对于(int j=n;j>=0;j--)
{l=j*40;
如果((c%2)=0)
{g.setColor(Color.orange);
g、 fillRect(l,0,50,40);}
其他的
{g.setColor(Color.cyan);
g、 fillRect(l,0,50,40);}
C++;
System.out.println(“in for”);
}
g、 setColor(颜色为黄色);
g、 卵圆形(bl,f,bw,bw);
}
按下公共无效键(按键事件e){
如果(例如getKeyCode()==KeyEvent.VK_左){
cl=cl-10;}
if(e.getKeyCode()==KeyEvent.VK_RIGHT){
cl=cl+10;}
如果(例如getKeyCode()==KeyEvent.VK_UP){
y=1;}
}
public void keyReleased(KeyEvent e){}
public void keyTyped(KeyEvent e){}
公共停车场(){
试试{wait();}
捕获(例外e){}
}
public void destroy(){}
}

我需要的是对同一个小程序使用两个单独的paint()或对同一个小程序使用两个单独的run()。但我找不到任何一个的实现。请尽快帮助修改您的
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) {
    }
}
public void run(){
试一试{
int trainDelay=0;
while(true){
如果(y==1){
如果(f>41==false){
bl=cl+25;
bw=4;
f=446;
}
如果(f>41){
重新喷漆(bl、f、bw、bw+1);
如果(--f>41==false){
y=0;
bw=0;
}
}
}

如果(trainDelay)使用适当的英语使你的问题可读。“herz d代码”不是英语。如果你想尽快得到帮助,你最好让你的问题易于阅读并被免费回答者理解。同时,在你回答问题时,缩进你的代码。