Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/81.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_Image_Animation - Fatal编程技术网

java映像不移动

java映像不移动,java,image,animation,Java,Image,Animation,嗨,伙计们,我正在做一个游戏。但由于某种原因,图像既不会出现也不会移动 下面是一些代码 TheScreen.java package TheCarePackage; import javax.swing.*; import java.awt.*; import java.awt.event.*; public class TheScreen extends JFrame implements KeyListener{ short FWIDTH = 500; short FHEIGHT =

嗨,伙计们,我正在做一个游戏。但由于某种原因,图像既不会出现也不会移动

下面是一些代码

TheScreen.java

package TheCarePackage;

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class TheScreen extends JFrame implements KeyListener{

short FWIDTH = 500;
short FHEIGHT = 500;

private Image dbImage;
private Graphics dbGraphics;

private Image Bg;

static Player_1 P1 = new Player_1(250,450);
static AlienSpawner AS = new AlienSpawner();

public TheScreen(){

    addKeyListener(this);
    setTitle("1st Game");
    setSize(FWIDTH,FHEIGHT);
    setResizable(false);
    setLocationRelativeTo(null);
    setBackground(Color.white);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setVisible(true);

    ImageIcon back = new      ImageIcon("C:/Users/yellowsoldier25/Desktop/Games/PlanB_1stGame/src/TheCarePackage/Images/Background.png");
    Bg = back.getImage();

}

public void paint(Graphics g){

    dbImage = createImage(getWidth(),getHeight());
    dbGraphics = dbImage.getGraphics();
    paintComponent(dbGraphics);
    g.drawImage(dbImage,0,0,this);

}

public void paintComponent(Graphics g){

    g.drawImage(Bg,0,0,this);
    P1.draw(g);
    AS.paint(g);

    repaint();

}

public static void main(String[] args) {

    new TheScreen();

    Thread As = new Thread(AS);
    Thread Player1 = new Thread(P1);
    As.start();
    Player1.start();

}

public void keyPressed(KeyEvent e) {

    P1.keyPressed(e);

}

public void keyReleased(KeyEvent e) {}
public void keyTyped(KeyEvent e) {}



}
ThePlayer.java

package TheCarePackage;

import java.awt.event.*;
import java.awt.*;
import javax.swing.*;

public class Player_1 implements Runnable{

public int a = 8;

int x,y;
Image Player_1;

private Shot[] shots;
static AlienSpawner AS = new AlienSpawner();

public Player_1(int x, int y){

    this.x = x;
    this.y = y;

    ImageIcon i = new ImageIcon("C:/Users/yellowsoldier25/Desktop/Games/PlanB_1stGame/src/TheCarePackage/Images/Player_1.png");
    Player_1 = i.getImage();

    shots = new Shot[8];

}

public void draw(Graphics g){

    g.drawImage(Player_1,x,y,50,50,null);

    g.setColor(Color.white);
    g.drawString("Ammo : " + a,10,40);

    for(int i = 0; i < shots.length; i++){

        if(shots[i] != null){

            shots[i].drawShot(g);

        }

    }

}

public void keyPressed(KeyEvent e) {

    if(e.getKeyCode() == e.VK_LEFT){

        x += -8;

    }
    if(e.getKeyCode() == e.VK_RIGHT){

        x += 8;

    }
    if(e.getKeyCode() == e.VK_SPACE){

    for(int i = 0; i < shots.length; i++){

        if(shots[i] == null){

            a--;
            shots[i] = generateShot();
            break;

        }

    }

    }

}

public void keyReleased(KeyEvent e) {}

public void keyTyped(KeyEvent e) {}

public Shot generateShot(){

    Shot shot = new Shot(x+23,y-7);

    return shot;

}

@Override
public void run(){
    try{
        while(true){

            Thread.sleep(5);

            for(int i = 0; i < shots.length; i++){

                if(shots[i] != null){

                    shots[i].moveShot(-1);

                    if(shots[i].getY() < 0){

                        shots[i] = null;
                        a++;

                    }


                }

            }

        }
    }catch(Exception e){System.err.println(e.getMessage());}
}

}
外星人阶级还有另一个问题

package TheCarePackage;

import java.awt.*;
import javax.swing.*;

public class Alien1stVariant {

private int x;
private int y;

private Image Alien;

public Alien1stVariant(int x, int y){

    this.x = x;
    this.y = y;

    ImageIcon AlienIcon = new ImageIcon("C:/Users/yellowsoldier25/Desktop/Games/PlanB_1stGame/src/TheCarePackage/Images/Alien.png");
    Alien = AlienIcon.getImage();

}

public int getX(){

    return x;

}

public int getY(){

    return y;

}

public void movement(int speed){

    y += speed;

}

public void drawAlien(Graphics g){

    g.drawImage(Alien,x,y,40,40,null);

}

}
请尽快帮忙


问题:外来映像将不会移动并显示。

运行方法中的TheAlienSpawner.java文件中似乎有一个无限循环:

public void run() {
    try{
        Thread.sleep(20);
    while(true){ //This will never end
    A1.movement(1);
    }
    }catch(Exception e){System.err.println(e.getMessage());}
}
您只需在While(true)之前将胎面休眠20 ms,这会导致无限循环,您所寻找的类似于此:

public void run() {
   try{
       while(true){
           Thread.sleep(20);
           A1.movement(1);
       }
    }catch(Exception e){System.err.println(e.getMessage());}
}

JFrame没有paintComponent()方法,所以不要尝试重写它

您也不应该重写paint()方法。相反,自定义绘制是通过扩展JPanel(或JComponent)完成的,然后将面板添加到框架的内容窗格中


如果要制作动画,请使用Swing Timer now a while loop with a sleep()。

调试时您学到了什么?图像不会移动,也不会拍摄,但如果删除run方法,则图像会显示,但仍然不会移动。这是一个关于图像重置和动画制作的问题。这怎么会是一个“地方问题”?很多人都有这些问题。忘掉你自己,伙计们,试着对论坛做出积极的贡献,而不是攻击第一个在网站上发帖的人。
public void run() {
   try{
       while(true){
           Thread.sleep(20);
           A1.movement(1);
       }
    }catch(Exception e){System.err.println(e.getMessage());}
}